MyBatis映射文件

MyBatis映射文件

leo 612 2021-04-10

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设置一个值后,驱动器会在结果集数目达到此数值后返回,默认不设置值,由驱动器自己决定
statementTypeSTATEMENT、PREPARED 、CALLABLE 中的任意一个, 这就告诉 MyBatis 分别使用 Statement, PreparedStatement 或者 CallableStatement。默认: PREPARED
resultSetTypeFORWARD_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>