Mapper映射文件
MyBatis Mapper映射文件主要包含以下标签:
select、insert、updae、delete、resultMap、parameterMap、sql、include、selectKey。
select
查询标签,对应一条查询语句。示例:
<select id="selectUserById" paramterType="Integer" resultType="User">
select * from user where id = #{id}
</select>
这条语句就叫做 selectUserById, 有一个 int(或是 Integer)参数, 并返回一个User类型(可以是完整类名或别名)结果集。 除了上述属性,select标签还有很多属性,具体如下:
属性 | 描述 |
---|---|
id | 语句唯一标识 |
paramterType | 参数类型(完整类名或别名) |
resultType | 结果集类型(完整类名或别名) |
resultMap | 引用定义的 resultMap ,就是自定义映射关系。不能与resultType共用 |
flushCache | 如果设为 true,则会在每次语句调用时都会清空缓存。 select 语句默认设为 false |
useCache | 如果设为 true,则语句的结果集将被缓存, select 语句默认设为 false |
timeout | 设置驱动器在抛出异常前等待回应的最长时间,默认不设置值,由驱动器自己决定 |
fetchSize | 设置一个值后,驱动器会在结果集数目达到此数值后返回,默认不设置值,由驱动器自己决定 |
statementType | STATEMENT、PREPARED 、CALLABLE 中的任意一个, 这就告诉 MyBatis 分别使用 Statement, PreparedStatement 或者 CallableStatement。默认: PREPARED |
resultSetType | FORWARD_ONLY 、 SCROLL_SENSITIVE 、SCROLL_INSENSITIVE 中的任意一个。 默认是不设置 |
insert、update、delete
insert、update、delete都是更新语句,拥有的属性差不多。除了上述属性外,还有以下属性:
属性 | 描述 |
---|---|
useGeneratedKeys | (仅限insert)标识使用 JDBC 的 getGeneratedKeys 方法来获取数据库自动生成的主键 。默认: false |
keyProperty | (仅限insert)标识自动生成主键的列 |
在insert语句里,还可以使用
<selectKey>
标签手动生成主键,可以用于数据库不支持自动生成主键的情况下。如:
<insert id="insertUser" paramterType="User" resultType="Integer"> <selectKey keyProperty="id" resultType="Integer" order="BEFORE"> select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY </selectKey> insert into user(name, gender) values(#{name}, #{gender}) </insert>
sql
sql标签用于定义sql片段,使得这些片段可以复用。通过<include>
标签引用
如:
<sql id="userColumns">u.name, u.gender</sql>
<select id="selectUserById" paramterType="Integer" resultType="User">
select <include refid="userColumns"></include>
from user as u where u.id = #{id}
</select>
resultMap
结果集映射。用于将POJO对象的属性与数据库字段进行映射。它还支持对象间的关联关系。主要通过<association>
和<collection>
标签实现。
如:
<resultMap id="UserResultMap" type="User">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="gender" jdbcType="DECIMAL" property="gender" />
<association property="deptId" javaType="Dept">
<id column="deptId" property="id"/>
<result column="dept_name" property="deptName"/>
</association>
</resultMap>