Mybatis04:配置解析

4、配置解析

1、核心配置文件

  • 我这里写的叫做:SqlMapConfig.xml,但是标准文档中叫做:mybatis-config.xml

  • Mybatis的配置文件包含了会深深影响Mybatis的行为的设置和属性信息

  • configuration(配置)
        properties(属性)
        settings(设置)
        typeAliases(类型别名)
        typeHandlers(类型处理器)
        objectFactory(对象工厂)
        plugins(插件)
        environments(环境配置)
    		environment(环境变量)
                transactionManager(事务管理器)
                dataSource(数据源) 连接池
        databaseIdProvider(数据库厂商标识)
        mappers(映射器)
    

    绑定xml映射文件的核心配置文件如下:

    
    
    
    
    <configuration>
    
        
        <properties resource="db.properties"/>
    
        
        <settings>
            <setting name="logImpl" value="LOG4J"/>
        settings>
    
        
        <typeAliases>
            <package name="cn.edu.cxtc.domain">package>
        typeAliases>
    
    
        
        <environments default="mysql">
            
            <environment id="mysql">
                
                <transactionManager type="JDBC">transactionManager>
                
                <dataSource type="POOLED">
                    
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                dataSource>
            environment>
        environments>
    
        
        <mappers>
            
            <mapper resource="cn/edu/cxtc/dao/UserMapper.xml">mapper>
        mappers>
    configuration>
    

2、环境配置(environment)

Mybatis可以配置成适应多种环境

不过要记住:尽管可以配置多个环境,但是每个SQLSessionFactory实例只能选择一种环境–> 就是一次只能选择一个。

学会用配置多套运行环境!!

Mybatis默认的事务管理器就是JDBC,连接池:POOLED

3、属性(properties)

我们可以通过properties属性来实现引用配置文件。

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。

  1. 在resources中编写一个properties配置文件

db.properties

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatisdb
username = root
password = root
  1. 在核心配置文件中引入db.properties:在写properties标签时要按照顺序写

  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBvi5sWw-1590794861058)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525155236099.png)]

  3. 
    <properties resource="db.properties"/>
    
  4. 在environment中引入DataSource数据源

  5. <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    dataSource>
    
  6. :就相当于我将要连接的信息写到了外部的properties配置文件中,不用在mybatis-config.xml主配置文件中写,直接引入配置文件就行了,和之前的相似。

4、类型别名(typeAliases)

  • 类型别名可为 Java 类型设置一个缩写名字。

  • 它仅用于 XML 配置,意在降低冗余的全限定类名书写

  • **简言之:**在dao的映射配置文件中,resultType是方法的返回值类型,但是cn.edu.cxtc.domain.User太冗余,给他起个名字。

  • 方法一:直接给实体类起别名:

    
    <typeAliases>
        <typeAlias type="cn.edu.cxtc.domain.User" alias="User">typeAlias>
    typeAliases>
    
  • 方法二:也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean

    • 每一个在包 cn.edu.cxtc.domain 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写或者大写的非限定类名来作为它的别名 -->推荐使用小写,但是我使用大写 --> User或者user都可以
    <typeAliases>        
        <package name="cn.edu.cxtc.domain">package>
    typeAliases>
    

    在实体类比较少的时候,使用第一种

    如果实体类十分多,建议使用第二种

    第一种可以DIY别名(自定义取名字),第二种不行,必须是实体的名字首字母大写或者小写

  • 方法三:可以在domain下的实体类中加一个注解:@Alias(“别名”)

    • @Alias这个包是在Mybatis下的
    • 使用注解定义了别名,在别处使用的时候就可以使用别名
  • 建议三种方法不要混合使用

  • 去官网查看Mybatis默认的一些类型别名

5、设置(settings)

设置是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为 =>查看帮助文档

  • 官网

  • 缓存开启和关闭

  • 懒加载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzRh3ynm-1590794861062)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525163105798.png)]

  • 日志实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttQ1gfYz-1590794861072)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525163143211.png)]

6、其他配置

  • 对象工厂(objectFactory)

  • 类型处理器(typeHandlers)

  • 插件(plugins)

    • mybatis-generator-core
    • Mybatis-plus
    • 通用mapper

7、映射器(mappers)

我们需要告诉 MyBatis 到哪里去找到这些SQL语句。所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。

这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了

方式一:使用相对于类路径的资源引用 -->推荐


<mappers>
    
    <mapper resource="cn/edu/cxtc/dao/UserMapper.xml">mapper>
mappers>

方式二:使用映射器接口实现类的完全限定类名


<mappers>
  <mapper class="cn.edu.cxtc.dao.UserDao"/>
mappers>

方式三:将包内的映射器接口实现全部注册为映射器

只要指定了包,这个包下面的所有dao接口的配置文件都能够被指定


<mappers>
  <package name="cn.edu.cxtc.dao"/>
mappers>

**注:**使用方法二和方法三时:

* 接口和他的Mapper配置文件必须同名
* Mapper配置文件的包结构目录必须和dao接口的包目录相同,并且分级

8、作用域(Scope)和生命周期

作用域、生命周期是至关重要的,错误的使用会导致非常严重的并发问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciuSkT6J-1590794861082)(C:\Users\kmkd\AppData\Roaming\Typora\typora-user-images\image-20200525190930584.png)]

SqlSessionFactoryBuilder

* 一旦创建了SqlSessionFactory,就不在需要它了
* 所以SqlSessionFactoryBuilder是一个局部变量

SqlSessionFactory

  • 说白了就是可以想象为:数据库连接池
  • SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
  • 因此SqlSessionFactory的最佳作用域是应用作用域
  • 最简单的就是使用单例模式或者静态单例模式,使他只创建一个实例

SqlSession

  • 连接到连接池的一个请求
  • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
  • 用完之后要赶紧关闭,否则资源被占用

你可能感兴趣的:(Mybatis)