1.5 使用工具类简化第一个项目

上面的案例实现了数据的查询操作,如果还要实现添加、删除、修改等操作,则实现步骤类似。由于每一次执行SqlSession的方法前,均需先读取主配置文件,再创建SqlSessionFactory会话工厂,最后创建SqlSession对象,这一系列过程比较烦琐,所以可以将获取SqlSession对象的一系列程序代码封装定义为一个工具类方法getSession(),放在单独的一个类MyBatisUtil中,将来只要调用这个方法,即可获取SqlSession对象,从而简化所有的增删改查操作。

项目案例:使用工具类 MyBatisUtil 简化第1个项目的 DAO 层实现类 StudentDaoImpl 的findAllStudents方法。(项目源码参见本书配套资源:第1章/工具类简化第1个mybatis项目/mybatis12)

实现步骤:

(1)复制第一个项目mybatis11为mybatis12,新建包com.lifeng.utils,新建类MyBatisUtil.java,代码如下。该类提供两个方法,一个用来获取SqlSession对象,一个用来关闭SqlSession对象。

【注意】项目复制粘贴后还需用鼠标右键单击粘贴后的新项目,然后单击 Properties,选择 Web Project Settings,在Context root中更改旧项目名称为新项目名称。

public class MyBatisUtil {

private MyBatisUtil(){

}

private static final String RESOURCE = "mybatis-config.xml";

private static SqlSessionFactory sqlSessionFactory = null;

private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();

static {

Reader reader = null;

try {

reader = Resources.getResourceAsReader(RESOURCE);

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

sqlSessionFactory = builder.build(reader);

} catch (Exception e1) {

e1.printStackTrace();

throw new ExceptionInInitializerError("初始化MyBatis失败,请检查配置文件或数据库");

}

}

public static SqlSessionFactory getSqlSessionFactory(){

return sqlSessionFactory;

}

public static SqlSession getSession(){

SqlSession session = threadLocal.get();

// 如果session为null,则打开一个新的session

if (session == null){

session = (sqlSessionFactory !=null) ?sqlSessionFactory.openSession():null;

threadLocal.set(session);

}

return session;

}

public static void closeSession(){

SqlSession session = (SqlSession) threadLocal.get();

threadLocal.set(null);

if (session !=null){

session.close();

}

}

}

以上代码无须死记,只是工具而已,复制借用过来即可。

【注意】将来使用Spring整合MyBatis后,这个工具类将不再使用,而是用Spring提供的工具代替。

(2)修改接口IStudentDao的实现类StudentDaoImpl,代码如下:

对比原来的findAllStudents方法,现在的findAllStudents方法的代码简化了不少,其他方面没变化。运行该测试类可得到同样的效果。其他增删改查的方法都可这样做,将大大减少代码冗余。