mybatis - SqlSessionFactoryUtils工具类抽取

SqlSessionFactoryUtils工具类抽取

      • SqlSession的使用范围
      • 抽取出来的工具类

SqlSession的使用范围

  • SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。
  • SqlSession通过SqlSessionFactory创建。
  • SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。
  1. SqlSessionFactoryBuilder
    SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory创建的。所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
  2. SqlSessionFactory
    SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。

3.SqlSession
SqlSession是一个面向用户的接口,sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
打开一个 SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭

抽取出来的工具类

package com.util;

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * SqlSessionFactory 工具类
 * @author fbd
 *
 */
public class SqlSessionFactoryUtils {
    //SqlSessionFactory  如上所述应为单例模式,应为成员变量
	private static SqlSessionFactory sqlSessionFactory;
	//初始静态化块, 类加载的时候就会加载
	static {
		try {
			//创建sqlSessionFactoryBuilder对象  , 该对象只是用一次,故只需在方法内的变量即可。
			SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
			//创建核心配置文件输入流
			InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			//通过输入流创建SqlSessionFactory对象
			sqlSessionFactory = ssfb.build(inputStream);
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
	// 提供get方法,获取sqlSessionFactory
	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}
}

你可能感兴趣的:(#,mybatis)