玩转MyBatis03——配置解析
1 核心配置文件
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。因此,我们有必要学习一下配置文件的编写与设置,知其然并知其所以然。mybatis-config.xml 为系统核心配置文件,常用配置如下所示。注意元素节点的顺序!顺序不对会报错

2 properties
数据库的属性可以在外部配置并进行动态替换,该外部既可以是典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。下面将分别展示通过不同动态配置的具体操作:
2.1 利用properties文件动态替换
- 首先在 resources 包下建立 jdbc.properties 配置文件,并在文件中填写 jdbc 的连接配置信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=******
- 然后在 mybatis-config.xml 文件中新建以下配置,其中 properties 标签中的 resource 代表使用哪个文件下的配置属性, dataSource 标签下的各个 property 的 value 取前述配置文件中的 key
<configuration>
<properties resource="jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
2.2 直接在 mybatis-config.xml 中配置
直接在 mybatis-config.xml 中对应的 property 的 value 处填写
xml 文件中的 & 符号需要替换为 &
<configuration>
<!-- <properties resource="jdbc.properties"></properties>-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="zs123456"/>
</dataSource>
</environment>
</environments>
<!--每一个Mapper.xml都需要在此注册-->
<mappers>
<mapper resource="com/jason/mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.3 利用方法传入
具体地,我们可以使用 SqlSessionFactoryBuilder.build() 方法中传入属性值
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// ... 或者 ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
!!!优先级:方法传入 > 直接配置 > peoperties 文件设置
!!!优先级高的会覆盖优先级低的配置
environments
配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)。比如下面的配置创建了 development 和 test 两个套环境,且默认选择使用 development 环境。
<environments default="test">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="zs123456"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
除此之外,还有 事务管理器(transactionManager)和 数据源(dataSource)两个属性,详细的内容可以查看官方文档,这里不做过多赘述。
mappers
typeAliases
可以给某个 Java 类取别名,我们在使用特定类时不用再加上长长的限定名了。共有两种形式:
- 直接给某个类起别名
<typeAliases>
<typeAlias type="com.jason.pojo.User" alias="User"/>
</typeAliases>
- 给某个包下的所有类起别名(在没有注解的情况下,使用 Bean 的首字母小写的非限定类名作为别名;若有注解,则别名为其注解值)
<typeAliases>
<package name="com.jason.pojo"/>
</typeAliases>
在通过任意一种方式起了别名之后,在 mapper.xml 文件中就直接使用别名 User
<!--select查询语句, resultType 写集合的范型的类型-->
<select id="getUserList" resultType="User">
select *
from mybatis.user
</select>
Java 类型内建的类型别名入下图所示:


本文介绍了MyBatis的核心配置文件mybatis-config.xml的使用方法,包括如何通过properties文件动态替换数据库连接信息,直接在配置文件中配置信息以及通过方法参数传入属性值的方式。此外还介绍了如何配置多环境以及mappers和typeAliases的使用。
880

被折叠的 条评论
为什么被折叠?



