Mybatis保证同一session及分页插件url

 在ORM持久化框架中,如hibernate、mybatis,与数据库交互的对象是session,而一个操作的完成有的时候可能需要多次使用到session
比如,插入操作,开启事物需要使用session,与数据库交互保存数据也需要使用session,如果这两个session使用的不同,可能会出现
程序正常运行,返回结果也正确,但是数据库中并未真正插入数据的情况。hibernate在这个问题上有一个解决方案:通过currentSession
方法实现,进入这个方法,可以看到如下代码:
 public static final ThreadLocal session = new ThreadLocal();
 public static Session currentSession() {
 Session s = (Session)session.get();
 //open a new session,if this session has none
 if(s == null){
 s = sessionFactory.openSession();
 session.set(s);
 }
return s;

}

但是在mybatis中并没有像hibernate这样已经封装好的可以获取同一个session的方法,我们可以根据hibernate获取同一session的实现思路给mybatis添加同样的功能。
public class MybatisUtils {
    private static ThreadLocal<SqlSession> local = new ThreadLocal<SqlSession>();
   
    public static SqlSession getSqlSession() throws IOException{
        Reader reader = Resources.getResourceAsReader("mybatis-configrations.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        return sessionFactory.openSession();
    }
   
    public static SqlSession getcurrSession() throws IOException{
        SqlSession session = local.get();
        if(session==null){
            session = getSqlSession();
            local.set(session);
        }
        return session;
    }
}

下面是测试:
public class MybatisTest {

    @Test
    public void testSqlSession() throws IOException{
        //use openSession method,get the session
        SqlSession s1 = MybatisUtils.getSqlSession();
        SqlSession s2 = MybatisUtils.getSqlSession();
        System.out.println(s1==s2);
        //get the same session,use the mock method
        SqlSession s3 = MybatisUtils.getcurrSession();
        SqlSession s4 = MybatisUtils.getcurrSession();
        System.out.println(s3==s4);
    }
}

输出结果为:
false

true


mybatis分页插件:

http://git.oschina.net/free/Mybatis_PageHelper



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值