Mybatis学习(二)—— Mybatis的全局配置文件

Mybatis学习(二)—— Mybatis的全局配置文件

配置文件中常见的属性

引入外部的属性文件 properties

像在Spring中,数据库连接的相关的配置都是在外部的properties文件中进行的,在MyBatis依然使用这种形式。
在类路径下添加db.properties:

### MYSQL 
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/ssm?characterEncoding=utf-8&useUnicode=true
mysql.user=root
mysql.password=a123456
mysql.maxSize=10
mysql.initSize=5

### ORACLE
oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@AUTOBVT-CKDOVBK:1521:wanbange
oracle.user=scott
oracle.password=a123456

然后在MyBatis的全局配置文件中,引入外部的属性文件:
在这里插入图片描述

	<!-- 引入外部属性文件 
		properties : 是引入外部属性文件的标签
			resource:表示从类路径中加载对应的属性文件
			url:表示从网络中或者磁盘中读取对应的属性文件
	-->
	<properties resource="db.properties" ></properties>
	<settings>
<?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" ></properties>
	<settings>
		<!-- 设置自动驼峰命名 -->
		<setting name="mapUnderscoreToCamelCase" value="true"></setting>
	</settings>
	
	<environments default="mysql">
		<environment id="mysql">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<!-- 使用外部文件 -->
				<property name="driver" value="${mysql.driver}" />
				<property name="url" value="${mysql.url}" />
				<property name="username" value="${mysql.user}" />
				<property name="password" value="${mysql.password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 注册sql映射文件 -->
	<mappers>
		<mapper resource="com/zym/dao/EmpDao.xml" />
	</mappers>
</configuration>

运行时行为的设置 settings

在MyBatis的全局配置文件中,可以使用setting标签设置MyBatis运行时的行为,eg:自动驼峰(将查询结果集的数据列映射到实体类属性映射不上的情况下,对查询结果集的数据列自动的进行驼峰命名后再进行映射)、开启mybatis的二级缓存等

<!-- 
		settings:Mybatis运行时行为设置,可以配置多个
			- setting :单个行为设置标签
				- name :设置项名称
				- value : 设置项的值
	 -->
	<settings>
		<!-- 设置自动驼峰命名 -->
		<setting name="mapUnderscoreToCamelCase" value="true"></setting>
	</settings>

别名处理器 typeAliases

这个typeAliases就是别名处理器,可以给MyBatis中经常用到的类型起一个别名。比如说之前的sql映射文件中,对于查询来说,都需要设置返回值类型,如下代码

<select id="selectEmp" resultType="com.zym.entities.Emp">
		select * from emp 
</select>

发现设置的resultType的名称太长,这个时候可以使用别名处理器,给对应的类型起一个别名:

<!-- 
		别名处理器typeAliases:可以给多个类型设置别名处理器  
			typeAlias : 给一个类型设置一个别名
				type : 指定要器别名的类型的全类名
				alias : 指定的起的别名
		如果typeAlias 没有设置 alias属性,默认的别名就是类名,而且不区分大小写
		我们在项目开发中,有很多很多的实体类,那么一个一个的配置非常麻烦,有一种新的写法
			- package 标签:表示指定包中的所有的类都起别名
				- name :指定包名
			之后指定包中的所有类的别名就是类名,而且不区分大小写
			而且我们还可以给指定包中的类指定别名,在实体类的类声明出使用@Alias注解声明 此类的别名
			@Alias("emp")
			public class Emp {
	-->
	<typeAliases>
		<!-- <typeAlias type="com.zym.entities.Emp" alias="emp"/> -->
		<package name="com.zym.entities"/>
	</typeAliases>

以上就是别名处理器的所有的配置,当然别名也有规则:

  • 所有的别名不能相同,不能使用已经被定义过的别名
    约定
  • 起的别名要有语义
  • MyBatis已经帮我们定义好了很多常用类型的别名
    在这里插入图片描述
    以上即是定义好的别名,这些别名是不能再用的。当然我们在开发中,别名处理器一般不用(除了MyBatis已经定义好的别名外),因为使用全类名定义实际效果更好,在开发工具中使用全类名也更好的去查看这个类。

类型处理器 typeHandlers

类型处理器作用于数据库的类型和Java的类型之间的相互转换,比如MYSQL数据库中varchar类型到Java的String类型,比如ORacle数据库中的number类型到Java的Integer类型,还有类似于日前类型等等。无论是MyBatis在预处理语句中设置的一个参数,还是从结果集中取出一个值,都会使用类型处理器将获取的值已合适的方式转换成Java类型。
在这里插入图片描述
配置:

<!-- 
		类型处理器  typeHandlers
			typeHandler :配置单个的类型处理器
				handler : 类型处理器的全类名ing
					javaType : 表示Java类型
					jdbcType : 表示兼容的数据库类型
	-->	
<typeHandlers>
		<typeHandler handler="org.apache.ibatis.type.StringTypeHandler" javaType="java.lang.String" jdbcType="varchar2"/>
</typeHandlers> 

正常的开发中,可以不必配置类型转换器,因为MyBatis都已经定义好了。

运行环境 environments

Environments表示配置多个环境,这里的环境指的是数据库环境,已就意味着我们的MySQL可以连接多个数据库。

<!-- 
		environments:表示可以配置多个环境,default 属性表示指定使用哪一种环境、
			- environment 表示配置单个数据库环境 ,必须存在id属性,表示的此环境的唯一标识,而且多个环境的id不能重复,存在两个标签
				- transactionManager :配置事务管理器,type表示设置事务管理器的类型,有两种
					- JDBC :这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域
					- MANAGED :这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
						 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为
						 <property name="closeConnection" value="false"/>
				- dataSource :配置数据源,type表示设置数据源类型,有三种:
					- POOLED : 使用连接池
					- UNPOOLED :不使用连接池
					- JNDI :
	 -->
	<environments default="oracle">
		<environment id="mysql">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${mysql.driver}" />
				<property name="url" value="${mysql.url}" />
				<property name="username" value="${mysql.user}" />
				<property name="password" value="${mysql.password}" />
			</dataSource>
		</environment>
		
		<environment id="oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${oracle.driver}" />
				<property name="url" value="${oracle.url}" />
				<property name="username" value="${oracle.user}" />
				<property name="password" value="${oracle.password}" />
			</dataSource>
		</environment>
	</environments>

现在在Oracle环境下,能够查询14笔数据,但是不能映射为实体类的对象,因为数据表的字段名称和实体类的属性名称对应不上,那么我们可以考虑给查询的数据列一个别名,使其对应上实体类的属性名,但是切换到Mysql又不成,这个时候我们考虑在不同的数据库环境中执行不同的sql,这是最合理的,必须要配置databaseIdProvider。

<!-- 
		databaseIdProvider:表示配置多数据源厂商支持,为不同的数据库厂商起一个别名
			sql语句中可以使用databaseid指定这条sql语句是在何种厂商的数据库环境下执行
	 -->
	<databaseIdProvider type="DB_VENDOR">
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	
	</databaseIdProvider>

而后就可以在sql语句中指定不同的数据库执行不同的sql语句:

	<!-- public List<Emp> selectEmp(); 
	-->
	<select id="selectEmp" resultType="com.zym.entities.Emp" databaseId="oracle">
		select empno empId,ename empName from emp
	</select>
	
	<select id="selectEmp" resultType="com.zym.entities.Emp" databaseId="mysql">
		select * from emp
	</select>

映射注册 mappers

使用mappers标签可以注册sql映射文件,将sql映射文件注册到全局配置文件中是必不可少的步骤,正常开发来说,一个SQL映射文件对应到一个DAO[Mapper]接口

<!-- 注册sql映射文件
		mappers : 可以注册多个sql映射文件
			mapper : 注册单个sql映射文件
				- resource : 表示配置类路径中的sql映射文件
				- url:表示配置网络中或者硬盘中的sql映射文件
				- class : 表示引用接口注册,
					- 要求,sql映射文件和接口要同名同包
					- 也可以不适用sql映射文件,而是在接口的方法上注解sql,这种方式不提倡,因为MyBatis本来就是想将sql和Java代码相分离
						@Select("select * from emp")
						public List<Emp> selectEmp();
			
			package : 扫描此包及子包的接口和sql映射文件	
				- 需要在接口中使用@Mapper注解	
				@Mapper
				public interface EmpDao {
				- 要求,sql映射文件和接口要同名同包
	 -->
	<mappers>
		<package name="com.wanbangee.dao"/>
		<!-- <mapper class="com.zym.dao.EmpDao"/> -->
	</mappers>

总结

对于全局的配置文件,在Mybatis中是一个关键的配置,当然以后如果Mybatis和Spring的整合的话,可以不需要Mybatis的配置文件,但是依然建议保留。
MyBatis的全局配置文件必须按照顺序配置,因为MyBatis读取主配置文件时,是按照以下顺序读取的:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值