简言:这个地方我就草草过了,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后数据才会进入缓存)

互联网轻量级框架SSM-查缺补漏第五天的更多相关文章

  1. 互联网轻量级框架SSM-查缺补漏第六天【级联+延迟加载特辑】

    简言:本来这是昨天看的,但是因为想好好写一下[级联]这个东西,所以就看完之后今天来整理一下. 级联 1. 什么是级联 级联是一个数据库实体的概念.比如教师就需要存在学生与之对应,这样就有教师学生表,一 ...

  2. 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)

    简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...

  3. 互联网轻量级框架SSM-查缺补漏第一天

    简言:工欲其事必先利其器,作为一个大四的准毕业生,在实习期准备抽空补一下基础.SSM框架作为互联网的主流框架,在会使用的基础上还要了解其原理,我觉得会对未来的职场会有帮助的.我特意的买了一本<J ...

  4. Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)、原书代码

    Java EE互联网轻量级框架整合开发 第1部分 入门和技术基础 第1章 认识SSM框架和Redis 2 1.1 Spring框架 2 1.2 MyBatis简介 6 1.3 Spring MVC简介 ...

  5. Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

    上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...

  6. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  7. Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  8. Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一.AsyncTask的使用 AsyncTask是一种轻 ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  10. CSS查缺补漏篇

    前面的话:关于CSS,之前我已经做过一些基础的知识点介绍.CSS主要是用来给页面设置样式的,一般说来,在一个网站中,CSS应该独立封装在一个单独的.css外部文件中.样式的设置总体来说是不难的,但是需 ...

随机推荐

  1. “全栈2019”Java第十一章:标识符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Python3.4程序异常判断

    实例代码[更多实例,请访问:www.yeayee.com] 1 #idle中按F5可以运行代码 2 #引入外部模块 import xxx 3 #random模块,randint(开始数,结束数) 产生 ...

  3. redis 3.0 集群__数据迁移和伸缩容

    添加节点 1,启动2个新的redis-sever, 参照 ( redis 3.0 集群____安装 ),端口号为 7007 和 7008 2,使用命令 redis-trib.rb add-node 命 ...

  4. 经典排序的python实现

    具体原理我这里就不解释了,可以查看数据结构课本或者百度百科 这里只给出相应的代码(很简洁) 1 __author__ = "WSX" class sort: def __init_ ...

  5. 【随记】SQL备份一张表的数据

    SQL Server: SELECT  *  INTO  table_bak   FROM   table Oracle.MySQL.SQLite: CREATE TABLE table_bak AS ...

  6. POJ1330 Nearest Common Ancestors (JAVA)

    经典LCA操作.. 贴AC代码 import java.lang.reflect.Array; import java.util.*; public class POJ1330 { // 并查集部分 ...

  7. leetcode-119-Pascal's Triangle II(生成某一行的帕斯卡三角形)

    题目描述:   Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle ...

  8. NSScanner 扫描字符串

    两个常用于扫描字符串的方法 //'指针'只移动一个位置,判断当前所指的字符是否是目标字符@"x", 若是则存入result中,返回YES,否则NO BOOL res = [scan ...

  9. Drupal Coder 模块远程命令执行分析(SA-CONTRIB-2016-039)

    转载请注明文章出处:http://www.cnblogs.com/magic-zero/p/5787181.html 起初看到这个漏洞的时候是在exploit-db上边.地址在这里:https://w ...

  10. 剑指offer——面试题23:链表中环的入口节点

    函数: ListNode* MeetingNode(ListNode* pHead) { if(pHead==nullptr) return nullptr; ListNode* quickNode= ...