Mybatis的Mapper映射文件中常用标签
Mapper文件标签
Mapper 中提供了 9 个顶层标签,其中 1 个已经过期,我们不做了解,另外 8 个都是必须要掌握的
<cache>
:该命名空间的缓存配置
<cache-ref>
:引用其他命名空间的缓存配置
<resultMap>
:用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象
<parameterMap>
:老式风格的参数映射,已被废弃。
<sql>
:可被其他语句引用的可复用的语句块
<insert>
:用来映射插入语句
<update>
:用来映射更新语句
<delete>
:用来映射删除语句
<select>
:用来映射查询语句
select
用来映射查询语句
<select id="listUserByUserName" parameterType="String" resultType="User">
select user_id,user_name from user where user_name=#{userName}
</select>
常用的二级标签
<select
id="selectPerson"
parameterType="int"
parameterMap="deprecated"
resultType="hashmap"
resultMap="personResultMap">
</select>
insert
<insert
id="insertLwUser"
parameterType="User"
parameterMap="deprecated"
keyProperty=""
useGeneratedKeys=""
</insert>
useGeneratedKeys
可选属性。配置为true时,MyBatis会使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值为false。
keyProperty
可选属性。唯一标记一个属性,MyBatis会将通过getGeneratedKeys 的返回值或者通过insert 语句的selectKey 子元素设置它的键值,默认值是unset 。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表
注意:高版本的mybatis支持批量插入数据的时候返回多条数据的主键ID,低版本的只支持插入一条数据的时候返回该条数据的主键ID
通过selectKey获取自定义列
<insert id="insert" useGeneratedKeys="true" keyProperty="userid">
<selectKey keyProperty="userId" resultType="string" order="BEFORE">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user(user_id,user_name) values (#{userId},#{userName})
</insert>
selectKey中的order属性有2个选择:BEFORE和AFTER。
- BEFORE:表示先执行selectKey的语句,然后将查询到的值设置到JavaBean对应属性上,然后再执行insert语句。
- AFTER:表示先执行AFTER语句,然后再执行selectKey语句,并将selectKey得到的值设置到JavaBean中的属性。上面示例中如果改成AFTER,那么插入的address就会是空值,但是返回的JavaBean属性内会有值。
PS:selectKey中返回的值只能有一条数据,如果满足条件的数据有多条会报错,所以一般都是用于生成主键,确保唯一,或者在selectKey后面的语句加上条件,确保唯一
update
和insert基本一致
delete
除了少了useGeneratedKeys,keyProperty标签之外,其余的和insert,update一样
sql
用来封装可复用的 sql 语句,可以包含在其他语句中
这时候select语句就可以引用:
<sql id="myCloumn" >
id,address
</sql>
<select id="selectUserAddress" resultType="org.yqiang.mybatis.entity.UserAddress">
select <include refid="myCloumn"></include>
from user_address
</select>
resultMap
用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象
定义一个 resultMap:
<resultMap id="JobResultMap" type="User">
<result column="user_id" property="userId" jdbcType="VARCHAR" />
<result column="user_name" property="userName" jdbcType="VARCHAR" />
</resultMap>
这时候select语句就可以引用:
<select id="selectUserAndJob" resultMap="JobResultMap">
select * from user
</select>