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就代表一个具体的业务!

原文地址:https://www.cnblogs.com/zhihaospace/p/12297498.html