文章目录
SQL映射文件(xxxMapper.xml)
SQL映射文件是用来配置SQL映射语句的,根据不同类型的sql语句选择不同的标签,常用的顶级元素有:
元素 | 描述 |
---|---|
resultMap(重要) | 用于接收查询结果 |
sql | 可重用语句块 |
select | 映射查找语句 |
update | 映射修改语句 |
insert | 映射插入语句 |
delete | 映射删除语句 |
select主要元素
select内部属性 | 描述 |
---|---|
id | 在命名空间中唯一的标识符,可以被用来引用这条语句 |
parameterType | 传入这条语句的参数类的完全限定名或别名 |
resultType | 从这条语句中返回的期望类型的类的完全限定名或别名,如果是集合应该填写集合所包含的类型 |
resultMap | 自定义的 resultType |
flushCache | 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:false |
useCache | 将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true |
insert主要元素
insert内部属性 | 描述 |
---|---|
id | 在命名空间中唯一的标识符,可以被用来引用这条语句 |
parameterType | 传入这条语句的参数类的完全限定名或别名 |
useGeneratedKeys | (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false |
主键回填
在insert元素中,有一个非常重要且常用的属性——useGeneratedKeys,它的作用的主键回填,就是将当前插入数据的主键返回。例如在插入语句中,我们没有插入主键 Id 列,因为在mysql数据库中将它设置为自增主键,数据库会自动为其生成对应的主键,所以没必要插入。但是有些时候我们还需要继续使用这个主键,用以关联其它业务,所以十分有必要获取它。比如在新增用户的时候,首先会插入用户的数据,然后插入用户和角色关系表,而插入用户时如果没办法取到用户的主键,那么就没有办法插入用户和角色关系表了,因此这个时候需要拿到对应的主键,以方便关联表的操作。
使用案例留空
update和delete元素
它们和insert元素的属性差不多,执行完后也会返回一个整数,用来表示该SQL语句影响了数据库的记录行数
sql元素
sql元素是用来定义可重用的 sql代码片段,这样在字段比较多的时候,以便在其它语句中使用。
<!--定义sql代码片段-->
<sql id="userCols">
id,username,age,sex,address
</sql>
sql元素还支持变量的传递
<!--定义sql代码片段-->
<sql id="userCols">
${alias}.id,${alias}.username,${alias}.age,${alias}.sex,${alias}.address
</sql>
<!-- 查询所有用户 -->
<select id="selectAllUser" resultType="com.thr.entity.User">
select <include refid="userCols">
<property name="alias" value="u"/>
</include>
from t_user u
</select>
parameterType
传入类型包括以下几类
1.映射基本数据类型(即八大基本数据类型,比如int,boolean,long等类型)
2.映射pojo类型(即普通的对象)
3. 包装pojo类型(包装pojo类型在Mybatis使用(二)中有使用示例,即内部属性为对象引用,集合等)
4.映射map类型 (还没用到)
resultType
1.映射基本数据类型(即八大基本数据类型,比如int,boolean,long等类型)
2.映射pojo类型(即普通的对象)
3.映射pojo列表(映射多列数据)
映射单个pojo对象和映射pojo列表映射文件中的resultType都配置为pojo类型。区别只是返回单个对象是内部调用selectOne返回pojo对象,返回pojo列表时内部调用selectList方法
<!-- 查询所有用户 -->
<select id="selectAllUser" resultType="com.thr.entity.User">
select * from t_user
</select>