目录
一、动态sql
1.set、if
2.foreach
二、转义符
三、缓存cache
1. 一级缓存
2. 二级缓存
一、动态sql
1.set、if
在update语句中使用set标签,动态更新set后的sql语句,,if作为判断条件。
update student
num=#{num},
name=#{name},
gender=#{gender}
where id = #{id}
2.foreach
foreach对集合进行遍历,尤其是in条件语句
delete from student where id in
#{item}
collection 是传入参数名,item为元素名,separator代表元素之间的间隔符。
详细动态sql可查看官网 :mybatis – MyBatis 3 | 动态 SQL
二、转义符
1.在 mybatis 中的 xml 文件,一些特殊符号需要转译:
特殊字符 | 转译字符 |
< | |
“ | “ |
’ | ‘ |
& | & |
> | > |
2.使用
通过包裹特殊字符也可以
select id,num,gender from student where num < 1000
select id,num,gender from student where num 1000
注意:
- ” ” 号不会报错;
- 如果 里有 等这些标签都不会被解析,所以只把有特殊字符的语句放在 尽量缩小的范围。
三、缓存cache
缓存作用:让程序更快的访问数据,减少对数据库的访问压力。
缓存原理:从数据库中查询出来的对象在使用完后不要销毁,而是存储在内存(缓存)中,当再次需要获取该对象时,直接从内存(缓存)中直接获取,不再向数据库执行select 语句,从而减少了对数据库的查询次数,因此提高了数据库的性能。
mybatis有两种缓存方式:
1. 一级缓存
在同一个SqlSession中执行相同的sql且参数也相同(完全相同的sql查询),第二次查询时,直接从sqlSession中获取,而不再从数据库中获取。在没有默认配置情况下,mybatis开启一级缓存。
例如:
@Test
void testCache(){
SqlSession sqlSession = MybatisUtil.getSqlsession();
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
List students = studentDao.findstuTurn();
System.out.println(students);
List student2= studentDao.findstuTurn服务器托管网();
sqlSession.commit();
sqlSession.close();
}
日志中只显示一条查询
一级缓存失效:
- sqlSession.close();
- sqlSession.clearCache();
- SqlSession 中执行了任何一个修改操作(update()、delete()、insert()) ,都会清空缓存的数据。
2. 二级缓存
二级缓存是 SqlSessionFactory 级别的,数据存放在SqlSessionFactory中。
需要手动启动:
1.在核心配置文件中开启二级缓存:
2.将POJO 类实现序列化接口:
implements Serializable
3.在mapper映射文件中添加cache标签,表示此mapper开启二级缓存:
flushInterval可以设置刷新时间(缓存失效)
当 SqlSeesion 关闭时,会将数据存入到二级缓存。
示例:
@Test
void testCache1(){
SqlSession sqlSession = MybatisUtil.getSqlsession();
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
L服务器托管网ist students = studentDao.findstuTurn();
System.out.println(students);
sqlSession.commit();
//sqlSession关闭
sqlSession.close();
SqlSession sqlSession2 = MybatisUtil.getSqlsession();
StudentDao studentDao2 = sqlSession2.getMapper(StudentDao.class);
List students2 = studentDao2.findstuTurn();
System.out.println(students2);
sqlSession2.commit();
sqlSession2.close();
}
结果只查询一次:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net