栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis进阶(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis进阶(三)

文章目录
  • MyBatis进阶(三)
    • 声明:本博客参考微信公众号:狂神说
    • 1、多对一处理
      • 1.1 测试环境搭建
      • 1.2 按照查询嵌套处理
      • 1.3 按照结果嵌套处理
    • 2、一对多处理
      • 2.1 环境搭建
      • 2.2 按照结果嵌套嵌套处理
      • 2.3 小结
    • 3、动态SQL
      • 3.1 搭建环境
      • 3.2 MyBatis常用的SQL标签
        • IF标签
        • Where标签
        • Set标签
        • trim标签
        • choose标签(和switch语句差不多)
        • Foreach标签
      • 3.3 SQL片段
      • 3.4 动态SQL小结
    • 4、缓存
      • 4.1 简介
      • 4.2 MyBatis缓存
      • 4.3 MyBatis一级缓存
      • 4.4 MyBatis二级缓存
      • 4.5 缓存原理
      • 4.6 第三方缓存 -- Ehcache(自定义缓存)

MyBatis进阶(三) 声明:本博客参考微信公众号:狂神说 1、多对一处理

多个学生一个老师

alter table student ADD CONSTRAINT fk_tid foreign key (tid) references teacher(id)
1.1 测试环境搭建
  1. 导入Lombok
  2. 新建实体类Teacher,Student
  3. 建立Mapper接口
  4. 建立Mapper.xml文件
  5. 在核心配置文件中绑定注册Mapper接口或者文件 【方式很多,随意选】
  6. 测试查询是否能够成功
1.2 按照查询嵌套处理


    select * from student



    
    
    
    
    



    select s.id sid , s.name sname, t.name tname
    from student s,teacher t
    where s.tid=t.id




    
    
    
        
    

回顾Mysql多对一查询方式:

  • 子查询 (按照查询嵌套)
  • 联表查询 (按照结果嵌套)

2、一对多处理

一个老师多个学生;

对于老师而言,就是一对多的关系;

2.1 环境搭建

实体类

@Data //get、set
public class Student {
    private int id;
    private String name;
    private int tid;
}
@Data
public class Teacher {
    private int id;
    private String name;

    //一个老师拥有多个学生
    private List students;
}
2.2 按照结果嵌套嵌套处理


    select * from blog
    
        
            
                title = #{title}
            
            
                and author = #{author}
            
            
                and views = #{views}
            
        
    

  • 测试

    @Test
    public void testQueryBlogChoose(){
        SqlSession session = MybatisUtils.getSession();
        BlogMapper mapper = session.getMapper(BlogMapper.class);
    
        HashMap map = new HashMap();
        map.put("title","Java如此简单");
        map.put("author","狂神说");
        map.put("views",9999);
        List blogs = mapper.queryBlogChoose(map);
    
        System.out.println(blogs);
    
        session.close();
    }
    
  • Foreach标签

    将数据库中前三个数据的id修改为1,2,3;

    需求:我们需要查询 blog 表中 id 分别为1,2,3的博客信息

    1. 编写接口

      List queryBlogForeach(Map map);
      
    2. 编写接口对应的 Mapper.xml 映射文件

      
          select * from blog
          
              
          
      
      
    3. 注意事项:

      • 最好基于 单表来定义 sql 片段,提高片段的可重用性
      • 在 sql 片段中不要包括 where
    3.4 动态SQL小结

    1、动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了。

    2、为了保证拼接准确,最好首先要写原生的 sql 语句出来,然后在通过 mybatis 动态sql 对照着改,防止出错。

    3、动态SQL的本质还是SQL。

    4、动态SQL在开发中大量的使用,一定要熟练掌握!


    4、缓存 4.1 简介

    查询 : 连接数据库,耗资源。

    一次查询的结果,给他暂存一个可以直接取到的地方 --> 内存:缓存。

    我们再次查询的相同数据的时候,直接走缓存,不走数据库了,减少和数据库交互的次数,提高效率。

    1. 什么是缓存(Cache)?
      • 存在内存中的临时数据
      • 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题
    2. 为什么使用缓存?
      • 减少和数据库的交互次数,减少系统开销,提高系统效率
    3. 什么样的数据可以使用缓存?
      • 经常查询并且不经常改变的数据 【可以使用缓存】
    4.2 MyBatis缓存
    • MyBatis包含一个非常强大的查询缓存特性,它可以非常方便的定制和配置缓存,缓存可以极大的提高查询效率。

    • MyBatis系统中默认定义了(自带)两级缓存:

      • 一级缓存 和 二级缓存。
      • 默认情况下,只有一级缓存开启(SqlSession级别的缓存,也称为本地缓存)
      • 二级缓存需要手动开启和配置,他是基于namespace(接口)级别的缓存。
      • 为了提高可扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来定义二级缓存。
    4.3 MyBatis一级缓存

    一级缓存也叫本地缓存:SqlSession 级别的

    • 与数据库同一次会话期间查询到的数据会放在本地缓存中
    • 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库

    步骤:

    1. 开启日志,方便查看测试结果

    2. 编写接口方法

      //根据id查询用户
      User queryUserById(@Param("id") int id);
      
    3. 接口对应的Mapper.xml 文件

      
          select * from user where id = #{id}
      
      
      4.5 缓存原理

      1、MyBatis自带缓存原理图

      2、MyBatis结合第三方缓存原理图

      4.6 第三方缓存 – Ehcache(自定义缓存)

      Ehcache是一种广泛使用的开源 Java分布式缓存。主要面向 通用缓存。

      使用第三方缓存,更加灵活,可以用配置文件配置各项参数,更加 专业。

      合理的使用缓存,可以让我们程序的 性能 大大提升!

      1. 导包(pom.xml)

        
        
            org.mybatis.caches
            mybatis-ehcache
            1.1.0
        
        
      2. 在 mapper.xml 中指定使用我们的 ehcache 缓存实现

        
            
        
        
      3. 编写 ehcache.xml 文件,如果在加载时未找到/ehcache.xml资源或出现问题,则将使用默认配置。

        
        
            
            
        
            
        
            
            
            
        
        

      声明:本博客参考微信公众号:狂神说。
      不喜勿喷,谢谢,本博客只是希望给大家一个参考,希望能帮助到需要的人。

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/881472.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号