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="mysql">
			
			
			
			<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>
	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已经取好的别名

MyBatis框架总结二---全局配置_第1张图片

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中提供的类型处理器

MyBatis框架总结二---全局配置_第2张图片

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字段):
MyBatis框架总结二---全局配置_第3张图片
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="mysql">
		
		<environment id="mysql">
			
			
			
			<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>
		
		<environment id="oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				
				<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"/>
		
		
		<package name="com.mapper"/>
	mappers>

你可能感兴趣的:(MyBatis框架)