1.为什么要进行代码优化?

        

(1)代码重复问题

        每次使用Mybatis时都需要这三行代码来创建SqlSessionFactory对象

(2)资源浪费问题(★)

        每个SqlSessionFactory对象都绑定了一个连接池,创建多个工厂对象就意味着有多个连接池,十分浪费资源。所以SqlSessionFactory对象只需要创建一次即可。

2.如何实现代码优化?

(1)解决代码重复问题

        将重复代码抽取为一个工具类(Utils),放到一个工具方法里,每次调用该工具方法即可。

(2)让代码只执行一次

        将这三行代码放到静态代码块中(★)。
【tips】静态代码块的执行随着类的加载而自动执行,且只执行一次

3.优化后的代码

(1)工具类SqlSessionFactoryUtils

public class SqlSessionFactoryUtils {
    private static SqlSessionFactory ssf;

    //静态代码块(★)
    static{
        //静态代码块中不能抛出异常,所以用try...catch...来处理
        try {
            String resource = "mybatis-config.xml";//mybatish核心配置文件的路径
            InputStream inputStream = Resources.getResourceAsStream(resource);
            ssf = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //返回SqlSessionFactory对象
    public static SqlSessionFactory getSqlSessionFactory(){
        return ssf;
    }
}

(2)使用工具类获取SqlSessionFactory对象

SqlSessionFactory ssf = SqlSessionFactoryUtils.getSqlSessionFactory();