tapestry mysql_tapestry与mybatis模块的结合
要接入mybatis需要考虑以下几个方法的问题:
此项目是否还会引用hibernate(hibernate用的实在太广了没法忽视)?
与hibernate的事务如何共存?
与hibernate的配置如何统一(谁也不想一个项目配置多个数据库地址吧)?
SqlSessionFactory与SqlSession如何构建?SqlSession什么时候要释放?SqlSessionFactory需要释放吗?
mybatis模块会有默认的配置信息,但具体项目配置信息如何个性化?
如何用maven可以加入库
oschina-third
http://maven.oschina.net/content/repositories/thirdparty/
并配置jar包,它附有源码:
cn.rjzjh
tapestry-mybatis
1.0.4
下面将对上面提及的5个问题看看tapestry-mybatis如何解决.
此项目是否还会引用hibernate(hibernate用的实在太广了没法忽视)?
项目可以通过配置常量 configuration.override(MybatisSymbols.HAS_HIBERNATE, true);来指示模块该项目存有hibernate.
与hibernate的事务如何共存?
该模块通过@CommitMybatis 指示方式提交mybatis事务,需要提交,如果存在hibernate,则通过hibernate的@CommitAfter注解不但会提交hibernate的事务也会同时提交mybatis的事务,它通过方法拦截,跟spring的AOP类似完成事务的提交,当出现运行时异常时将回自动回滚事务.mybatis的事务提交是发生在hibernate的事务提交之后.tapestry-hibernate模块的事务提交的原理与此相同,也就是说在调用方法正常执行完成后通过拦截方法先提交hibernate事务再提交mybatis事务,如果调用方法出现运行时异常时,会先回滚hibernate事务,再回滚mybatis事务.具体实现见类cn.rjzjh.tapestry.mybatis.services.CommitMybatisWorker
与hibernate的配置如何统一(谁也不想一个项目配置多个数据库地址吧)?
这个需要各项目去个性化定制,但是mybatis模块为这种个性化定性提供了入口.,如示:
需要在项目的AppMoudle.java中增加配置,把hibernateSessionSource传给配置类:
public static void contributeIMybatisSessionSource(
OrderedConfiguration config,HibernateSessionSource hibernateSessionSource) {
config.add("hib", new MybatisConfigurerFormHb(hibernateSessionSource));
}
在配置文件类中做如下配置
public class MybatisConfigurerFormHb implements MybatisConfigurer {
private final HibernateSessionSource hibernateSessionSource;
public MybatisConfigurerFormHb(HibernateSessionSource hibernateSessionSource) {
this.hibernateSessionSource = hibernateSessionSource;
}
@Override
public void configure(Configuration configuration) {
C3P0ConnectionProvider cp = (C3P0ConnectionProvider) ((SessionFactoryImplementor) hibernateSessionSource
.getSessionFactory()).getConnectionProvider();
DataSource dataSource = cp.unwrap(DataSource.class);
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development",
transactionFactory, dataSource);
configuration.setEnvironment(environment);
}
}
就能完成mybatis与hibernate共用一个数据源,这个项目是在hibernate用了c3p0连接池的情况下适用.其它情况可依照此路径完成配置.
4. SqlSessionFactory与SqlSession如何构建?SqlSession什么时候要释放?SqlSessionFactory需要释放吗?
SqlSessionFactory通过IMybatisSessionSource服务来获得, IMybatisSessionSource是单类的,所以在项目中只存在唯一的一个SqlSessionFactory实例,它的关闭我原来打算在IMybatisSessionSource服务销毁时完成的,但是我发现 SqlSessionFactory没有关闭的方法,暂且遗留,如果有懂的同学可以给我点提醒,谢谢.但是实际上IMybatisSessionSource服务实例是不会销毁的,除非把服务器停了,服务器都停了SqlSessionFactory还用得了销毁吗?这样想想销毁也没必要的,看下面欲实现的代码,它在cn.rjzjh.tapestry.mybatis.services.MybatisSessionSourceImpl类中:
@PostInjection
public void listenForShutdown(RegistryShutdownHub hub) {
hub.addRegistryShutdownListener(new Runnable() {
@Override
public void run() {
// sqlSessionFactory. 关闭sqlSessionFactory,但没有对应的方法
}
});
}
SqlSession的创建是在每一个需要SqlSession服务的请求线程中自动创建的,代码如下:
@Scope(ScopeConstants.PERTHREAD)
public static SqlSession buildSqlSession(
SqlSessionFactory SqlSessionFactory,
PerthreadManager perthreadManager) {
final SqlSession retobj = SqlSessionFactory.openSession();
perthreadManager.addThreadCleanupCallback(new Runnable() {
@Override
public void run() {
retobj.close();
// System.out.println("关闭session");
}
});
return retobj;
}
它也会在请求线程被销毁时通过回调线程销毁SqlSession实例.
5. mybatis模块会有默认的配置信息,但具体项目配置信息如何个性化?
mybatis不像hibernate那样有默认的配置为 classpath下的hibernate.cfg.xml文件,所以mybatis模块提供了一个默认的配置文件为classpath下的mybatis.xml文件,如果项目中与此文件名不一致,可以通过配置 值来实现:
configuration.override(MybatisSymbols.CONFIG_FILE_PATH, "aaaaa.xml");
如果有些配置在xml文件中不方便写可以通过编码的方式来配置mybatis,可以参考第3点.
具体使用示便可以参考 tams项目.
tapestry mysql_tapestry与mybatis模块的结合相关推荐
- MyBatis源码骨架分析
源码包分析 MyBatis 源码下载地址:https://github.com/MyBatis/MyBatis-3 MyBatis源码导入过程: 下载MyBatis的源码 检查maven的版本,必须是 ...
- spring service 怎么拿到数据源信息_SSM(SpringMVC + Spring + MyBatis)中各层作用及关系Ⅰ...
1.持久层:DAO层(mapper层)(属于mybatis模块) DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作. DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包 ...
- 权限管理系统3—集成MyBatis框架
1. 导包 <!-- mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId> ...
- Linkis源码目录结构详解
Linkis层级目录结构解释,如果您想详细Linkis,请查看Linkis的相关架构设计文档 ├─assembly├─bin├─conf├─core 核心抽象,里面放有所有的公用模块│ ├─cl ...
- java 截取byte数组_2020年的秋招已经开始了!最新Java面试题大全(文末附参考答案)送给大家...
包含的模块 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring ...
- Maven配置SpringMVC4+Spring4+Mybatis3环境
一.添加依赖 1.新建maven的web项目后,在pom.xml添加依赖信息,对应的groupId .artifactId修改成自己新建的 <project xmlns="http:/ ...
- 一个智能省心的空空java代码生成平台上线了——前后端代码生成
一.前言 今天这篇文章,是向大家推荐一款笔者研发的java web代码生成平台,它能为你节约不必要的开发时间,提升开发效率. 不需要登录,不需要注册!不需要登录,不需要注册!不需要登录,不需要注册! ...
- 2020最新整理JAVA面试题附答案
包含的模块: 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...
- 2021最新整理JAVA常见面试题附答案
包含的模块: 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...
最新文章
- NGINX中的proxy_pass和rewrite
- 【转载】SAP Retail寄售门店关键配置
- inventor应用程序错误---解决方法
- mysql数据库插入图片_向MySql数据库插入与读取图片文件
- 腾讯AI×王者荣耀「绝悟」项目首亮相:KPL秋季决赛击败顶尖战队
- pod资源限制,探针,指定资源
- Springboot直接访问templates中的html
- 面试精选:链表问题集锦
- 如何更sql sever数据库表的所有者
- 计算机启动软件,计算机软件及应用启动会-20210703001237.pptx-原创力文档
- 如何使用Arthas提高日常开发效率?
- Flask插件---flask_script与flask_migrate
- 安装.Net Standard 2.0, Impressive
- 数据的转换(shp sde mdb 之间的转换)
- 火狐无法安装扩展_立即安装4个Firefox扩展
- 2021北京地区高考成绩排名查询,2021年北京理科高考成绩排名一分一段表,北京理科成绩排名查询...
- 考研计算机网络复试题目整理
- Firefox火狐浏览器怎么设置中文 火狐浏览器语言设置方法
- linux系统下使用uTorrent下载ipv6资源
- 程序语言翻译: 2.1在以阶段划分的编译器中,贯穿于编译器工作始终的是( )。2.2 对高级语言程序进行翻译时,源程序中的变量不可能映射到( )
热门文章
- 让IE支持placeholder属性
- 从冯诺伊曼结构看AI
- Docker 的新变化你知道多少?
- 开发随笔——花生壳错误“您的局域网服务器连接失败,请检查局域网IP与端口“
- 用CSS3实现无限循环的无缝滚动
- R语言案例分析:多元数据的基本统计分析
- 2020 DEMO CHINA创新中国春季峰会暨企业创新与企业创投峰会举行
- phpmywind 导航函数详解整理中……
- 单核CPU的并发和并行(操作系统篇)
- System.InvalidOperationException:Each parameter in the deserialization constructor on type ‘‘ must