通过对mybatis框架的中核心接口和类的分析,发现之前写的那个小demo是有问题的。现在对其进行部分优化。

如果存在多个功能的时候,势必会有很多重复的代码,如,创建sqlsession对象,关闭sqlsession会话等等,现在就对其进行优化

编写MyBatisUtil.java工具类

 1 package cn.smbms.utils;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5
 6 import org.apache.ibatis.io.Resources;
 7
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11
12 public class MyBatisUtil {
13     //在整个应用的生命周期内只会有一个SqlSessionFactory实例,只会创建一次
14     private static SqlSessionFactory factory=null;
15     //SqlSession openSession;
16     //创建静态代码块
17     //创建sqlsessionfactory工厂
18     static{
19         String resource="mybatis-config.xml";
20
21         try {
22             InputStream stream = Resources.getResourceAsStream(resource);
23             factory = new SqlSessionFactoryBuilder().build(stream);
24         } catch (IOException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }
28
29     }
30
31     //创建sqlsession对象
32     public static SqlSession createSqlSession(){
33         SqlSession openSession = factory.openSession(false);//true表示的是自动提交事物  false关闭自动提交事物
34         return openSession;
35     }
36     //关闭sqlsession会话
37     public static void closeSqlSession(SqlSession sqlSession){
38         if(sqlSession!=null){
39             sqlSession.close();
40         }
41     }
42
43 }

改造之前的测试方法:

 1     //对之前的进行改造
 2     @Test
 3     public void test2(){
 4
 5         int count=0;
 6         SqlSession sqlSession=null;
 7
 8         try {
 9             sqlSession = MyBatisUtil.createSqlSession();
10             //调用mapper文件来对数据库进行操作,必须先把mapper文件引入到mybatis-config.xml中
11             count = (Integer)sqlSession.selectOne("cn.smbms.dao.user.UerMapper.count");
12             mlogger.info("用户表中的记录数:"+count);
13
14         } catch (Exception e) {
15             // TODO: handle exception
16         }finally{
17             //最后一定要注意:关闭会话
18             MyBatisUtil.closeSqlSession(sqlSession);
19
20         }
21
22
23
24     }

是不是简单了很多。

项目结构:

02-11 05:01