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:

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:

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

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

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

扫描二维码关注公众号,回复: 9092890 查看本文章

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

猜你喜欢

转载自www.cnblogs.com/zhihaospace/p/12297498.html