接口入参

  • 只有一个参数,叫啥都没问题
  • 有两个参数以上,需使用@Param,否则名字依次为0、1、2和param1、param2、param3
  • 一般用#,防sql注入;偶尔用$,比如需要动态表名等

接口返回结果

  • 有resultMap和resultType
  • resultMap需要定义一个resultMap元素,然后在元素里面把下划线转为驼峰
  • resultType一般对应一个实体类,又或者HashMap(不是map),要写类的全路径,这样就需要在select里把下划线转驼峰
  • 但下划线转驼峰最好用mapUnderscoreToCamelCase=true配置

underscore是下划线,和underline一样,但计算机一般用underscore

mybatis缓存

  • 分一级缓存和二级缓存
  • 一级
    • 一级缓存默认打开,在同一个sqlSession里生效
    • 如果结合了spring,那就是在同一个事务里
    • 如果不同sqlSession、不同的事务、没有事务、或者执行了insert/update/delete操作,则一级缓存起不了作用
  • 二级
    • 二级缓存全局开关默认打开,但同时需要每个mapper里配置打开,mapper里的开关默认关闭
    • 二级缓存可以跨sqlSession,也就是在同一个sqlSessionFactory里生效
    • 但只对同一个mapper生效,如果别的mapper insert了,希望这个mapper select出来是新数据,可以配置cache-ref=别的mapper
    • 二级缓存是在sqlSession关闭时写入,如果关闭前会一直使用一级,不会使用二级
    • 二级缓存也是写入主机的内存里,使用map实现
    • 如果不想用默认的内存map,可选择第三方的ehcache、redis等,mybatis支持好几种
    • echcache除了内存还可以使用磁盘,redis可以多个主机内存共享
    • 二级缓存有四种回收策略,默认是LRU最近最少使用策略
  • 适用场景注意
    • 一级缓存一般没bug,但如果取出后set了属性,没保存到数据库,又select取,则与数据库不一致,可关闭一级缓存解决:flushCache=true
    • 二级缓存一般用在只有查询操作、或者单表操作、脏读没什么关系等场景

动态SQL-foreach-字段名和字段值

  • foreach一般collection网上都是list
  • 其实可以map,这样就可以实现动态字段名
  • 比如map.put("fieldName", "fieldValue")
  • 然后接口入参里map前加@Param mapName
  • 然后动态sql里collection="mapName",就可以用了,动态拼接where 字段名=字段值
  • 多个字段分隔符用" and "

2019.5.19

mybatis使用要点(2019.5.19)的更多相关文章

  1. iBatis & myBatis & Hibernate 要点记录

    iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...

  2. 2019.3.18考试&2019.3.19考试&2019.3.21考试

    2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 哇说的简单,码了将近一下午终于码出来了 感觉自己码力/写题策略太糟糕了,先是搞了一个细节太多的写法最后不得不弃疗了,然后第二 ...

  3. mybatis审查要点

    1.where条件遗漏情况 <select id="findActiveBlogLike" resultType="Blog"> SELECT * ...

  4. 『2019/3/19 USACO测试 反思与总结』

    2019/3/8 USACO测试 这是第三次考试了,不过这一次没有上一次考得好,也算是比较失误的,有一道题思路对但是写挂了. 还是看一下试题安排: 题号 试题分组 考察算法 思维难度 代码难度 1 银 ...

  5. SpringBoot+mybatis:报错Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requiremen

    报错:Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verifica ...

  6. 2019年19道java经典面试题(附答案)

    1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...

  7. 【转载】Spring Boot【快速入门】2019.05.19

    原文出处:https://www.cnblogs.com/wmyskxz/p/9010832.html   Spring Boot 概述 Build Anything with Spring Boot ...

  8. java 超详细面经整理(持续更新)2019.12.19

    目录 Java SE 请你解释HashMap中为什么重写equals还要重写hashcode? 请你介绍一下map的分类和常见的情况 请你讲讲Java里面的final关键字是怎么用的? 请你谈谈关于S ...

  9. 【转载】Spring学习(1)——快速入门--2019.05.19

    原文地址:https://www.cnblogs.com/wmyskxz/p/8820371.html   认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念 ...

随机推荐

  1. (Android 即时通讯) [悬赏],不管是谁发现一个漏洞奖励人民币1000元!

    悬赏,不管是谁发现一个漏洞奖励人民币1000元! 3Q Android 手机版即时通讯系统正式推出,可与电脑版 地灵(http://im.yunxunmi.com) 即时通讯系统互通!  适用于:小米 ...

  2. 尝试使用UISearchDisplayController及对苹果对控件封装习惯的理解

    本文转载至 http://blog.sina.com.cn/s/blog_74e9d98d01019vji.html   在之前做过的应用中,很多都有“搜索”这个功能,大部分情况下我都是只采用UISe ...

  3. android studio Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"

    android studio运行会遇到Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Reques ...

  4. MD5的学习与练习

    MD5加密的Java实现 在各种应用系统中,如果需要设置账户,那么就会涉及到存储用户账户信息的问题,为了保证所存储账户信息的安全,通常会采用MD5加密的方式来,进行存储.首先,简单得介绍一下,什么是M ...

  5. mysql优化----大数据下的分页,延迟关联,索引与排序的关系,重复索引与冗余索引,索引碎片与维护

    理想的索引,高效的索引建立考虑: :查询频繁度(哪几个字段经常查询就加上索引) :区分度要高 :索引长度要小 : 索引尽量能覆盖常用查询字段(如果把所有的列都加上索引,那么索引就会变得很大) : 索引 ...

  6. java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistrationBean

    java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistrationBean 把 ...

  7. LIS n^2&nlogn模板

    LIS nlogn模板 http://acm.hdu.edu.cn/showproblem.php?pid=1950 #include <iostream> #include <st ...

  8. c语言基本函数

    1. 用宏定义写出swap(x,y) #define swap(x, y) x = x + y; y = x - y; x = x - y; 2.数组a[N],存放了1至N-1个数,其中某个数重复一次 ...

  9. jdk8新特性Stream

    Stream的方法描述与实例 1,filter  过滤 Person p1 = new Person(); p1.setName("P1"); p1.setAge(10); Per ...

  10. codeforces 459 B.Pashmak and Flowers 解题报告

    题目链接:http://codeforces.com/problemset/problem/459/B 题目意思:有 n 朵 flowers,每朵flower有相应的 beauty,求出最大的beau ...