Mybatis的配置解析

Mybatis

4、配置解析

4.1、核心配置文件

  • mybatis-config.xml。

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

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

4.2、环境配置(environments)

  • MyBatis 可以配置成适应多种环境

    • 不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境。
    • 学会使用配置多套运行环境!
  • Mybatis默认的事务管理器是JDBC,POOLED(连接池)。

4.3、属性(properties)

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

  • 这些属性都是可外部配置且可动态替换的,既可以在典型的Java 属性文件中配置,亦可通过 properties元素的子元素来传递。【db.properties】

  • 编写一个配置文件

    • driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/ibatis?useSSL=true&useUnicode=true&characterEncoder=UTF-8 
      username=root
      password=123456
      
  • 在xml中,所有的标签都可以规定其顺序(写在紧挨的下面)。

  • 在核心配置文件中映入。

    •  <!--引入外部配置文件-->
       <!--首先使用外部配置文件,然后才会使用内部配置文件-->
      <configuration>
          <properties resource="db.properties">
              <property name="password" value="1234"/>
          </properties>
      
    •  <dataSource type="POOLED">
                       <property name="driver" value="${driver}"/>
                       <property name="url" value="${url}"/>
                       <property name="username" value="${username}"/>
                       <property name="password" value="${password}"/>
         </dataSource>
      
    • 可以直接引入外部文件。

    • 可以在其中增加一些属性配置。

    • 如果两个文件有同一个字段,优先使用外部配置文件的!

4.4、类型别名(typeAliases)

  • 类型别名是为Java类型设置一个短的名字。

  • 存在的意义仅在于用来减少类完全限定名的冗余。

    •  <!--可以给实体类起别名-->
          <typeAliases>
              <typeAlias type="com.jcooling.pojo.User" alias="User"></typeAlias>
         </typeAliases>
      
    • 也可以指定一个包名,MyBatis 会在包名下面搜索需要的Java Bean,比如:

      • 扫描实体类的包,它的默认别名就为这个类的类名,首字母小写(建议)!

      •  <typeAliases>
        <package name="com.jcooling.pojo"></package>
        </typeAliases>
        
  • 在实体类比较少的时候,使用第一种方式。

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

  • 第一种可以DIY(自定义)别名,第二种则不行,如果非要改,需要在实体上增加注解。

    • @Alias("user")
      public class User{}
      

4.5、设置

  • cacheEnabled

    • 有效值 true | false 默认值 true

    • 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。

  • lazyLoadingEnabled

    • 有效值 true | false 默认值 false

    • 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。

    • 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。

  • logImpl

    • 有效值 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 默认值 未设置

    • 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。

4.6、其他配置

  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins插件
    • ybatis-generator-core
    • mybatis-plus
    • 通用mapper

4.7、映射器

  • MapperRegistry:注册绑定我们的Mapper文件。

  • 方式一:

    •    <!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册!-->
      <mappers>
          <mapper resource="mapper/UserMapper.xml"></mapper>
       </mappers>
      
  • 方式二:使用class文件绑定注册。

    • 接口和他的Mapper配置文件必须同名。

    • 接口和他的Mapper配置文件必须在同一个包下。

    • <mappers>
          <mapper class="com.jcooling.mapper.UserMapper"></mapper>
      </mappers>
      
  • 方式三:使用扫描包进行注入绑定。

    • 接口和他的Mapper配置文件必须同名。

    • 接口和他的Mapper配置文件必须在同一个包下。

    • <mappers>
      <package name="com.jcooling.mapper"></package>
      <mappers>
      

4.8、生命周期和作用域

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

  • SqlSessionFactoryBuilder:

    • 一旦创建了SqlSessionFactory,就不再需要它了。
    • 局部变量。
  • SqlSessionFactory:

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

    • 连接到连接池的一个请求!
    • SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
    • 用完之后需要赶紧关闭,否则资源被占用。
    • 这里面的每一个Mapper,就代表一个具体的业务!
  • image-20211121222650926
image-20211121223719562
posted @ 2021-11-21 22:56  JCooling  阅读(71)  评论(0)    收藏  举报