写点什么

mybatis 映射器组件

  • 2021 年 11 月 11 日
  • 本文字数:1050 字

    阅读完需:约 3 分钟

  • 在新增的时候 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 配合。


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


<cache eviction="LRU" flushInterval="1000" size="1024" readOnly="true"/>


自定义缓存




评论

发布
暂无评论
mybatis映射器组件