目录
3. SQL---choose/when/otherwise
1. SQL---where条件
2. SQL---Set标签
3. SQL---choose/when/otherwise
4. ResultMap语法
5. 驼峰映射规则
6. Mybatis关联关系
6.1 常见关联关系
- 一对一 一个员工对应一个部门
- 一对多 一个部门下对应多个员工
- 多对一 本质是一对一
- 多对多 老师和学生 双向的一对多
一个老师对应多个学生.
一个学生对应多个老师。
6.2 一对多查询
6.3 Mybatis的注解形式
7. Mybatis一级缓存
说明: 在同一个SqlSession内,实现数据库的共享.
解释: 用户使用同一个SqlSession时,进行多次数据库的查询,由于一级缓存的存在.所以数据库只查询一次.
开关状态: 一级缓存Mybatis默认开启.无需配置.
@SpringBootTest
public class TestMybatisCache5 {
@Autowired
private UserMapper userMapper; //底层实现中包含了SqlSession
/**
* 测试:mybatis的一级缓存, SqlSession级别
* SpringBoot测试说明:
* SpringBoot中用户在使用userMapper接口时,用户每调用一次.
* SpringBoot就会新创建一个SqlSession.
* 如何解决多个SqlSession的问题?
* 解决方案:
* 利用@Transactional的事务的注解,将多个SqlSession控制为一个.
*/
@Test
@Transactional //事务的注解
public void testCache1(){
List<User> list1 = userMapper.findAll(); //sqlSession1
List<User> list2 = userMapper.findAll(); //sqlSession2
List<User> list3 = userMapper.findAll(); //SqlSession3
}
}
8. Mybatis二级缓存
说明: 由同一个SqlSessionFactory(类比:链接池)生产的SqlSession(类比:数据库链接),可以实现数据共享
解释说明: 由同一个SqlSessionFactory生产多个SqlSession(多线程).可以在多线程的条件下,可以实现数据共享.
默认开关: 二级缓存默认条件下是开启的. 但是需要指定哪里使用二级缓存
1.默认条件下一二级缓存是开启的. 但是二级缓存需要标记 cache。
2.一级缓存在同一个SqlSession中共享数据(单线程)
3.二级缓存在同一个SqlSessionFactory生产的多个SqlSession内共享数据(多线程). 对象必须序列化
4.在真实的生产环境中(集群:多个服务器)使用二级缓存可能存在问题,使用Redis高级缓存服务器代替.