要接入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模块的结合相关推荐

  1. MyBatis源码骨架分析

    源码包分析 MyBatis 源码下载地址:https://github.com/MyBatis/MyBatis-3 MyBatis源码导入过程: 下载MyBatis的源码 检查maven的版本,必须是 ...

  2. spring service 怎么拿到数据源信息_SSM(SpringMVC + Spring + MyBatis)中各层作用及关系Ⅰ...

    1.持久层:DAO层(mapper层)(属于mybatis模块) DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作. DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包 ...

  3. 权限管理系统3—集成MyBatis框架

    1. 导包 <!-- mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId> ...

  4. Linkis源码目录结构详解

    Linkis层级目录结构解释,如果您想详细Linkis,请查看Linkis的相关架构设计文档 ├─assembly├─bin├─conf├─core    核心抽象,里面放有所有的公用模块│ ├─cl ...

  5. java 截取byte数组_2020年的秋招已经开始了!最新Java面试题大全(文末附参考答案)送给大家...

    包含的模块 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring ...

  6. Maven配置SpringMVC4+Spring4+Mybatis3环境

    一.添加依赖 1.新建maven的web项目后,在pom.xml添加依赖信息,对应的groupId .artifactId修改成自己新建的 <project xmlns="http:/ ...

  7. 一个智能省心的空空java代码生成平台上线了——前后端代码生成

    一.前言 今天这篇文章,是向大家推荐一款笔者研发的java web代码生成平台,它能为你节约不必要的开发时间,提升开发效率. 不需要登录,不需要注册!不需要登录,不需要注册!不需要登录,不需要注册! ...

  8. 2020最新整理JAVA面试题附答案

    包含的模块: 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...

  9. 2021最新整理JAVA常见面试题附答案

    包含的模块: 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...

最新文章

  1. NGINX中的proxy_pass和rewrite
  2. 【转载】SAP Retail寄售门店关键配置
  3. inventor应用程序错误---解决方法
  4. mysql数据库插入图片_向MySql数据库插入与读取图片文件
  5. 腾讯AI×王者荣耀「绝悟」项目首亮相:KPL秋季决赛击败顶尖战队
  6. pod资源限制,探针,指定资源
  7. Springboot直接访问templates中的html
  8. 面试精选:链表问题集锦
  9. 如何更sql sever数据库表的所有者
  10. 计算机启动软件,计算机软件及应用启动会-20210703001237.pptx-原创力文档
  11. 如何使用Arthas提高日常开发效率?
  12. Flask插件---flask_script与flask_migrate
  13. 安装.Net Standard 2.0, Impressive
  14. 数据的转换(shp sde mdb 之间的转换)
  15. 火狐无法安装扩展_立即安装4个Firefox扩展
  16. 2021北京地区高考成绩排名查询,2021年北京理科高考成绩排名一分一段表,北京理科成绩排名查询...
  17. 考研计算机网络复试题目整理
  18. Firefox火狐浏览器怎么设置中文 火狐浏览器语言设置方法
  19. linux系统下使用uTorrent下载ipv6资源
  20. 程序语言翻译: 2.1在以阶段划分的编译器中,贯穿于编译器工作始终的是( )。2.2 对高级语言程序进行翻译时,源程序中的变量不可能映射到( )

热门文章

  1. 让IE支持placeholder属性
  2. 从冯诺伊曼结构看AI
  3. Docker 的新变化你知道多少?
  4. 开发随笔——花生壳错误“您的局域网服务器连接失败,请检查局域网IP与端口“
  5. 用CSS3实现无限循环的无缝滚动
  6. R语言案例分析:多元数据的基本统计分析
  7. 2020 DEMO CHINA创新中国春季峰会暨企业创新与企业创投峰会举行
  8. phpmywind 导航函数详解整理中……
  9. 单核CPU的并发和并行(操作系统篇)
  10. System.InvalidOperationException:Each parameter in the deserialization constructor on type ‘‘ must