通过对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 }
是不是简单了很多。
项目结构: