mybatis配置文件及加载


mybatis配置文件一般放在src根目录下,文件命名不做特殊要求。此处命名为mybatis.xml

mybatis.xml配置文件的约束文件可以在mybatis-3.4.4.jar包下的org.apache.ibatis.builder.xml.mybatis-3-config.dtd 但是约束文件头确不在约束文件中,在mybatis的pdf文档中的。


<?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>

	<!-- 引用jdbc配置文件 -->
	<properties resource="jdbc.properties" />

	<typeAliases>
		<!-- 在此处定义了bean的别名,然后可以去映射文件mapper.xml文件中去引用 ,但要每一个类都要去定义别名-->
		<!-- <typeAlias type="com.zfw.beans.Student" alias="Student" /> -->

		<!-- 为了方便以后不是所有的类都起个别名,mybatis可以使用package来配置,意思就是,这个包里的所有全限定性类都是以类名来定义的 
			如:com.zfw.beans.Xxxx,别名是Xxxx -->
		<package name="com.zfw.benas"/>
	</typeAliases>
	<!-- 配置运行环境 -->
	<!-- environments的default的值是指你要用哪个environment 比如,有两个environment,一个enviroment的id为test01,一个是test02, 
		如果environments的default的值如果是test01,那么这个运行环境就是id为test01的environment 如果environments的default的值如果是test02,那么这个运行环境就是id为test02的environment 
		为什么要这样? 你有可能会在test01的environment的数据库是mysql,但你又想测orcal的数据库, 又或者你url连接有参数 所以就给你这样的形式,让你去测试 -->
	<environments default="test02">

		<!-- 没有参数的url 的运行环境 -->
		<environment id="test01">
			<!-- 事务管理器 ,有两个值,一个是JDBC,是采用JDBC的事务管理机制,一个是MANAGED,由容器来管理事务的整个生命周期(如Spring容器) -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<!-- 可以在帮助文档中config约束中找到这些name的值 -->
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql:///zfw" />
				<property name="username" value="root" />
				<property name="password" value="123" />
			</dataSource>
		</environment>
		<!-- 将数据库连接配置在配置文件中的运行环境 -->
		<environment id="test02">
			<!-- 事务管理器 ,有两个值,一个是JDBC,是采用JDBC的事务管理机制,一个是MANAGED,由容器来管理事务的整个生命周期(如Spring容器) -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<!-- 可以在帮助文档中config约束中找到这些name的值 -->
				<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>
	<!-- 注册映射文件 -->
	<mappers>
		<mapper resource="com/zfw/dao/mapper.xml" />
	</mappers>

</configuration>

加载配置文件的工具类: 由于sqlSessionFactory是一个重量级对象,每次加载配置文件时都去创建,会极大的消耗系统资源,所以写在工具类中,在每次用到sqlSessionFactory去创建sqlSession时,判断sqlSessionFactory对象是不是已经被创建了,如果sqlSessionFactory对象已经被创建了,就直接用,不用再次创建

package com.zfw.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyUtils {
	private static SqlSessionFactory sqlSessionFactory;
    private static SqlSession sqlSession;
	public static SqlSession getSqlSession(){
		InputStream is=null;
		try {
			is = Resources.getResourceAsStream("mybatis.xml");
			if (sqlSessionFactory==null) {
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
			}
			sqlSession = sqlSessionFactory.openSession();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sqlSession;
	}
}

总结:
mybatis配置文件是随意命名的;
通过SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(“mybatis.xml”))加载的;
sqlSessionFactory对象是重量级对象,每次创建都会消耗系统资源。