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
    • 二级缓存一般用在只有查询操作、或者单表操作、脏读没什么关系等场景

2019.5.19

原文地址:https://www.cnblogs.com/ouyida3/p/10889770.html

时间: 2024-08-30 11:31:14

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

开荒日-2019/06/19

2019/06/19,毕业两年之际,个人原因来到了台州,这个对程序员来说不是很友好的地方,技术提升遇到了阻碍,想要从项目中学习东西但是收获甚微,还好现在的工作时间比较宽裕,让我有不少可以自由支配的时间,也算是到了工作的舒适区吧,但是此刻心里还是挺着急的,压力来源于对技术能力的渴望,却少有可以锻炼的机会.所以决定自己动手丰衣足食,打算开发一个自己的小产品,考虑了几天,打算搭建一个基础版本的OA平台(我现在的工作就是对一套OA系统进行二次开发),把开发过程中遇到的问题和新学的技术记录在博文中,以便以

2019.3.18考试&2019.3.19考试

2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 T2 正反都做一遍DP T3 观察到顺序不影响答案,分块打标记 2019.3.19 肥肠爆芡,因为沙茶博主昨天在学校的煞笔食堂吃坏了肚子,所以这场考试咕咕了 我佛了 一定补这两场.jpg 原文地址:https://www.cnblogs.com/ydnhaha/p/10558495.html

2019.10.19初赛滚粗后的日子

写在故事的前面的话 人生中第一次考CSP-S,然后考得有点自闭,我想我写这篇blog并不是想要说AFO之类的话,相反,我觉得自己应该继续坚持下去的丫子.自己以前欠了很多知识,以前是自己初中时期的不认真,现在我就把自己当成是高一才学OI的萌新,忘记过去对自己的一些期望,重新开始自己的OI生涯. 2019.10.19 今天在自闭完了之后还是逐渐接受了初赛没有多大几率过的事实,开始复习起之前学的东西.首先,今天开始复习树形DP(入门).list如下: Park visit (已过) 没有上司的舞会 (

2019/7/19 CF808(div2)

A.Lucky Year 对于只存在一个不为0的位数,那么先把位数求出来,若只有一个,那么是1-9,任意+1都满足,所以为1,若不是1,那么就是最高位+1 ,后面全是0,减去原来的数字. 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int y,count=0,x,d; 6 cin>>y; 7 d=y; 8 while(y!=0) 9 { 10 count++; 11 if((y/10)==0

「考试 2019.7.19」悲伤的出题人

题面出的很悲伤很悲伤,他绝对是失恋了. 一下就看到了三道题小的要死的64M内存,每道题开完数组我就立马算一次内存.所以没有出意料之外的MLE. 第一题一开始花5min写了个30暴力,写的很顺.然后直接攻第二题,写了个Astar觉得AC稳了,可是有个地方没写下来(yet数组的问题),于是我爆了10分.所以死了,这时候还剩下两个小时.于是开始写第三题爆搜,写完之后想不出剩下的部分分,于是回到第一题准备死干,结果之想到一个倍增的 $ n^2logn $ 思路. 大致是这样的,设dp[i][j]为选了

吾尝终日而思矣——2019.02.19

1.享元模式(Flyweight Pattern) 享元模式意在减少新对象的产生,为一个对象建立一个享元工厂类,一般包含一个HashSet容量池.使用工厂类创建新对象,当对象未创建过,创建新对象并存入HashSet里,如果已存在就从HashSet取出,这样就能共享一些对象. PS:这个意译得反而让人摸不着头脑,Flyweight是轻量级的意思. 引用:https://www.cnblogs.com/adamjwh/p/9070107.html 2.装饰器模式 当我们需要对一个类添加功能时,我们可

PAT 甲级 A1048 (2019/02/19)

#include <cstdio> #include <algorithm> using namespace std; const int N = 1005; int HashTable[N]; int main() { int n, m, a; scanf("%d %d", &n, &m); for(int i = 0; i < n; i++) { scanf("%d", &a); ++HashTable[a]

PAT 甲级 A1077 (2019/02/19)

#include<cstdio> #include<cstring> int n, minlen = 256, cnt = 0; char str[100][256]; int main(){ scanf("%d", &n); getchar(); //接收换行符 for(int i = 0; i < n; i++){ fgets(str[i],256,stdin); int len = strlen(str[i])-1; if(len <

PAT 甲级 A1033 (2019/02/19)

#include<cstdio> #include<algorithm> using namespace std; const int INF = 1000000000; //初始化最低油价 struct station{ double oil_price; //加油站油价 int distance; //加油站离出发点的距离 }sta[501]; bool cmp(station a, station b){ return a.distance < b.distance;