
MyBatis总结 Day03
我们使用session.clearCache() 清除掉一级缓存
发布日期:2021-05-08 20:50:33
浏览次数:27
分类:精选文章
本文共 5640 字,大约阅读时间需要 18 分钟。
MyBatis动态SQL、分页插件、缓存及逆向工程
1.MyBatis动态SQL
1.1 if语句+where
where标签可以去掉前面多余的and/or。
1.2 choose+when+otherwise
这对组合相当于 switch+case+default。
1.3 trim
1.4 foreach
属性 | 描述 |
---|---|
collection | 要做foreach的对象,作为入参时,List<?>对象默认用list代替作为键,数组对象有array代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param(“keyName”)来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids"如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"上面只是举例,具体collection等于什么,就看你想对那个元素做循环。该参数为必选。 |
separator | 元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。 |
open | foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选。 |
item | 循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。 具体说明:在list和数组中是其中的对象,在map中是value。 该参数为必选。 |
close | foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。 |
index | 在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。 |
Dao中代码:

insert into role values (#{param1},#{pid})
2.分页插件
2.1 导入依赖
com.github.pagehelper pagehelper 5.1.11
2.2 使用分页插件 在mybatis配置文件中加入如下代码
2.3 测试代码完成分页
Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader); SqlSession session = build.openSession(); AccountDao mapper = session.getMapper(AccountDao.class); //开启分页 PageHelper.startPage(2,2); Listaccounts = mapper.queryAccount1(new Account()); PageInfo pageInfo = new PageInfo (accounts); System.out.println("总页数"+pageInfo.getPages()); System.out.println("总条数:"+pageInfo.getTotal()); System.out.println("当前显示的页码:"+pageInfo.getPageNum()); System.out.println("当前页码的数据:"+pageInfo.getList());
3.MyBatis的缓存
MyBatis自带一级缓存和二级缓存,一级缓存默认开启,二级缓存需要手动开启。
3.1 一级缓存
Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。
也就是在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中; 第二次以后是直接去缓存中取。 当执行SQL查询中间发生了增删改的操作,MyBatis会把SqlSession的缓存清空。一级缓存的范围有SESSION和STATEMENT两种,默认是SESSION,如果不想使用一级缓存,可以把一级缓存的范围指定为STATEMENT,这样每次执行完一个Mapper中的语句后都会将一级缓存清除(不推荐这么做)。同样,也可以在Java中使用 session.clearCache() 清除掉一级缓存。
举个栗子:
Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader); SqlSession session = build.openSession(); AccountMapper mapper = session.getMapper(AccountMapper.class); Listaccount = mapper.selectAll(); System.out.println(account); List account1 = mapper.selectAll(); System.out.println(account1);
控制台输出:

Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader); SqlSession session = build.openSession(); AccountMapper mapper = session.getMapper(AccountMapper.class); Listaccount = mapper.selectAll(); System.out.println(account); //清空一级缓存 session.clearCache(); List account1 = mapper.selectAll(); System.out.println(account1);
3.2 二级缓存
Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
接着在想要使用二级缓存的Mapper映射文件中配置:
xxx
如果不想整个Mapper映射下的语句都使用二级缓存,则可以使用 useCache 属性,true为打开,false为关闭。
4.Mybatis Generator(MyBatis逆向工程)
4.1 导入依赖
org.mybatis.generator mybatis-generator-core 1.4.0
4.2 配置 generator.xml文件
一定要放在工程下!工程下!工程下!(敲重点)
4.3 测试
Listwarnings = new ArrayList (); boolean overwrite = true; File configFile = new File("generator.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null);
基本的增删改查方法都能自动生成,下班!!

发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月12日 07时13分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java开源博客My-Blog(SpringBoot+Docker)系列文章
2019-03-06
程序员视角:鹿晗公布恋情是如何把微博搞炸的?
2019-03-06
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
2019-03-06
Linux应用-线程操作
2019-03-06
多态体验,和探索爷爷类指针的多态性
2019-03-06
系统编程-进程间通信-无名管道
2019-03-06
记2020年初对SimpleGUI源码的阅读成果
2019-03-06
C语言实现面向对象方法学的GLib、GObject-初体验
2019-03-06
系统编程-进程-ps命令、进程调度、优先级翻转、进程状态
2019-03-06
为什么我觉得需要熟悉vim使用,难道仅仅是为了耍酷?
2019-03-06
一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
2019-03-06
HDOJ2017_字符串统计
2019-03-06
高等软工第二次作业《需求分析阶段总结》
2019-03-06
404 Note Found 团队会议纪要
2019-03-06
CentOS安装Docker-ce并配置国内镜像
2019-03-06
使用JWT作为Spring Security OAuth2的token存储
2019-03-06
使用Redis作为Spring Security OAuth2的token存储
2019-03-06
【SOLVED】Linux使用sudo到出现输入密码提示延迟时间长
2019-03-06