MyBatis全局配置文件详情

引入dtd文件

<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">

一、引入外部的属性文件 - properties

  • 在类路径下添加db.properties
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
  • 在MyBatis的全局配置文件中,引入外部的属性文件
<?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:表示从类路径中加载对应的属性文件
			url:表示从网络中或者磁盘中读取对应的属性文件
	-->
	<properties resource="db.properties" ></properties>
</configuration>

二、运行时行为的设置 -settings

在MyBatis的全局配置文件中,可以使用setting标签设置MyBatis运行时的行为,有很多可以设置的项
在这里插入图片描述

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

三、别名处理器 - typeAliases

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

<select id="selectEmp" resultType="com.wanbangee.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.wanan.entities.Emp" alias="emp"/> -->
		<package name="com.wanan.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> -->

五、运行环境 - environments

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。
尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

<!-- 
		environments:表示可以配置多个环境,default 属性表示指定使用哪一种环境、
			- environment 表示配置单个数据库环境 ,必须存在id属性,表示的此环境的唯一标识,而且多个环境的id不能重复,存在两个标签
				- transactionManager :配置事务管理器,type表示设置事务管理器的类型,有两种
					- JDBC :这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域
					- MANAGED :这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
						 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为
						 <property name="closeConnection" value="false"/>
				- dataSource :配置数据源,type表示设置数据源类型,有三种:
					- POOLED : 使用连接池,这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间
					- UNPOOLED :不使用连接池,这个数据源的实现会每次请求时打开和关闭连接
					- JNDI :这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 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>

六、数据库厂商标识(databaseIdProvider)

MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载带有匹配当前数据库 databaseId 属性和所有不带 databaseId 属性的语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。

<!-- 
		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.wanbangee.entities.Emp" databaseId="oracle">
		select empno empId,ename empName from emp
	</select>
	
	<select id="selectEmp" resultType="com.wanbangee.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.wanbangee.dao.EmpDao"/> -->
		<!-- <mapper resource="com/wanbangee/dao/EmpDao.xml"/> -->
	</mappers>

八、编写顺序

元素类型为 “configuration” 的内容必须匹配 “(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)”

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值