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();