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)对多级联