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

Mybatis基础学习之配置解析(下篇)

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

Mybatis基础学习之配置解析(下篇)

前言:

小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。

这个Mybatis基础学习系列是用来记录我学习Mybatis框架基础知识的全过程 (这个系列是参照B站狂神的Mybatis最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)


之后我将尽量以一天一更的速度更新这个系列,还没有学习Mybatis3框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧!加油吧!少年们!

特别提醒:如果对Mybatis基础学习系列感兴趣,可以阅读本系列往期博客:
第一篇:Mybatis基础学习之初识Mybatis
第二篇:Mybatis基础学习之第一个Mybatis程序
第三篇:Mybatis基础学习之CRUD增删改查
第四篇:Mybatis基础学习之万能的Map和模糊查询


由于Mybatis基础学习之配置解析的内容比较多,所以这里我将其拆分为上下两篇来发布。上篇主要介绍Mybatis核心配置中的环境配置事务管理器数据源属性类型别名等内容;下篇主要介绍设置其他配置映射器,以及Mybatis的生命周期等。
上篇博客地址链接:Mybatis基础学习之配置解析(上篇)

今天我们来到了Mybatis基础学习的第五站:配置解析(下篇),主要内容就是能。废话不多说,让我们开始今天的学习内容吧。

5.7 设置(setting)

这是MyBatis中极为重要的调整设置,它们会改变MyBatis的运行时行为

5.7.1 常用设置的含义及默认值
设置名描述有效值默认值
cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存true|falsetrue
lazyLoadingEnabled==延迟加载的全局开关。==当开启后,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态true|falsefalse
useColumnLabel==使用列标签代替列名。==实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察true|falsetrue
useGeneratedKeys==允许JDBC支持自动生成主键,需要数据库驱动支持。==如果设置为true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如Derby)true|falsefalse
autoMappingBehavior指定MyBatis应如何映射列到字段或属性。NONE表示关闭自动映射PARTIAL只会自动映射到没有定义嵌套结果映射的字段FULL自动映射任何复杂的结果集NONE|PARTIAL|FULLPARTIAL
mapUnderscoreToCamelCase是否开启驼峰命名自动映射,即从经典数据库列名last_name映射到经典Java属性名LastNametrue|falsefalse
logImpl指定MyBatis所用日志的具体实现,未指定时将自动查找SLF4J|LOG4J|…NO_LOGGING未设置
localCacheScopeMyBatis利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。默认值为Session会缓存一个会话中执行的所有查询若设置为Statement本地缓存将仅用于执行语句,对相同SqlSession的不同查询将不会进行缓存Session|StatementSession
jdbcTypeForNull当没有为参数指定特定的JDBC类型时,空值的默认JDBC类型某些数据库驱动需要指定列的JDBC类型,多数情况直接使用一般类型即可,比如NullVarcharOtherJdbcType常量,常用值:Null、Varchar或OtherOther
lazyLoadTriggerMethods指定对象的哪些方法触发一次延迟加载用逗号分隔的方法列表equals,clone,hashCode,toString

特别提醒:设置名为logImpl的有效值主要包括SLF4J|LOG4J|LOG4J2|JDK_LOGGINGCOMMONS_LOGGING|STDOUT_LOGGING|NO_LOGGING

5.7.2 配置完整setting元素实例

    
  
    
  
  
  
  
  
    
  
    
  
  
  
    
  
    
  
    
  
    
  
      
  
      
  
    
    
  
  

5.8 其他配置
  • typeHandler(类型处理器)

  • objectFactory(对象工厂)

  • plugins(插件)

    MyBatis Generator Core:会自动生成增删改查过程(逆向工程),但是可有时能会出现一些问题
    MyBatis Plus:MyBatis的增强工具(为简化而生)

    通用Mapper

5.9 映射器(mappers) 5.9.1 映射器的四种使用方式
  • 什么是MapperRegistry?

MapperRegistry注册绑定Mapper配置文件

1.使用相对于类路径的资源引用
  • 使用相对于类路径的资源引用 (即使用resource资源路径绑定注册),推荐使用!

    

2.使用完全限定资源定位符
  • 使用完全限定资源定位符 (即使用URL链接绑定注册) ,不推荐使用,url路径容易出错

    

3.使用映射器接口实现类的完全限定名
  • 使用映射器接口实现类的完全限定名 (即使用class文件绑定注册),可以使用,工作中用的会很多,但可能会受mapper配置文件存放位置的影响

    

4.将包内的映射器接口实现全部注册为映射器
  • 包内的映射器接口实现全部注册为映射器 (即扫描package包绑定注册)

    

5.9.2 使用相对于类路径的资源引用

简单理解就是使用resource资源路径绑定注册

1.设置mapper配置文件存放位置

2.编写 mybatis-config.xml 配置文件 2-1使用resources/mapper/UserMapper.xml路径




    
    
    
        
        
    
    
    
    
        
    
    
    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
    
    
        
    
   

2-2 使用mapper/UserMapper.xml路径




    
    
    
        
        
    
    
    
    
        
    
    
    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
    
    
        
    
    

3.编写 UserMapper.xml 映射文件

        


    
    
    
        select * from mybatis.user
    
    

4.编写 UserDaoTest 测试类
public class UserDaoTest {
    
    @Test
    public void test(){
        // 获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            // 使用getMapper方法来获取接口对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 调用getUserList方法,查询所有用户
            List userList = userMapper.getUserList();
            // 遍历数组
            for (User user : userList) {
                System.out.println(user);
            }
        } catch(Exception e){
            e.printStackTrace();
        } finally {
        // 关闭sqlSession
        sqlSession.close();
        }
    }
    
}
5.测试结果 5-1 存放在resources文件目录下

报错:无效的绑定语句,未找到com.kuang.dao. usermaper . getuserlist

5-2 存放在dao文件目录下

6.测试结论

在使用映射器接口实现类的完全限定名(即使用class文件绑定注册)的情况下,不建议将mapper配置文件存放在resource目录下(即mapper接口与配置文件不在同一位置),因此mapper配置文件应该与mapper接口应该在同一位置 (即存放在同一文件目录下

简单总结,即为两点:

  • 接口与它的Mapper配置文件必须同名!
  • 接口与它的Mapper配置文件必须在同一个包下!
5.9.4 将包内的映射器接口实现全部注册为映射器

简单理解就是扫描package包进行绑定注册

1.设置mapper配置文件存放位置

2.编写 mybatis-config.xml 配置文件




    
    
    
        
        
    
    
    
    
        
    
    
    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
    
    
        
    
    

3.编写mapper配置文件