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