mybatis 映射器组件
在新增的时候 mybatis 提供 selectKey 标签来实现主键自增长策略,也可以实现自定义主键增长策略。这里的增长并不是数字层面的增长,而是不同的意思。
参数
==
在传参的方式有很多种,我们可以选择 map ,也可以选择 javabean,也可以多参传递。多参传递的时候我们需要添加
@Param
注解标注属性名。根据实际情况自行选取哪种方式。上面提到 resultMap 可以指定 typeHandler,实际上在参数上我们也可以。#{name,javaType=double,jdvbType=NUMERIC,typeHandler=MyTypeHandler}
#{name} 这种方式 mybatis 会自动根据数据格式进行映射,但是当 name 为 null,mybatis 就无法映射,这个时候我们 #{name,jdbcType=VARCHAR}。mybatis 就会采用 StringTypeHandler 去解析
还有就是 # ,$ 的区别。这里不多说,前者是占位,后者是拼接
resultMap
=========
resultMap 是最复杂的一个标签,他的功能可以实现字段的映射、级联的查询、定制类型转换器。resultMap 目前只能用在 select 标签中。新增没有。
```xml
级联
级联在我们平时开发中是最常见的。我们通过 pojo 接收返回结果的时候我们经常需要处理的就是级联的问题。在上面的 resultMap 中通过 association、collection 来负责一对一。一对多的处理。具体的级联在我之前的文章中都有的。大家可以关注我查看。
cache
=====
缓存是为了提高运行效率产生的一个功能。主要就是讲数据保存 在内存中。因为 cpu 读取内存是非常的快的。所以缓存能够提高我们的效率。之前我们已经提过了,mybatis 为我们提供两种缓存。一级缓存和二级缓存。一级缓存默认是打开的。他的生命周期是 SESSION。就是说在同一个 sqlsession 中相同的查询是经过缓存的。这个缓存如果没有在 insert 或者 select 其他标签内没有 flush 缓存的话,这个缓存在规定时间内就会一直存在。换句话说同样的 sql 将会一直查询缓存。上述情况仅仅是针对相同的 sqlsession.
一级缓存针对 sqlsession。有的时候我们需要讲 mapper 进行缓存。换句话说讲缓存放到 sqlsessionfactory 上。这时候我们引入了二级缓存的概念。mybatis 默认是不开启二级缓存的。开启的方式也很简单
<cache/>
只需要在 mybatis-config.xml 中加入 cache 这个标签就可以了。当然我们如果是用 pojo 接收结果的。pojo 需要进行序列化。
在二级缓存中我们所有的 select 都讲被缓存起来。在 insert、update、delete 执行的时候都将会刷新缓存的。下面给出一个全的 cache 配合。
<cache eviction="LRU" flushInterval="1000" size="1024" readOnly="true"/>
自定义缓存
评论