Mybatis简单使用
Mybatis 映射文件
-
#{id}
,该形式是采用数据库预处理形式传入查询参数,在SQL中以?
标示,是一个参数占位符 -
${column}
字符串替换,Mybatis不会对传入的参数进行转义,缺点是有SQL注入的危险
//常规查询
@Select("select * from user where id = #{id}")
User findById(@Param("id") long id);
@Select("select * from user where name = #{name}")
User findByName(@Param("name") String name);
//Mybatis用${column}进行字符串替换,一句即可替代多句SQL查询语句
@Select("select * from user where ${column} = #{value}")
User findByColumn(@Param("column") String column, @Param("value") String value);
-
association
关联元素,处理有一个
类型关系,一对一- 关联的select查询,有
N+1
问题(你执行了一个单独的 SQL 语句来获取结果的一个列表(就是“+1”)对列表返回的每条记录,你执行一个 select 查询语句来为每条记录加载详细信息(就是“N”)),解决方案,延迟加载
- 关联的嵌套查询,将查询结果封装在结果集(resultMap),在association标签体中嵌套resultMap。
一对多
情况时,可一使用多个accociation标签,标签体内用columnPrefix属性区别不同的resultMap。从Mybatis3.2.3版本开始可以使用resultSets属性,处理这个问题
- 关联的select查询,有
-
collection
集合- 集合的嵌套
Select查询
ofType
属性用来将JavaBean字段的属性类型和集合存储类型区分开来 - 集合的嵌套结果映射
- 多结果集(ResultSet)
- 集合的嵌套
缓存
- 默认开启一级缓存,只对一个会话中的数据进行缓存
- 开启二级缓存,SQL映射文件中添加
<cache/>
标签
动态SQL
- if
- choose (when, otherwise)
- trim (where, set)
严律己、宽待人