Select,insert,delete,update, sql,resultMap,cache,cache-ref
7.1 Select
Id,提供给mybatis调用的唯一标识
案例1
普通的查询,我们之前已经接触过了
案例2
表字段和类属性不一致的情况怎么办?比如用户表新增一个role_name字段,需要在查询时取别名as roleName
案例3
模糊查询
案例4
传递多个参数
1.采用map的方式传递
2.采用注解的方式
3.采用javabean的方式
总结:
同个类里面的属性,就是bean的方式传递
不是的话,map和注解选择
少的(小于5个),就选注解,多的话就选map
7.2 sql片段
7.3 动态表格技术
7.4 Insert
案例一:普通插入
案例二:主键回填
插入一个对象之后,要拿到这个对象的id
7.5 动态SQL
解决大量拼装SQL的工作
7.5.1 if
需求:我们现在做用户查询,有可能带用户名,有可能不带
7.5.2 where
会自动拼接where,多语句满足条件会自动删除第一个and
7.5.3 trim
替换作用
7.5.4 choose/when/otherwise
多个查询条件同时出现的时候,排优先级
If ..elseif..else
只会拼装从上到底第一条满足条件的语句
7.5.5 set
假如一个表有多个字段,但我只需要更新需要更新的字段,减少网络带宽
7.5.6 foreach
案例,我们做批量的删除或更新
方式一:数组
方式二:List集合
方式三:Map集合
Collection中value为map的key
7.6 ResultMap结果集映射
1)定义映射的规则
2)级联的更新
3)定制类型转化器
7.6.1 映射结果集
比如上面,我们遇到的数据表字段和类属性不一致的情况,这个时候,我们可以用resultMap来做对应的映射关系
普通字段
枚举类型(查询和插入的配置区别)
7.6.2 类型处理器(枚举)
作用:
typeHandler的作用就是两个
一个是将JavaType转换为jdbcType,
另一个是从数据库取出结果时把jdbcType转换为JavaType
ORM
4)系统预定义的typeHandler- TypeHandlerRegistry(
StringTypeHandler extends BaseTypeHandler
BaseTypeHandler<T> extends TypeReference<T> implements TypeHandler<T>
)
自定义typeHandler
配置文件:
6)枚举类型的typeHandler
org.apache.ibatis.type.EnumTypeHandler
org.apache.ibatis.type.EnumOrdinalTypeHandler
实验:
表新增一个字段sex varchar
类新增一个属性 Sex sex,创建一个枚举类SEX
特殊设置
7.6.3级联
Onetoone one tomany manytoone manytomany
单向,双向
Order
List<orderDetail> list
orderDetail
Order order
<Set>
对一
(一对一,多对一)
对多
(一对多,多对多)
association:对一级联
collection:对多级联
a)对一级联
内部配置关系
外置配置关系
b)对多级联