我是靠谱客的博主 独特香烟,最近开发中收集的这篇文章主要介绍MyBatis框架总结二---全局配置全局配置文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 全局配置文件
    • 一.properties属性
      • 1.通过子元素配置
      • 2.引入资源文件
      • 3.environment元素的dataSource元素中动态设置
    • 二.settings
      • 1.下划线转驼峰
      • 2.设置延迟加载二级缓存等
    • 三.typeAliases
      • 1.单独类取别名
      • 2.整个包中的类取别名(将原本类名称首字母变小写)
      • 3.Mybatis已经取好的别名
      • 4.应用
    • 四.typeHandlers
      • 1.类型处理器的作用
      • 2.Mybatis中提供的类型处理器
      • 3.自定义类型转换器
        • i.实现org.apache.ibatis.type.TypeHandler接口
        • ii.继承org.apache.ibatis.type.BaseTypeHandler类(有时间再查查资料)
    • 五.plugins
      • 1.插件机制的作用
      • 2.简单应用:添加分页插件
    • 六.environments
      • 1.作用
      • 2.environment指定具体环境
        • i.id指定当前环境的唯一标识
        • ii.transactionManager事务管理
        • iii.dataSource配置数据库信息
      • 3.数据库配置案例(结合properties中的介绍)
    • 七.mappers
      • 1.作用
      • 2.应用案例

全局配置文件

Mybatis全局配置文件(项目中的mybatis-config.xml)中configuration包括的(settings)和(properties)等信息对Mybatis行为有着深远的影响。文件结构如下:

标签作用
properties既可以通过元素的子元素配置也可以在典型的Java属性文件中配置
settings改变Mybatis的运行时行为,例如下划线转驼峰
typeAliases取别名,类名称复杂或包名复杂可以用一个简短的别名代替
typeHandlers类型处理器,有自带的也有自定义的转换器,数据库中的表数据类型与类中的属性类型不一致确能相互转换就是这个道理
plugins配置插件,后面用到的分页插件就用到了该标签
environments环境配置,配置数据库信息等
databaseIdProvider数据库厂商标识(目前用的少吧)
mappers映射器,在mybatis初始化时告诉mybatis要引入哪些Mapper映射文件

注:这些标签的顺序不能错

一.properties属性

1.通过子元素配置

	<properties>
		<property name="driver" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/mybatis01" />
		<property name="username" value="root" />
		<property name="password" value="360421" />
	</properties>

2.引入资源文件

jdbc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis01
username=root
password=360421
<properties resource="jdbc.properties"></properties>

3.environment元素的dataSource元素中动态设置

	<environments default="mysql">
		<!-- <environment>:设置某个具体的数据库环境 id:数据库环境的唯一标识 -->
		<environment id="mysql">
			<!-- 以后不会在Mybatis中写 会直接交给Spring管理 -->
			<!-- 以后不会在Mybatis中写 会直接交给Spring管理 -->
			<!-- type可以对应着两种值:JDBC(原始事务管理)|MANAGED(被管理 Spring申明式管理) -->
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<!-- 配置数据库连接信息 -->
				<!-- type三种值:POOLED|UNPOOLED|JNDI POOLED:使用Mybatis自带的数据库连接池(会将当前链接进行缓存) 
					UNPOOLED:不使用Mybatis自带的数据库连接池 JNDI:调用上下文中的数据源,用的很少 -->
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environment>

注:environments元素的具体作用见下文,且子元素配置和引入资源文件只用一种方法就行

二.settings

1.下划线转驼峰

数据库中字段名:user_name、类属性名:userName开启后不同额外处理

	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>

OrderMapper.xml配置文件:数据库中用户id名称user_id

<mapper namespace="com.mapper.OrderMapper">
	<select id="getAllOrder" resultType="com.mapper.Order">
	   select id,user_id,finish from orders
	</select>
</mapper>

Order类中部分字段:类中用户id属性名称userId

	private Integer id;
	private Integer userId;
	private String number;

启动下划线转驼峰功能后,能够自动将user_id值赋给userId

2.设置延迟加载二级缓存等

	<settings>
		<setting name="cacheEnabled" value="true" />
		<setting name="lazyLoadingEnabled" value="true" />
		<setting name="multipleResultSetsEnabled" value="true" />
		<setting name="useColumnLabel" value="true" />
		<setting name="useGeneratedKeys" value="false" />
		<setting name="autoMappingBehavior" value="PARTIAL" />
		<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
		<setting name="defaultExecutorType" value="SIMPLE" />
		<setting name="defaultStatementTimeout" value="25" />
		<setting name="defaultFetchSize" value="100" />
		<setting name="safeRowBoundsEnabled" value="false" />
		<setting name="mapUnderscoreToCamelCase" value="false" />
		<setting name="localCacheScope" value="SESSION" />
		<setting name="jdbcTypeForNull" value="OTHER" />
		<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
	</settings>

三.typeAliases

1.单独类取别名

	<typeAliases>
		<typeAlias type="com.bean.Order" alias="ordernewname" />
	</typeAliases>

2.整个包中的类取别名(将原本类名称首字母变小写)

	<typeAliases>
		<package name="com.bean" />
	</typeAliases>

3.Mybatis已经取好的别名

在这里插入图片描述

4.应用

给com.bean包中的Order类取了个别名ordernewname,在orderMapper.xml中使用:

<mapper namespace="com.mapper.OrderMapper">
	<select id="getAllOrder" resultType="ordernewname">
	   select id,user_id,finish from orders
	</select>
</mapper>

四.typeHandlers

1.类型处理器的作用

类型处理器将获取的值以合适的方式转换成Java类型,在未接触类型处理器的时候,常常会疑惑我们在数据库中设置的字段类型,明明为int类型,为什么可以用String类型的数据进行增删改查。

2.Mybatis中提供的类型处理器

在这里插入图片描述

3.自定义类型转换器

i.实现org.apache.ibatis.type.TypeHandler接口

package com.convert;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

public class BooleanAndStringConvert implements TypeHandler<Boolean> {

	@Override
	public Boolean getResult(ResultSet arg0, String arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Boolean getResult(ResultSet arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Boolean getResult(CallableStatement arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setParameter(PreparedStatement arg0, int arg1, Boolean arg2, JdbcType arg3) throws SQLException {
		// TODO Auto-generated method stub
		
	}

}

ii.继承org.apache.ibatis.type.BaseTypeHandler类(有时间再查查资料)

package com.convert;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class BooleanAndIntConvert extends BaseTypeHandler<Boolean> {

	//参数ResultSet为携带返回数据的容器,String:为表的列名
	@Override
	public Boolean getNullableResult(ResultSet arg0, String arg1) throws SQLException {
		// TODO Auto-generated method stub
		return arg0.getInt(arg1)==1?true:false;
	}
 
	//int:表示为第几列
	@Override
	public Boolean getNullableResult(ResultSet arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		return arg0.getInt(arg1)==1?true:false;
	}

	//CallableStatement:存储函数,这里表示:从存储过程中根据第几列拿数据
	@Override
	public Boolean getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
		// TODO Auto-generated method stub
		return arg0.getInt(arg1)==1?true:false;
	}

	//参数:PreparedStatement对象,int为PreparedStatement对象操作参数的位置,Boolean:java值(父类泛型对应)
	@Override
	public void setNonNullParameter(PreparedStatement arg0, int arg1, Boolean arg2, JdbcType arg3) throws SQLException {
		// TODO Auto-generated method stub
		if (arg2) {
			arg0.setInt(arg1, 1);
		}else {
			arg0.setInt(arg1, 0);
		}
	}
}

以继承BaseTypeHandler类为例,配置文件中声明:

	<typeHandlers>
		<typeHandler handler="com.convert.BooleanAndIntConvert"
			javaType="boolean" jdbcType="INTEGER" />
	</typeHandlers>

数据库中的数据类型(finish字段):
在这里插入图片描述
Java类型中的finish字段类型:Boolean类型

public class Order {
	
	private Integer id;
	
	private Integer userId;
	
	private String number;
	
	private Date createtime;
	
	private String note;
	
	private Boolean finish;   //Boolean类型
}

查询所有订单信息:
在这里插入图片描述

五.plugins

1.插件机制的作用

可以通过插件来修改Mybatis的一些核心行为,插件可通过动态代理机制,介入四大对象的任何一个方法的执行。
四大对象:

对象名称
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)

2.简单应用:添加分页插件

    <!-- 添加分页插件 -->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
	</plugins>

六.environments

1.作用

Mybatis可以配置多种环境,比如开发、测试和生产环境需要不同的配置,每种环境使用一个environment标签进行配置并指定唯一标识符,通过environments标签中的default属性来快速切换环境。

2.environment指定具体环境

i.id指定当前环境的唯一标识

ii.transactionManager事务管理

type:JDBC | MANAGER | 自定义
JDBC:使用JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务范围,JdbcTransactionFactory
MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如JEE应用服务器的上下文)ManagedTransactionFactory
自定义:实现TransactionFactory接口,type=全类名/别名

iii.dataSource配置数据库信息

type:UNPOOLED | POOLED | JNDI | 自定义
UNPOOLED:不使用连接池,UnpooledDataSourceFactory
POOLED:使用连接池,PooledDataSourceFactory
JNDI:在EJB或应用服务器这类容器中查找指定的数据源
自定义:实现DataSourceFactory接口,定义数据源的获取方式

3.数据库配置案例(结合properties中的介绍)

	<!-- <environments>:设置连接数据库的环境 default: 设置默认使用的数据库环境 -->
	<environments default="mysql">
		<!-- <environment>:设置某个具体的数据库环境 id:数据库环境的唯一标识 -->
		<environment id="mysql">
			<!-- 以后不会在Mybatis中写 会直接交给Spring管理 -->
			<!-- 以后不会在Mybatis中写 会直接交给Spring管理 -->
			<!-- type可以对应着两种值:JDBC(原始事务管理)|MANAGED(被管理 Spring申明式管理) -->
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<!-- 配置数据库连接信息 -->
				<!-- type三种值:POOLED|UNPOOLED|JNDI POOLED:使用Mybatis自带的数据库连接池(会将当前链接进行缓存) 
					UNPOOLED:不使用Mybatis自带的数据库连接池 JNDI:调用上下文中的数据源,用的很少 -->
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
		<!-- 可以有多个environment标签 -->
		<environment id="oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<!-- 直接引用jdbc.driver设置好的值 -->
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis01" />
				<property name="username" value="root" />
				<property name="password" value="360421" />
			</dataSource>
		</environment>
	</environments>

注:实际开发中使用Spring管理数据源并进行事务控制的配置来覆盖上述配置

七.mappers

1.作用

在Mybatis初始化的时候告诉Mybatis需要引入哪些Mapper映射文件,mapper逐个注册SQL映射文件
resource:引入类路径下的文件
url:引入网络路径或磁盘下的文件
class:引入Mapper接口

2.应用案例

	<mappers>
	    <!-- 引入类路径下的文件 -->
		<mapper resource="EmpMapper.xml" />
		<mapper resource="OrderMapper.xml" />
		
		<!-- 引入接口  -->
		<mapper class="bean.bean.EmpMapper"/>
		
		<!-- 批量注册,要求SQL映射文件必须与接口名相同并且在同一目录下 -->
		<package name="com.mapper"/>
	</mappers>

最后

以上就是独特香烟为你收集整理的MyBatis框架总结二---全局配置全局配置文件的全部内容,希望文章能够帮你解决MyBatis框架总结二---全局配置全局配置文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部