1. select 标签
select 标签是用于定义插入语句的, select 标签是Mybatis 中最复杂的标签了.
1.1 常用属性
select 的属性和子标签比较多, 常用属性有:
- id: sql 片段在命名空间内的唯一标识. 和mapper 中方法名保持一致
- useGeneratedKeys: 是否回填自动生成的主键
- keyProperty: 主键回填到哪个属性
- keyColumn: 主键回填的字段名, 可省略
- parameterType: 参数类型, 通常都可以省略.
- flushCache: 是否刷新(清空)一级缓存和二级缓存, 默认为false.
- useCache: 是否将查询结果存入二级缓存, 默认为true. 对一级缓存无效.
- timeout: sql 执行超时时间, 默认未设置, 由数据库驱动决定.
- resultType: 指定结果集中每一行的封装类型, 支持自动封装为java中定义的类对象. 默认使用类的全限定名称, 配置别名后, 支持类的简单名称.
- resultMap: 指定结果集中每一行的封装类型, 是使用resultMap 标签定义的类型.
- statementType: 执行sql时使用的statement类型, 默认为PREPARED. 可选值为:STATEMENT,PREPARED 或 CALLABLE 的一个
<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout="20">
</insert>
1.2 返回值
Mybatis 的查询结果集封装着实很强大, 同一个sql片段, 会根据接口方法定义时返回值的不同, 而做自动封装. 笔者介绍一下常见的几种返回类型.
返回值类型 | 返回描述 |
---|---|
String/Integer/Float… | 返回单个的基本类型, Mybatis为基本类型内置了别名, resultType 可直接写别名. |
List/Set<String/Integer…> | 返回基本类型的集合 |
VO | 单个的java 类对象, 不局限于PO, VO, DTO 等均可 |
List/Set | java 对象集合 |
Map<String, Object> | 单个对象的字段名, 与值构成的Map |
Map<Object, VO> | 单个对象的某个属性和对象构成key=value 键值对的map, 如 Map<PK, PO>; 需要注意两点: 第一, 需要借助于@Mapper 注解指定key的字段; 第二, 如果PK类型指定为Long, 那么当id较小时, 便会返回Integer, 而报错. |
2. Select 标签返回举例
2.1 Mapper 方法定义
public interface DepartmentMapper {
// 返回单个基本类型
String queryDepartmentName(Long id);
// 返回基本类型集合
List<Long> queryAllIds();
// 返回单一对象
DepartmentPO findById(Long id);
// 返回对象集合
List<DepartmentPO> queryAll();
// 返回单个对象的所有属性
Map<String , Object&