MyBatis总结 Day03
发布日期: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

在这里插入图片描述

这里使用了前缀添加where,删除and

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);        List
accounts = 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);        List
account = mapper.selectAll(); System.out.println(account); List
account1 = mapper.selectAll(); System.out.println(account1);

控制台输出:

在这里插入图片描述
我们使用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);        List
account = mapper.selectAll(); System.out.println(account); //清空一级缓存 session.clearCache(); List
account1 = mapper.selectAll(); System.out.println(account1);

在这里插入图片描述

不难看出,清空一级缓存后sql语句执行了两次。

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 测试

List
warnings = 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);

基本的增删改查方法都能自动生成,下班!!

在这里插入图片描述

上一篇:Redis的简单安装和使用 Day01
下一篇:MyBatis总结 Day02

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月12日 07时13分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章