Mybatis保证同一session及分页插件url
来源:互联网 发布:飞行燃料 支持淘宝 编辑:程序博客网 时间:2024/06/10 07:45
在ORM持久化框架中,如hibernate、mybatis,与数据库交互的对象是session,而一个操作的完成有的时候可能需要多次使用到session
比如,插入操作,开启事物需要使用session,与数据库交互保存数据也需要使用session,如果这两个session使用的不同,可能会出现
程序正常运行,返回结果也正确,但是数据库中并未真正插入数据的情况。hibernate在这个问题上有一个解决方案:通过currentSession
方法实现,进入这个方法,可以看到如下代码:
但是在mybatis中并没有像hibernate这样已经封装好的可以获取同一个session的方法,我们可以根据hibernate获取同一session的实现思路给mybatis添加同样的功能。
下面是测试:
输出结果为:
false
比如,插入操作,开启事物需要使用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
0 0
- Mybatis保证同一session及分页插件url
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- Mybatis拦截器介绍及分页插件
- 什麽是Dalvik Virtual Machine?
- 北大ACM题分类
- php导入excel数据到mysql
- Windows下手动安装和配置xamarin
- C++学习(五)
- Mybatis保证同一session及分页插件url
- LeetCode : Largest Number
- EL表达式的错误
- Python 刷网页访问量
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- 在linux中使用phpize安装php扩展模块
- 操作符重载之解引用与箭头操作符
- 【Android】Annotation(注解)完全解析
- Android面试和Java面试总结