Mybatis-config全局配置文件详解

Mybatis-config全局配置文件详解

dtd约束文件

全局配置文件的约束文件:mybatis-3-config.dtd

sql映射文件的约束文件:mybatis-3-mapper.dtd

这两个约束文件存在于mybatis-3.4.1.jar的org.apache.ibatis.builder.xml路径下

1.如何在Eclipse中引入约束文件:

​ (1)将需要引入的dtd文件从mybatis-3.4.1.jar文件中解压出来

​ (2)window—preferences—XML—XML catalog—Add:

​ Location:从File System中找到解压出来的dtd文件,打开

​ Key type:URI

​ Key:dtd文件的URL地址(全局配置文件的dtd的URL是http://mybatis.org/dtd/mybatis-3-config.dtd,sql映射文件的URL是http://mybatis.org/dtd/mybatis-3-mapper.dtd)

2.为何要引入dtd文件:编写xml时 Alt+/ 快捷键需要在引入dtd后才会有提示信息

全局配置文件(mybatis-config.xml)的标签

1.properties标签

mybatis可以使用propertis来引入外部properties配置文件的内容
两个属性:
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源




<configuration>
    
	<properties resource="dbconfig.properties">properties>
    
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
			
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			dataSource>
		environment>
	environments>
configuration>

dbconfig.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

2.settings标签

基本结构:

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

settings标签:包含了很多设置项

setting标签:用来设置每一个设置项

​ name:设置项名

​ value:设置项取值

可以通过setting标签设置的项可以参考官方文档。

3.typeAliases标签

别名处理器,可以为Java类型起别名(别名不区分大小写)

(1)typeAlias:为某一个Java类型起别名

​ type:指定要起别名的类型全类名;默认别名是类名小写
​ alias:指定新的别名

<typeAliases>
	
	<typeAlias type="com.mybatis.bean.Employee" alias="Emp"/> -->
typeAliases>
(2)package:为某个包下的所有类批量起别名

​ name:指定包名(为当前包以及所有的下属包中的每一个类都起一个默认别名(类名小写))
​ 批量起别名的情况下,可以使用注解 @Alias 为某个类型指定新的别名(写在Java类的定义前面)

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

如果在同一包内的不同子包中存在相同类名的类,则应该通过注解形式指定该类的别名

//使用注解来指定别名
@Alias("emp")
public class Employee {
    //类中的成员
}

起别名的作用在于,以后在所有的xml文件中都可以通过该别名去指定这个类,而不再需要使用全类名

4.typeHandler标签

用于指定类型处理器,类型处理器用于 JavaType 和 JdbcType 之间的转换

<typeHandlers>
 	<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
typeHandlers>

5.plugins标签

插件,拦截四大对象(Executor、ParameterHandler、ResultSetHandler、StatementHandler)的方法

6.environments标签

environments标签用于配置多种环境,通过default指定使用某种环境,可以通过修改default的值来快速切换环境

environment:配置一个具体的环境信息,id代表当前环境的唯一标识

​ 内部必须有transactionManager、dataSource标签

​ transactionManager:事务管理器
​ type:事务管理器的类型, type="[JDBC|MANAGED]
​ JDBC(JdbcTransactionFactory)代表使用jdbc的方式进行提交、回滚等
​ MANAGED(ManagedTransactionFactory)代表使用JEE服务器容器方式进行事务的控制
​ 自定义事务管理器:实现TransactionFactory接口,type指定为该实现类的全类名

​ dataSource:数据源
​ type:数据源类型, type="[UNPOOLED|POOLED|JNDI]
​ UNPOOLED(UnpooledDataSourceFactory.class):不使用数据库连接池
​ POOLED(PooledDataSourceFactory.class):使用数据库连接池
​ JNDI(JndiDataSourceFactory.class):使用JNDI技术
​ 自定义数据源:实现DataSourceFactory接口,type指定为该实现类的全类名



<configuration>
    
	<environments default="mysql">
        
		
		<environment id="oracle">
		<transactionManager type="JDBC">transactionManager>
		<dataSource type="POOLED">
			<property name="driver" value="oracle.jdbc.OracleDriver" />
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
		dataSource>
		environment>
		
		
		<environment id="mysql">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			dataSource>
		environment>
	environments>

configuration>

7.databaseIdProvider标签

用于支持多数据库厂商,根据不同的数据库厂商执行不同的语句

type=“DB_VENDOR” VendorDatabaseIdProvider

作用:得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis可以根据数据库厂商标识来执行不同的sql

全局配置文件中:

<databaseIdProvider type="DB_VENDOR">
		
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
		
databaseIdProvider>

sql映射文件中:

<mapper namespace="com.mybatis.dao.EmployeeMapper">
	
	<select id="getEmpById" resultType="com.mybatis.bean.Employee" databaseId="mysql">
		select id,last_name,email,gender from tbl_employee where id = #{id}
	select>

	
	<select id="getEmpById" resultType="com.mybatis.bean.Employee" databaseId="oracle">
		select * from employees where id = #{id}
	select>
mapper>

8.mappers标签

将sql映射注册到全局配置中

mapper:注册一个sql映射
resource:引用(注册)类路径下的sql映射文件
url:注册网络路径或磁盘路径下的sql映射文件
class:注册接口
1.有sql映射文件,且映射文件名与接口同名,并且与接口文件放在同一目录下
2.没有sql映射文件,所有的sql都是利用注解写在接口上
推荐:比较重要的DAO接口用sql映射文件,不重要的为了快速开发可以用注解形式

package:批量注册
name:指定包名
注意:有sql映射文件的,sql映射文件与接口同名,且与接口文件放在同一目录下
(可以在config文件夹下创建一个与DAO包名相同的文件夹,将sql配置文件放在该文件夹下)
使用注解形式的接口不需要有sql映射文件

1.注册接口-有映射文件
<mappers>
	<mapper class="com.mybatis.dao.EmployeeMapper"/> -->
mappers>

此时EmployeeMapper.java文件与EmployeeMapper.xml文件要放在同一目录下,且同名

2.注册接口-注解方式

EmployeeMapperAnnotation.java文件:

//EmployeeMapper的注解版本,不再需要对应的sql映射文件
package com.mybatis.dao;
import org.apache.ibatis.annotations.Select;
import com.mybatis.bean.Employee;
public interface EmployeeMapperAnnotation {
	//将原本应该写在sql映射文件中的sql语句通过注解的方式直接写在接口内	
	@Select("select * from tbl_employee where id = #{id}")
	public Employee getEmpById(Integer id);
}

此时对应的全局配置文件中的mapper:

<mappers>
	<mapper class="com.mybatis.dao.EmployeeMapperAnnotation"/> -->
mappers>

不需要有EmployeeMapperAnnotation.xml文件的存在

3.批量注册
<mappers>
    
	<package name="com.mybatis.dao"/>
mappers>

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