mybatis使用要点(2019.5.19)
接口入参
- 只有一个参数,叫啥都没问题
- 有两个参数以上,需使用@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)的更多相关文章
- iBatis & myBatis & Hibernate 要点记录
iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...
- 2019.3.18考试&2019.3.19考试&2019.3.21考试
2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 哇说的简单,码了将近一下午终于码出来了 感觉自己码力/写题策略太糟糕了,先是搞了一个细节太多的写法最后不得不弃疗了,然后第二 ...
- mybatis审查要点
1.where条件遗漏情况 <select id="findActiveBlogLike" resultType="Blog"> SELECT * ...
- 『2019/3/19 USACO测试 反思与总结』
2019/3/8 USACO测试 这是第三次考试了,不过这一次没有上一次考得好,也算是比较失误的,有一道题思路对但是写挂了. 还是看一下试题安排: 题号 试题分组 考察算法 思维难度 代码难度 1 银 ...
- 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 ...
- 2019年19道java经典面试题(附答案)
1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...
- 【转载】Spring Boot【快速入门】2019.05.19
原文出处:https://www.cnblogs.com/wmyskxz/p/9010832.html Spring Boot 概述 Build Anything with Spring Boot ...
- java 超详细面经整理(持续更新)2019.12.19
目录 Java SE 请你解释HashMap中为什么重写equals还要重写hashcode? 请你介绍一下map的分类和常见的情况 请你讲讲Java里面的final关键字是怎么用的? 请你谈谈关于S ...
- 【转载】Spring学习(1)——快速入门--2019.05.19
原文地址:https://www.cnblogs.com/wmyskxz/p/8820371.html 认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念 ...
随机推荐
- 子结点childNodes
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- HDU 4334 Trouble(哈希|线性查找)
给定五个集合.问是否能从五个集合各取一个元素,使得元素之和为0. 这道题有两种做法,一种是哈希,然而之前没写过哈希.....比赛后从大神那copy了一份. 这里说还有一种. 对于这五个集合分为三组.1 ...
- centos下部署项目问题
最近写了商品管理的后台完成了一部分,用node+koa+mongodb搭建,现在想部署到自己的服务器上,部署的过程中遇到了一些坑.首先就是各种环境的搭建,搭建好了之后要把后台的代码传到服务器上运行,运 ...
- GTK入门学习:布局容器之水平布局
假设我们希望窗体里多放加入几个控件,直接加入是不成功的.由于窗体仅仅能容纳一个控件的容器. 这时候.我们须要借助布局容器,我们先把布局容器加入到窗体里.然后再把所须要加入的控件放在布局容器里. 布局容 ...
- 命令行添加PATH
如何设置PATH 命令:echo "export PATH=xxxxxx:$PATH" >> ~/.bash_profile 解释:把"export PATH ...
- Python开发【迭代器】
1.迭代器 1.1.迭代器创建:指定数据创建迭代器(使用iter()和next() ) x = [1, 2, 3] #定义一个列表:<class 'list'> y = iter(x) # ...
- mysql 免安装配置问题
摘要: MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体 ...
- .Net之路(十四)com组件、OLEDB导入EXCEL
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/chenfanglincfl/article/details/30546777 .NET com组件 ...
- html5--6-2 CSS语法
html5--6-2 CSS语法 实例 学习要点 掌握引入外部样式表方法 插入样式的三种方法 内联样式表(行内) 内部样式表(style中) 外部样式表 创建一个外部样式表 在head中使用link元 ...
- WebStorm配置SVN
下载SVN客户端管理工具TortoiseSVN-1.8.5.25224-x64-svn-1.8.8,选择合适的Windows版本 配置项目目录,对应的VCS为Subversion 设置Subversi ...