zoukankan      html  css  js  c++  java
  • 3.Mybatis的配置解析

    转载:https://blog.kuangstudy.com/index.php/archives/493/

    一.核心配置文件

    • mybatis-config.xml 系统核心配置文件

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

    • 能配置的内容如下:注意元素节点的顺序!顺序不对会报错

      configuration(配置)
          properties(属性)
          settings(设置)
          typeAliases(类型别名)
          typeHandlers(类型处理器)
          objectFactory(对象工厂)
          plugins(插件)
          environments(环境配置)
              environment(环境变量)
                  transactionManager(事务管理器)
                  dataSource(数据源)
          databaseIdProvider(数据库厂商标识)
          mappers(映射器)
      <!-- 注意元素节点的顺序!顺序不对会报错 -->

    1.environments元素

    • 配置多个环境并切换(通过default指定)

    • 子元素节点:environment

      • id:唯一,用来区别不同环境

      • 事务管理器(transactionManager):有两种 JDBC或MANAGED,一般使用JDBC

      • 数据源(dataSource):使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

        • 有三种内建的数据源类型:UNPOOLED或POOLED或JNDI,一般使用POOLED

    举例:切换不同配置环境 default="test" ,修改default即可切换

     1 <environments default="test">
     2     <environment id="development">
     3         <transactionManager type="JDBC"/>
     4         <dataSource type="POOLED">
     5             <property name="driver" value="com.mysql.jdbc.Driver"/>
     6             <property name="url"
     7                       value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
     8             <property name="username" value="root"/>
     9             <property name="password" value="123456"/>
    10         </dataSource>
    11     </environment>
    12 
    13     <environment id="test">
    14         <transactionManager type="JDBC"/>
    15         <dataSource type="POOLED">
    16             <property name="driver" value="com.mysql.jdbc.Driver"/>
    17             <property name="url"
    18                       value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
    19             <property name="username" value="root"/>
    20             <property name="password" value="123456"/>
    21         </dataSource>
    22     </environment>
    23 </environments>

    2.Properties元素

    • 数据库这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。(说白了就是通过xx.properties文件内容来替换mybatis-config.xml中的内容)

    • 可以使用外部xx.properties文件配置参数,可以在标签内部配置参数,也可以混合使用即用xx.properties也用标签配置但是外部配置文件高于标签配置,优先使用外部配置文件

    • 注意元素节点的顺序!顺序不对会报错

    (2.1)外部配置文件db.properties

    1 driver=com.mysql.jdbc.Driver
    2 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
    3 username=root
    4 password=123456

     1 <!--导入properties文件-->
     2 <properties resource="db.properties"/>
     3 
     4 <environments default="development">
     5     <environment id="development">
     6         <transactionManager type="JDBC"/>
     7         <dataSource type="POOLED">
     8             <property name="driver" value="${driver}"/>
     9             <property name="url"
    10                       value="${url}"/>
    11             <property name="username" value="${username}"/>
    12             <property name="password" value="${password}"/>
    13         </dataSource>
    14     </environment>
    15 </environments>

    (2.2)混合使用

    db.properties:

    1 driver=com.mysql.jdbc.Driver
    2 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8

    mybatis-config.xml:外部配置文件优先(如果db.properties中也配置了username和password则优先使用)

    1 <!--导入properties文件-->
    2 <properties resource="db.properties">
    3     <property name="username" value="root"></property>
    4     <property name="password" value="123456"></property>
    5 </properties>

    3.类型别名(typeAliases)

    • 类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

    • 类型别名的两种方式:

      • 直接给实体类起别名

      • 配置包名加注解,如果不加注解则必须与实体类名相同,加注解之后可以任意命名

    (3.1)直接给实体类起别名

    mybatis-config.xml:

    1 <typeAliases>
    2     <typeAlias type="edu.ustc.wzh.pojo.User" alias="User"></typeAlias>
    3 </typeAliases>

    UserMapper.xml:

    (3.2)配置包名+注解

    mybatis-config.xml:

    1 <typeAliases>
    2     <package name="edu.ustc.wzh.pojo"></package>
    3 </typeAliases>

    User.java:

    1 @Alias("User")

    UserMapper.xml:

    (3.3)也可以只配置包名,使用时类名首字母小写即可。如果类名可能重名则使用(3.2)加上@Alias("xxx")来避免

    (3.4)MyBatis初始化时设置的Java 类型内建的相应的类型别名

    例如:传入参数为Java的int类型,此时parameterType="_int"

      数组基本用Map来传递

    别名映射的类型
    _byte byte
    _long long
    _short short
    _int int
    _integer int
    _double double
    _float float
    _boolean boolean
    string String
    byte Byte
    long Long
    short Short
    int Integer
    integer Integer
    double Double
    float Float
    boolean Boolean
    date Date
    decimal BigDecimal
    bigdecimal BigDecimal
    object Object
    map Map
    hashmap HashMap
    list List
    arraylist ArrayList
    collection Collection
    iterator Iterator

    4.设置(settings)

    设置内容较多只需要重点记住:

    • 懒加载

    • 日志实现

    • 缓存开启关闭

    • 一个配置完整的 settings 元素的示例如下:

       1 <settings>
       2   <setting name="cacheEnabled" value="true"/>
       3   <setting name="lazyLoadingEnabled" value="true"/>
       4   <setting name="multipleResultSetsEnabled" value="true"/>
       5   <setting name="useColumnLabel" value="true"/>
       6   <setting name="useGeneratedKeys" value="false"/>
       7   <setting name="autoMappingBehavior" value="PARTIAL"/>
       8   <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
       9   <setting name="defaultExecutorType" value="SIMPLE"/>
      10   <setting name="defaultStatementTimeout" value="25"/>
      11   <setting name="defaultFetchSize" value="100"/>
      12   <setting name="safeRowBoundsEnabled" value="false"/>
      13   <setting name="mapUnderscoreToCamelCase" value="false"/>
      14   <setting name="localCacheScope" value="SESSION"/>
      15   <setting name="jdbcTypeForNull" value="OTHER"/>
      16   <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
      17 </settings>

    5.其他配置(只需要了解)

    • typeHandlers(类型处理器)

    • objectFactory(对象工厂)

    • plugins插件

      • mybatis-generator-core

      • mybatis-plus

      • 通用mapper

    6.映射器(mappers)

    • 用于注册我们的Mapper.xml文件

    • 有四种方式注册,我们一般只使用三种:

      • resources绑定注册:推荐使用

      • class文件绑定注册:可能会有问题

        • User接口和UserMapper配置文件必须同名

        • User接口和UserMapper配置文件必须在同一个包下

      • package绑定注册:可能会有问题

        • User接口和UserMapper配置文件必须同名

        • User接口和UserMapper配置文件必须在同一个包下

    1 <!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册-->
    2 <mappers>
    3     <!--<mapper resource="edu/ustc/wzh/dao/UserMapper.xml"/>-->
    4     <!--<mapper class="edu.ustc.wzh.dao.UserMapper"></mapper>-->
    5     <!--<package name="edu.ustc.wzh.dao"></package>-->
    6 </mappers>

    7.生命周期和作用域

    • 理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题

    • SqlSessionFactoryBuilder:

      • 一旦创建SqlSessionFactory就不在需要SqlSessionFactoryBuilder

      • 局部变量

    • SqlSessionFactory:

      • 相当于数据库连接池

      • 一旦创建就在运行期间一直存在,不要再去创建或删除它

      • 作用域最好是应用作用域

      • 单例模式或静态单例模式

    • SqlSession:

      • 连接到连接池的一个请求

      • 线程不安全的,不可以被共享,最佳作用域为请求或是方法的作用域

      • 用完之后需要赶紧关闭,否则会造成资源浪费

    这里的每一个Mapper就代表一个具体的业务!

  • 相关阅读:
    Word Embedding理解
    几种简单的主题模型(生成模型)
    BTM学习小记
    LDA学习小记
    word2vec训练好的词向量
    java带字符编码编译
    web安全领域常见的攻击方式
    宝塔webhook布置gitee自动同步服务端
    unity3d学习路线
    缩略图含裁剪文件
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12297498.html
Copyright © 2011-2022 走看看