Mybatis支持自动绑定JavaBean,只要让SQL返回的字段名和JavaBean的属性名保持一致(或者采用驼峰式命名),便可以省掉这些繁琐的映射配置.
4.2 select元素
4.2.3自动映射
autoMappingBehavior属性: NULL:取消自动映射 PARTIAL:只会自动映射,没有定义嵌套结果集映射的结果集. FULL:会自动映射任意复杂的结果集(无论是否嵌套).
数据库规范命名的,每个单词都用下划线分割,POJO采用驼峰式命名方法,那么可以设置mapUnderscoreToCamelCase为true,实现从数据库到POJO的自动映射.
4.2.4传递多个参数
1.使用Map传递参数 2.使用注解方式传递参数 3.使用JavaBean传递参数
4.2.5使用resultMap映射结果集
1.3 insert元素
4.3.2 主键回填和自定义 使用keyProperty属性指定哪个是主键字段,同时使用useGeneratedKeys属性告诉MyBatis这个主键是否使用数据库内置策略生成.
可以使用selectKey元素进行自定义处理
在插入数据时,主键的值也可以使用自定义序列设置, nextval(‘ ‘)
1.4 update元素和delete元素
4.5参数
4.5.1参数配置 #{price,javaType=double, jdbcType=NUMERIC, numericScale=2, typeHandler=MyTypeHandler}
4.5.2 存储过程支持
4.5.3 特殊字符串替换和处理(#和$)
4.6 sql元素
可以定义一串SQL语句的组成部分,其他的语句可以通过引用来使用它
Select
Fromt_role r where role_no=#{roleNo}
我们还可以给refid一个参数值,由程序制定引入SQL
4.7 resultMap结果映射集
它的作用是定义映射规则/级联的更新/定制类型转化器等.
4.7.1 resultMap元素的构成
假设RoleBean不存在没有参数的构造方法,它的构造方法声明为publicRoleBean(Integer id, String roleName),那么配置这个结果集:
4.7.2使用map存储结果集 4.7.3使用POJO存储结果集
4.7.4 级联
MyBatis中级联分为3种:
Association:一对一关系 collection:一对多关系
Discriminator:鉴别器,可以根据实际选择采用哪个类作为实例,允许根据特定的条件去关联不同的结果集.
多层关联时,建议超过三层关联时尽量少用级联
为了处理N+1的问题,MyBatis引入了延迟加载的功能,延迟加载功能的意义在于,一开始并不取出级联数据,只有当使用了它了才发送SQL去取回数据
在MyBatis的配置中有两个全局的参数lazyLoadingEnable:是否开启延迟加载功能.
AggressiveLazyLoading的含义是对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将按需加载.
在默认的情况下,MyBatis是按层级延迟加载的,aggressiveLazyLoading为true时,MyBatis的内容按层级加载,否则就按我们调用的要求加载.
局部延迟加载功能.可以在association和collection元素上加入属性值fetchType,它有两个取值:eager和lazy
另一种级联 没有N+1的问题 尽量通过左连接找到其他信息.
ofType属性定义的是collection里面的泛型是什么Java类型,Mybatis会拿你定义的Java类和结果集做映射.
4.8缓存cache
在默认情况下,mybatis只开启一级缓存(一级缓存只是相对于同一个sqlsession而言)
SqlSessionFactory层面上的二级缓存是不开启的,二级缓存的开启需要进行配置,实现二级缓存的时候,Mybatis要求返回的pojo必须是可序列化的,也就是要求实现serializable接口,配置的方法很简单,只需在映射XML文件配置就可以开启缓存.
Eviction:代表的是缓存回收策略.----LRU:最近最少使用的 FIFO:先进先出 SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象. WEAK:弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象.
flushInterval:刷新间隔时间 readOnly:只读,意味着缓存数据只能读取而不能修改
自定义缓存
也可以配置SQL层面上的缓存规则