闲话
今天不加班,没人打游戏,那就看书!
基本要点
我们今天来学习一下mybatis配置文件mybatis-config.xml中的各个配置项
注意:这些配置项在配置文件中的定义是有顺序要求的
properties—>settings—>typeAliases—>typeHandlers—>objectFactory—>objectWrapperFactory—>reflectorFactory—>plugins—>environments—>databaseIdProvider—>mappers
1、环境配置(environments)
MyBatis 可以配置成多种环境,比如开发环境、测试环境等
这种机制有助于将 SQL 映射应用于多种数据库之中
尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境
<!-- default:表示当前默认选中哪个环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<!--驱动配置,com.mysql.jdbc.driver -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/decade_test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
url – 这是数据库的 JDBC URL 地址。
username – 登录数据库的用户名。
password – 登录数据库的密码。
defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)
-
transactionManager :事务管理器,mybatis中有2种,分别是JDBC(默认)和MANAGED
如果使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置 -
数据源(dataSource)
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源
有三种类型:UNPOOLED、POOLED、JNDI
1)UNPOOLED: 这个数据源的实现会每次请求时打开和关闭连接。可以理解为用完就关闭连接,对那些数据库连接可用性要求不高的简单应用程序来说是一个很好的选择。
2)POOLED(默认):这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求
2、属性(properties)
核心配置文件中的属性可以在外部进行配置,并可以进行动态替换
你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
我们结合一个例子来理解一下
首先我们创建一个配置文件db.properties用于存放数据库连接信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/decade_test?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
然后配置文件mybatis-config.xml就可以通过properties引入外部配置文件,还可以在其中增加一些额外的属性
这样一来,环境中各个配置项的值都可以用${driver}的形式来表示,具体的值存放在外部配置文件中
注意:如果核心配置文件的属性值已经在外部配置文件中定义,那么以外部配置文件中的值为准,也就是说,外部配置文件中定义什么值就用什么值,就算properties中这个password是对的也没用
<properties resource="db.properties">
<property name="username" value="decade"/>
<property name="password" value="11111"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--驱动配置,com.mysql.jdbc.driver -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
3、设置(setting)
简单了解一下就行:mybatis配置
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
4、类型别名(typeAliases)
作用:类型别名可为 Java 类型设置一个缩写名字,它仅用于 XML 配置
意义:意在降低冗余的全限定类名书写,这样我们就不用把类的完整路径写出来
别名的使用一共有3种方式:优先级1>3>2
1)给实体类取一个别名(实体类比较少时使用)
在mybatis配置文件mybatis-config.xml中,我们使用typeAliases给指定类一个别名
<typeAliases>
//alias是别名,type是实体类所在的位置
<typeAlias alias="User2" type="com.decade.entity.User2"/>
</typeAliases>
这样,在SQL映射文件中,我们就可以写成
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.decade.mapper.UserDao2">
<select id="getUserInfo" resultType="User2">
select * from t_decade_user;
</select>
</mapper>
2)指定一个包(实体类比较多的情况下使用)
MyBatis 会在包名下面搜索需要的 Java Bean,每一个在该包下的 Java Bean,在没有注解的情况下,会使用类名(首字母小写)来作为它的别名
在mybatis配置文件mybatis-config.xml中,我们可以指定某个包
<typeAliases>
//此处是实体类所在包的路径
<package name="com.decade.entity"/>
</typeAliases>
这样,在SQL映射文件中,我们就可以写成
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.decade.mapper.UserDao2">
<select id="getUserInfo" resultType="user2">
select * from t_decade_user;
</select>
</mapper>
3)使用注解:在实体类上加上@Alias注解
import org.apache.ibatis.type.Alias;
@Alias("user")
public class User2 {
private String name;
}
这样,在SQL映射文件中,我们就可以写成user
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.decade.mapper.UserDao2">
<select id="getUserInfo" resultType="user">
select * from t_decade_user;
</select>
</mapper>
5、映射器(mappers)
我们需要告诉 MyBatis 到哪里去找到这些SQL语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件
1)方式一:使用相对于类路径的资源引用(推荐使用)
此方式xml文件可以放在resource文件夹下,没有强制要求和接口类的包路径保持一致
只需要在注册的时候写对xml文件的路径
以及xml文件和接口类的绑定没有写错即可
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="com/decade/mapper/UserMapper.xml"/>
</mappers>
2)方式二:使用映射器接口进行注册
注意点:
- 接口和它对应的xml文件名称必须相同,也就是不能出现接口类叫UserDao,而xml文件叫UserMapper.xml的情况
- 接口和它的xml文件必须在同一个包下,如果接口类在Java文件夹下,而xml文件放在resource文件夹下,那么xml文件的路径需要和接口类保持一致
<!-- 使用映射器接口实现类绑定注册 -->
<mappers>
<mapper class="com.decade.mapper.UserMapper"/>
</mappers>
3)方式三:通过包注册
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="com.decade.mapper"/>
</mappers>
注意点:
- 接口和它对应的xml文件名称必须相同,也就是不能出现接口类叫UserDao,而xml文件叫UserMapper.xml的情况
- 接口和它的xml文件必须在同一个包下,如果接口类在Java文件夹下,而xml文件放在resource文件夹下,那么xml文件的路径需要和接口类保持一致
最后分享几个常见的插件:mybatis-plus、mybatis-generator-core、通用mapper
如有错误,欢迎指正!