MyBatis核心配置文件深入分析
一个双子座的Java攻城狮 人气:0MyBatis 的核心配置文件是 mybatis-config.xml。注意配置文件中节点的顺序有要求,必须按照下面的顺序填写节点信息:
(properties,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,reflectorFactory,plugins,environments,databaseIdProvider,mappers)
<configuration> <properties></properties> <settings></settings> <typeAliases></typeAliases> <typeHandlers></typeHandlers> <objectFactory></objectFactory> <objectWrapperFactory></objectWrapperFactory> <reflectorFactory></reflectorFactory> <plugins></plugins> <environments></environments> <databaseIdProvider></databaseIdProvider> <mappers></mappers> </configuration>
环境配置与 mappers 映射器
基本的 MyBatis 配置:
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <!--每个mapper.xml都需要在mybatis配置文件中进行配置--> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
在上面这段配置中配置了运行环境以及 mappers 映射器。
配置 environment 时,通过 transactionManager 指定事务管理器,通过 dataSource 指定数据库的引擎类型、连接方式、用户名、密码。
mappers 映射器用来和代码中写的 mapper 一一对应,在代码中写一个 mapper 接口和 mapper.xml 文件,就需要在 mappers 映射器中增加一个 mapper 节点。
属性(properties)
在写 mybatis-config.xml 环境配置的时候,将数据库的连接信息直接写在了 mybatis-config.xml 配置文件中,不方便后续的更改,因此可以使用属性(properties)的能力。
在 resources 目录下新建一个 db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123
接着在 mybatis-config.xml 的 configuration 中添加 properties 节点,注意这个节点的位置必须放在首位。
<properties resource="db.properties"> </properties>
接着就可以用 properties 中的属性去代替 xml 中的属性
<property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/>
设置(settings)
配置文件中的 settings 是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
常用的设置有以下几种:
设置的配置方式如下:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="logImpl" value="NO_LOGGING"/> </settings>
类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
类型别名有两种方式,第一种是对类取别名,第二种是指定一个包名
<mapper namespace="com.cn.mapper.UserMapper"> <select id="getUserList" resultType="com.cn.pojo.User"> select * from user; </select> </mapper>
第一种方式是对类取别名,这里的 resultType 写的是类的全限定名,我们可以在 mybatis-config.xml 中使用类型别名来简化。typeAliases 在配置文件中的位置需要放在 setting 后面
<typeAliases> <typeAlias type="com.cn.pojo.User" alias="user"/> </typeAliases>
这样设置之后就可以在 resultType 中直接使用 user
<mapper namespace="com.cn.mapper.UserMapper"> <select id="getUserList" resultType="user"> select * from user; </select> </mapper>
第二种方式是指定一个包名,MyBatis 会在指定的包名路径下搜索需要的 JavaBean。修改配置文件,使用包名来指定
<typeAliases> <package name="com.cn.pojo"/> </typeAliases>
每一个在包 com.lanqiaoyun.pojo 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 com.lanqiaoyun.pojo.User 的别名为 user;若有注解,则别名为其注解值
@Alias("user") public class User { ... }
上方所示完整配置文件如下:
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties"> </properties> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="logImpl" value="NO_LOGGING"/> </settings> <typeAliases> <package name="com.cn.pojo"/> </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> <!--每个mapper.xml都需要在mybatis配置文件中进行配置--> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
加载全部内容