简言:这个地方我就草草过了,NBA圣诞大战,偷偷看比赛,真香~

第五章映射器

5.2select元素

  自动映射和驼峰映射:MyBatis提供了自动映射功能,在默认的情况下自动映射功能是开启的。

  在setting元素中,

  autoMappingBehavior控制自动映射,取值范围:

  • NONE:不进行自动映射。
  • PARTIAL:默认值,只对没有嵌套结果集进行自动映射。
  • FULL:对所有的结果集进行自动映射,包括嵌套结果集。

mapUnderscoreToCamelCase控制驼峰映射,驼峰映射是按照驼峰命名的方式自动映射,例如数据库字段为role_name,则POJO属性名为roleName。

  传递多个参数的方式:

  • 使用map接口传递参数。
  • 使用注解传递参数:在接口类方法形参前加入注解@Param("roleName")
  • 通过JavaBean传递参数
  • 混合使用

  resultMap映射结果集:

为了支持复杂映射,select元素提供了resultMap属性。先定义resultMap属性。

<resultMap type="role" id="roleMap"><id property="id" column="id"/><result property="roleName" column="role_name"/>
</resultMap>
<select id="getRole" parameterType="Long" resultMap="roleMap">select id,role_name  from t_role where id = #{id}
</select>

resultMap的子元素id代表组件,而result代表其属性,id和result元素的属性property代表POJO的属性名称,而column代表SQL的列名。

  5.3insert元素

  主键回填,JDBC中的Statement对象在执行插入的SQL后,可以通过getGennerateKeys方法获得数据库生成的主键(需要数据库驱动支持),还要配置其属性keyProperty或keyColumn,告诉系统把生成的组件放入哪个属性中。

<insert id="insertRole" parameterType="role" useGeneratedKeys="true" keyProperty="id">insert into t_role(role_name,note) values(#{roleName},#{note})
</insert>

  自定义主键:

  

<insert id="insertRole" parameterType="role" ><selectKey keyProperty="id" resultType="long" order="BEFORE">select if(max(id)=null,1,max(id)+3) from t_role</selectKey>insert into t_role(role_name,note) values(#{roleName},#{note})
</insert>

order设置为BEFORE,说明它将于当前定义的SQL前执行,这样就可以自定义主键的规则了,也可以设置为AFTER这样它就会在插入语句之后执行了。

  5.7 resultMap元素

  resultMap的作用是定义映射规则、级联的更新、定制类型转换器等。(有一些子元素,用到说的时候再说把)

  5.9 缓存

  缓存一般都放置在高速读/写的存储器上,比如服务器的内存,它能够有效提高系统的性能。从硬件的角度分析,索引磁盘是一个较为缓慢的过程,读取内存或者高速缓存处理器的速度要比读取磁盘快得多,其速度是读取硬盘的几十倍到上百倍,但是内存和高速缓存处理器的空间有限,所以一般只会把那些常用且命中率高的数据缓存起来,一以便将来使用。

  MyBatis分一级缓存和二级缓存。同时也可以配置关于缓存的设置。一级缓存是在SqlSession上的缓存,二级缓存实在SqlSessionFactory上的缓存。

  一级:

  当一个SqlSession第一次通过SQL和参数获取对象后,它就会将其缓存起来。不同的SqlSession是不共享的。

  二级:

  在映射文件(Mapper)上加上

<cache/>

  这个时候MyBatis会序列化和反序列化对应的POJO,也就要求POJO是一个可序列化的对象,那么它就必须实现java.io.Serializable接口。如果没有实现Serializable接口,那么MyBatis会抛出异常。

  一切配置好后,不同的SqlSession在获取同一条记录,只是发送过一次SQL获取数据。因为这个时候MyBatis将其保存在SqlSessionFactory层面,可以提供给各个SqlSession使用。(注:在二级缓存中,当第一次查询执行后也需要进行提交,commit后数据才会进入缓存)

转载于:https://www.cnblogs.com/shiboinfo/p/10178896.html

互联网轻量级框架SSM-查缺补漏第五天相关推荐

  1. JAVA核心,200例,查缺补漏

    适用于想要查缺补漏的人:本已经掌握的技术,但是不知道如何表达的人:不断完善技自己,顺带梳理下答案. 主要包括以下模块:Java基础.容器.多线程.反射.对象拷贝.Java Web模块,异常.网络.设计 ...

  2. 2020年最新最全的Java面试经历整理(一次性查缺补漏个够)

    前言 现在已经是2020年了,相信很多人都在准备面试,,如何拿到心仪的 Offer,进入梦寐以求的大厂,实现自己的职业理想,达到程序员的小康水平. 这篇文章主要介绍了刘哥一月份的几次面经,(一次性查缺 ...

  3. 查缺补漏系统学习 EF Core 6 - 批量操作

    推荐关注「码侠江湖」加星标,时刻不忘江湖事 这是 EF Core 系列的第七篇文章,上一篇文章讲述了 EF Core 中的实体数据修改. 这篇文章讲一讲 EF Core 如何进行批量操作. 在众多的 ...

  4. EFCore查缺补漏(二):查询

    相关文章: EFCore查缺补漏 第 20 轮 TechEmpower 评测结果出炉了,ASP.NET Core 的 Plaintext 成绩名列前茅,带着 EFCore 的测试却在 Single q ...

  5. I2C总线学习—查缺补漏—S3C2440的I2C控制器

    I2C总线学习-查缺补漏-S3C2440的I2C控制器                  学习了IIC总线协议的理论部分,觉得应该学习具体操作2440的IIC控制器,毕竟最终都是为了学习S3C2440 ...

  6. I2C总线学习—查缺补漏—应答信号ACK

    I2C总线学习-查缺补漏-应答信号ACK           IIC协议规定,当主机作为接收设备时,主机对最后一个字节不应答,以向发送设备(从设备)标识数据传送结束.这是因为每次传输都应得到应答信号后 ...

  7. I2C总线学习—查缺补漏—对数据有效性的思考

    I2C总线学习-查缺补漏-对数据有效性的思考 IIC协议规定:SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化.IIC期间在脉冲上升沿把数据放到SDA上, ...

  8. 查缺补漏:集和与非平凡属性

    查缺补漏:集和与非平凡属性 前面的习题和知识点补充 Conjunctive normal form(CNF)是布尔逻辑的一种方法,它将公式表示为带有AND或or的子句的连词.由连词or AND连接的每 ...

  9. 赫斌老师数据结构视频查缺补漏笔记

    赫斌老师数据结构视频查缺补漏笔记 观看学习赫斌老师数据结构的视频,记录下自己之前学习这块内容时似懂非懂的知识,仅针对自己查缺补漏使用 视频链接:<郝斌老师数据结构自学视频> 1.指针的大小 ...

  10. C++查缺补漏之异常(续)

    此文是文章<C++查缺补漏之异常>:http://blog.csdn.net/ii1245712564/article/details/44617881的后续 1.异常的重新抛出 可能单个 ...

最新文章

  1. c语言符号txt下载,c语言中符号含义.txt
  2. Linux/ubuntu:Chrome报错解决: error while loading shared libraries: libnss3.so libXss.so.1 libasound.so.
  3. 解决 QT 发送 HTTP 请求时遇到 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 问题
  4. JavaScript实现阶乘递归factorialRecursive算法(附完整源码)
  5. Mybatis LIKE模糊查询
  6. TikTok面临用户流失、苹果iOS14公测、无代码定义下一代软件等| Decode the Week
  7. 成员变量修饰词的作用
  8. 如何把笔记本变成显示器_笔记本电脑如何连接使用今声优盒
  9. aspectj 注解
  10. 探索数据可视化,业务数据是核心
  11. 简单工厂模式在Logback源码以及JDK源码中的应用
  12. 你不知道的JavaScript APIs
  13. 检测工具进阶——结合静态分析的动态分析工具论文分享
  14. react学习经验总结(react安装)
  15. 23年 yolov5车辆识别+行人识别+车牌识别+车速检测代码(python)
  16. 落户上海市高校毕业生就业指导中心集体户口办理办法
  17. 字体大宝库:35款时尚的英文简历字体下载
  18. 好评返现如何摆脱平台规则和流量限制
  19. 如何高效地使用搜索引擎?
  20. RxBus对比EventBus

热门文章

  1. 小米 mix android 版本,小米MIX有几个版本 小米MIX标准版与尊享版区别对比 (全文)...
  2. ssm+jsp计算机毕业设计爱心捐赠平台82yxl(程序+LW+源码+远程部署)
  3. 汽车振动实模态分析-模态分析法(附程序)
  4. 项目记录——workbench模态分析
  5. vscode设置编码格式的几种方法
  6. linux ctrl z 的区别,linux中ctrl+z和ctrl+c的区别
  7. 修复IcedTea报错 “cannot grant permissions to unsigned JARs
  8. Delphi调用外部程序函数详解
  9. 国产Linux操作系统(深度系统)增加了微软Microsoft Edge浏览器(Linux版本)
  10. 【Windows Server 2019】NTP服务的配置和管理——使用GUI与CLI设置