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

Mybatis高级用法

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

Mybatis高级用法

一、mybatis的关联查询与子查询 1.关联查询 1.1 resultMap规则:
1.如果映射的字段与对象属性一致,则可以省略不写
2.最好保留主键的字段信息 
3.关联封装中 - - - > 单独封装则使用  association   
4.如果遇到关联封装,必须配置全部映射关系 (但是属性名和字段一致)可以自动映射
				自动映射 autoMapping = “true”
           		自动映射的前提条件:关联查询,属性名和字段一致

    
    

1.2步骤如下:

​​​​​​​​​​​​

2.子查询(一对一) 2.1思路如图:

2.2步骤如下:

3.子查询(一对多)

4.驼峰规则映射

驼峰规则映射:
说明:因为字段名和属性经常不一样,通过驼峰映射,自动映射
全局配置 在核心配置文件中
1.如果开启驼峰命名规则 可以简化赋值过程



    
    

二、mybatis的缓存机制 1.什么是缓存机制?

说明:有效的降低访问服务器的次数,即问过的回答过的答案,存在缓存里,下次再问就不用访问服务器
扩展:
1.mybatis自身缓存:一级缓存/二级缓存
2.Redis缓存(现在主流) 存入了大量的数据,读取10万次/秒,写8.6万次/秒

1.1一级缓存

概念说明:mybatis默认开启一级缓存,一级缓存可以在**同一个sqlsession(会话)**对象中查询相同的数据,可以实现数据共享的

1.2二级缓存

说明:二级缓存mybatis默认是开启的,但是需要手动标识是否需要缓存,在同一个sqlsessionfactory内部有效,sqlsessionfactory是sqlsession(会话)的爸爸,即一级缓存的上级,范围更广
配置:全局配置和局部配置
二级缓存说明:sqlsession查询数据之后,会把查询后的数据保存到一级缓存中,但不会立即将缓存交给二级缓存sqlsessionfactory。此时作用域还在一级,所以解决办法是:必须将一级缓存执行成功之后,关闭一级缓存(表示会话正常执行用完且关闭)

三、mybatis框架小结 1.orm思想 :

对象关系映射,用于实现不同类型系统的数据库之间的转换
用对象操作数据库–封装对象操作数据库

  • 对象与数据库对应–映射
  • 对象的属性与表中的字段对应–映射
1.1JDBC弊端 :

巴拉巴拉

1.2JDBC优点 :

操作数据库最快的玩意

2.mybatis是啥:

是基于orm思想的持久层框架,半自动orm

3.mybatis使用步骤: 3.1 导入jar包

课堂使用的是springboot整合mybatis版本,所以在pom.xml 导入俩包,mybatis和JDBC

3.2 mysql的驱动版本

驱动的配置巴拉巴拉 数据库的value是com.mysql.cj.jdbc.Driver (高版本多了个cj)

3.3 高版本数据库要搭载高版本maria 3.4 编辑核心文件
  • 数据库环境的配置
  • Mapper接口与映射文件的配置




    
    
        
        
    
    
        
        
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
        
    

3.5 创建映射文件 == 接口的实现类

说明:接口要与映射文件一一对应



接口里的方法


3.5 咋用mybatis

动态生成SqlSessionFactory 通过SqlSessionFactoryBuilder().build(inputStream)生产数据库链接

String resource = "mybatis/mybatis-config.xml";
        //通过io流 加载指定的配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //动态生成sqlsessionfactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //从SqlSessionFactory中获取sqlSession
        //sqlsession 类比 成 数据库链接
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取mapper接口
        DemoMapperUser demoMapperUser = sqlSession.getMapper(DemoMapperUser.class);
        //获取服务器
        List userList = demoMapperUser.finall();
        System.out.println(userList);
        //关闭资源
        sqlSession.close();
3.6 简化mybatis操作
  • 进阶思想:向上抽取“想象成功能”
  • 学习了个新的注解:
    @BeforeEach //测试api的工具方法 测试api中的注解 在执行@Test方法前,会提前调用
 private SqlSessionFactory sqlSessionFactory;
    @BeforeEach   //测试api的工具方法 测试api中的注解  在执行@Test方法前,会提前调用
    public void init()throws Exception{
        //1.指定资源文件
        String resource = "mybatis/mybatis-config.xml";
        //2.获取映射文件中的sql语句
        sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsStream(resource));
    }
3.7 常见封装策略

mybatis中只允许单值传参,所以引入封装对象

  1. 封装成对象
  2. 封装成集合
  3. 通过注解封装
3.8 取值 #和$的用法

以字段为参数时,一般使用${},但是这样的sql慎用,可能出现sql注入的问题

实现接口中的接口方法  id和接口中的方法对应
        resultType 返回值结果类型  返回的是 list集合封装维对象
        规则: sql语句不要添加多余的;号 Oracle数据库不能添加;号
Map<>集合
        参数: 集合
        规则:如果参数是一个map集合,则通过#{属性} 可以直接获取属性
通过注解 @Param("属性")参数类型 参数名称 方式修饰
        则通过#{key} 可以直接获取属性
3.9 转义标签

使用#{}获取数据时,默认由于编译的效果,防止sql,默认为数据添加“”

xml文件中的转义字符      > 大于号>
                              <  小于号<
                               &  和 &
           说明:如果sql中有大量的转义字符,建议使用转移标签体
                万能转义标签 语法:
                    
3.10 相同的属性如何封装?

用map map.put
list.set

3.11 mybatis集合写法

3.12 模糊查询

mybatis的优化 1. 别名的配置
  1. 手动配置 指定具体类型的别名
  2. 别名包
  3. 别名的注解
2.sql标签 3.映射驼峰规则 4.动态sql 4.1 if-where
 
    
        select id,name,age,sex from demo_user
            
                name=#{name}
                and age=#{age}
                and sex=#{sex}
            

    
4.2 chooose-when-otherwise
 
    
        select * from demo_user
            where
                
                    name = #{name}
                    sex = #{sex}
                
    
5.resultMap用法
 
6.关联关系 6.1一对一

逻辑:一个员工对应一个部门
association封装单个对象

public class emp implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    private Integer deptId;
    //一对一需要在代码层进行表示,适用对象封装
    private dept dept;
}

映射文件中:


6.2 一对多

用list集合封装

public class dept implements Serializable {
    private Integer deptId;
    private String deptName;
    //关联关系:一个部门对应多个员工
    private List emps;
}

映射文件中的封装:

一对多的封装说明:
            
7.缓存机制 7.1 一级缓存 sqlsession–会话 7.1 二级缓存 sqlsessionfactory 四、springboot和mybatis整合 五、项目入门CRUD前端后端联合调用
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271739.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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