Mybatis使用xml方式配置(三)

相关章节:
Mybatis使用xml方式配置
Mybatis使用xml方式配置(二)

官网地址:https://mybatis.org/mybatis-3/zh/configuration.html
这里,我们开始学习官网中的xml配置。MyBatis的配置文件包含了会深深影响 MyBatis行为的设置和属性信息。可配置项有:

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

1. properties属性配置

连接数据库的一些属性等可以在外部进行配置,并可以进行动态替换。在mybatis-config.xml文件中,我们可以配置properties属性:

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</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>

按照文档,我们在resources文件夹下新建db.properties文件,在其中我们写入:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username=root
password=123456

注意此时的&的转义&amp;就不再需要了,在前面文章中转义是因为配置在xml文件中。
然后,我们在mybatis-config.xml文件中配置properties的文件关联,以及使用:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!--核心配置文件-->
<configuration>

    <properties resource="db.properties"/>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>

    <!--  关联xml配置的文件  -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

其他内容不变,此时我们不妨测试下fuzzyQuery
在这里插入图片描述
说明数据库的连接配置是成功的。

2. settings设置

按照视频,这里摘取几个重要的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置方式,在mybatis-config.xml文件中配置:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="logPrefix" value="mylog_mybatis"/>
  <setting name="logImpl" value="LOG4J "/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
</settings>

3. typeAliases类型别名

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML配置,意在降低冗余的全限定类名书写。在前面的UserMapper.xml文件中,如:

<select id="findUserInfoByID" parameterType="int" resultType="com.weizu.pojo.UserInfo">
    select * from userinfo where userid = #{userid}
</select>

可以发现resultType="com.weizu.pojo.UserInfo"过长,所以,就考虑使用类型别名。类型别名的配置使用typeAliases标签,在mybatis-config.xml文件中配置:

<configuration>

    <properties resource="db.properties"/>

    <typeAliases>
        <typeAlias type="com.weizu.pojo.UserInfo" alias="userInfo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>

    <!--  关联xml配置的文件  -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

那么,在UserMapper.xml文件中,就可以使用别名,而不需要全限定类名,如:

<select id="fuzzyQueryByUserName" parameterType="string" resultType="userInfo">
    select * from userinfo where username like "%"#{name}"%"
</select>

需要注意的是,在mybatis-config.xml配置文件中的configuration标签下的文件放置是有顺序要求的:

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

同时,如果返回值是基本类型,使用在其前加下划线:
_byte 表示基本类型: byte
_long 表示基本类型:long
_short 表示基本类型: short
_int 表示基本类型: int
_double 表示基本类型: double
_float 表示基本类型:float
_boolean 表示基本类型: boolean
如果返回值是引用类型,在其前不用加下划线:
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. plugins插件

  • mybatis-generator
  • mybatis-plus

等插件,可以更加简化代码的书写。

5. environments 环境配置

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中,不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory实例只能选择一种环境。
mybatis-config.xml文件中的environments元素定义了如何配置环境:

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </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>

environments标签下可以定义多个environment,然后使用default来指定当前所使用的环境。
同时,transactionManager指定事务管理器,在MyBatis中有两种类型的事务管理器(也就是type="[JDBC|MANAGED]"):

  • JDBC– 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。

dataSource标签指定使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
大多数 MyBatis应用程序会按示例中的例子来配置数据源。在mybatis中有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:

  • driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
  • url – 这是数据库的 JDBC URL 地址。
  • username – 登录数据库的用户名。
  • password – 登录数据库的密码。
  • defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
  • defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)。

POOLED– 这种数据源的实现利用“池”的概念将 JDBC连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。

除了上述提到 UNPOOLED下的属性外,还有更多属性用来配置 POOLED 的数据源:

  • poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10
  • poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
  • poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
  • poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。
  • poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置, 作用于每一个尝试从缓存池获取连接的线程。 如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过 poolMaximumIdleConnectionspoolMaximumLocalBadConnectionTolerance 之和。 默认值:3(新增于 3.4.5)
  • poolPingQuery– 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动出错时返回恰当的错误消息。
  • poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery 属性为一个可执行的 SQL 语句(最好是一个速度非常快的 SQL 语句),默认值:false。
  • poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。