Mybatis动态SQL &关联查询&缓存机制

目录

 

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一级缓存

8.  Mybatis二级缓存


1. SQL---where条件

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_13,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

2.  SQL---Set标签 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_17,color_FFFFFF,t_70,g_se,x_16

3.  SQL---choose/when/otherwise

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

4.  ResultMap语法

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_18,color_FFFFFF,t_70,g_se,x_16

 5.  驼峰映射规则

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

 6.  Mybatis关联关系

6.1  常见关联关系

 

  1. 一对一 一个员工对应一个部门
  2. 一对多 一个部门下对应多个员工
  3. 多对一 本质是一对一
  4. 多对多 老师和学生 双向的一对多
    一个老师对应多个学生.
    一个学生对应多个老师。

6.2  一对多查询

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

 6.3  Mybatis的注解形式

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

 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(多线程).可以在多线程的条件下,可以实现数据共享.
默认开关: 二级缓存默认条件下是开启的. 但是需要指定哪里使用二级缓存

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56eD5aS06ZSF6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16

 1.默认条件下一二级缓存是开启的. 但是二级缓存需要标记 cache。

 2.一级缓存在同一个SqlSession中共享数据(单线程)

 3.二级缓存在同一个SqlSessionFactory生产的多个SqlSession内共享数据(多线程). 对象必须序列化

 4.在真实的生产环境中(集群:多个服务器)使用二级缓存可能存在问题,使用Redis高级缓存服务器代替.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头锅锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值