每次读取Mybatis核心配置文件来创建SqlSessionFactory的时候都需要重复写这三行代码, 这样造成了代码冗余.
不过这还不是最重要的一点:
SqlSessionFactory自带了数据库连接池, 如果每次访问都创建一个SqlSessionFactory对象很容易造成资源浪费
所以利用 静态代码块 会在类被加载的时候自动执行, 且只会执行一次的特点抽取一个工具类
package com.itheima.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//返回一个sqlsessionfactory
public static SqlSessionFactory getSqlSessionFactory() throws IOException {
return sqlSessionFactory;
}
}
private static SqlSessionFactory sqlSessionFactory;
变量设置为static确保不会再创建新的工厂类
因为所有类的实例共享同一个静态成员,不同实例对静态成员的访问是相同的