MyBatisspring中文帮助文档.docx

上传人:b****5 文档编号:30132701 上传时间:2023-08-05 格式:DOCX 页数:27 大小:32.77KB
下载 相关 举报
MyBatisspring中文帮助文档.docx_第1页
第1页 / 共27页
MyBatisspring中文帮助文档.docx_第2页
第2页 / 共27页
MyBatisspring中文帮助文档.docx_第3页
第3页 / 共27页
MyBatisspring中文帮助文档.docx_第4页
第4页 / 共27页
MyBatisspring中文帮助文档.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

MyBatisspring中文帮助文档.docx

《MyBatisspring中文帮助文档.docx》由会员分享,可在线阅读,更多相关《MyBatisspring中文帮助文档.docx(27页珍藏版)》请在冰豆网上搜索。

MyBatisspring中文帮助文档.docx

MyBatisspring中文帮助文档

简介

WhatisMyBatis-Spring?

MyBatis-Spring会帮助你将MyBatis代码无缝地整合到Spring中。

使用这个类库中的类,Spring将会加载必要的MyBatis工厂类和session类。

这个类库也提供一个简单的方式来注入MyBatis数据映射器和SqlSession到业务层的bean中。

而且它也会处理事务,翻译MyBatis的异常到Spring的DataAccessException异常(数据访问异常,译者注)中。

最终,它并不会依赖于MyBatis,Spring或MyBatis-Spring来构建应用程序代码。

Motivation

正如第二版那样,Spring3.0也仅支持iBatis2。

那么,我们就想将MyBatis3的支持添加到Spring3.0(参考SpringJira中的问题)中。

而不幸的是,Spring3.0的开发在MyBatis3.0官方发布前就结束了。

因为Spring开发团队不想发布一个基于非发布版的MyBatis的整合支持,那么Spring官方的支持就不得不继续等待了。

要在Spring中支持MyBatis,MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人一起来开始将Spring的整合作为MyBatis社区的子项目的时候了。

Requirements

在开始使用MyBatis-Spring的整合之前,很重要的一点是,你要熟悉Spring和MyBatis这两个框架还有和它们有关的术语,本手册中不会提供二者的基本内容,安装和配置教程。

MyBatis-SpringrequiresJava5orhigherandthefollowingMyBatisandSpringversions:

MyBatis-Spring

MyBatis

Spring

1.0.0and1.0.1

3.0.1to3.0.5

3.0.0orhigher

1.0.2

3.0.6

3.0.0orhigher

1.1.0

3.1.0orhigher

3.0.0orhigher

Acknowledgements

特别感谢那些使得本项目成为现实的人们(按字母顺序排序)。

EduardoMacarron,HunterPresnall和PutthibongBoonbong的编码,测试和文档修改工作;AndriusJuozapaitis,GiovanniCuccu,RajNagappan和TomasPinos的贡献;而SimoneTripodi发现了这些人并把他们带入项目之中。

没有他们的努力,这个项目是不可能存在的。

第二章入门

本章将会以简略的步骤告诉你如何安装和创建MyBatis-Spring,并构建一个简单的数据访问事务性的应用程序。

Installation

要使用MyBatis-Spring模块,你只需要包含 mybatis-spring-x.x.x.jar 文件就可以了,并在类路径中加入相关的依赖。

如果你使用Maven,那么在pom.xml中加入下面的代码即可:

org.mybatis

mybatis-spring

x.x.x

QuickSetup

要和Spring一起使用MyBatis,你需要在Spring应用上下文中定义至少两样东西:

一个SqlSessionFactory和至少一个数据映射器类。

在MyBatis-Spring中,SqlSessionFactoryBean是用于创建SqlSessionFactory的。

要配置这个工厂bean,放置下面的代码在Spring的XML配置文件中:

要注意SqlSessionFactory需要一个DataSource(数据源,译者注)。

这可以是任意的DataSource,配置它就和配置其它Spring数据库连接一样。

Assumeyouhaveadatamapperclassdefinedlikethefollowing:

publicinterfaceUserMapper{

@Select("SELECT*FROMusersWHEREid=#{userId}")

UsergetUser(@Param("userId")StringuserId);

}

那么可以使用MapperFactoryBean,像下面这样来把接口加入到Spring中:

要注意,所指定的映射器类必须是一个接口,而不是具体的实现类。

在这个示例中,注解被用来指定SQL语句,但是MyBatis的映射器XML文件也可以用。

一旦配置好,你可以用注入其它任意Spring的bean相同的方式直接注入映射器到你的business/service对象中。

MapperFactoryBean处理SqlSession的创建和关闭它。

如果使用了Spring的事务,那么当事务完成时,session将会提交或回滚。

最终,任何异常都会被翻译成Spring的DataAccessException异常。

调用MyBatis数据方法现在只需一行代码:

publicclassFooServiceImplimplementsFooService{

privateUserMapperuserMapper;

publicvoidsetUserMapper(UserMapperuserMapper){

this.userMapper=userMapper;

}

publicUserdoSomeBusinessStuff(StringuserId){

returnthis.userMapper.getUser(userId);

}

SqlSessionFactoryBean

在基本的MyBatis中,session工厂可以使用SqlSessionFactoryBuilder来创建。

而在MyBatis-Spring中,则使用SqlSessionFactoryBean来替代。

Setup

要创建工厂bean,放置下面的代码在Spring的XML配置文件中:

要注意SqlSessionFactoryBean实现了Spring的FactoryBean接口(请参考Spring文档的3.8章节)这就说明了由Spring最终创建的bean不是SqlSessionFactoryBean本身,。

而是工厂类的getObject()返回的方法的结果。

这种情况下,Spring将会在应用启动时为你创建SqlSessionFactory对象,然后将它以SqlSessionFactory为名来存储。

在Java中,相同的代码是:

SqlSessionFactoryBeanfactoryBean=newSqlSessionFactoryBean();

SqlSessionFactorysessionFactory=factoryBean.getObject();

在一般的MyBatis-Spring用法中,你不需要直接使用SqlSessionFactoryBean或和其对应的SqlSessionFactory。

相反,session工厂将会被注入到MapperFactoryBean或其它扩展了SqlSessionDaoSupport的DAO(DataAccessObject,数据访问对象,译者注)中。

属性

SqlSessionFactory有一个单独的必须属性,就是JDBC的DataSource。

这可以是任意的DataSource,其配置应该和其它Spring数据库连接是一样的。

一个通用的属性是configLocation,它是用来指定MyBatis的XML配置文件路径的。

如果基本的MyBatis配置需要改变,那么这就是一个需要它的地方。

通常这会是的部分。

要注意这个配置文件不需要是一个完整的MyBatis配置。

确切地说,任意环境,数据源和MyBatis的事务管理器都会被忽略。

SqlSessionFactoryBean会创建它自己的,使用这些值定制MyBatis的Environment时是需要的。

如果MyBatis映射器XML文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。

使用这个配置,有两种选择。

第一是手动在MyBatis的XML配置文件中使用部分来指定类路径。

第二是使用工厂bean的mapperLocations属性。

mapperLocations属性使用一个资源位置的list。

这个属性可以用来指定MyBatis的XML映射器文件的位置。

它的值可以包含Ant样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。

比如:

sample/config/mappers/**/*.xml"/>

这会从类路径下加载在sample.config.mappers包和它的子包中所有的MyBatis映射器XML文件。

在容器环境管理事务中,一个可能需要的属性是transactionFactoryClass。

请参考第四章(4.2节)中来查看有关部分。

第四章事务

一个使用MyBatis-Spring的主要原因是它允许MyBatis参与到Spring的事务管理中。

而不是给MyBatis创建一个新的特定的事务管理器,MyBatis-Spring利用了存在于Spring中的DataSourceTransactionManager。

一旦Spring的PlatformTransactionManager配置好了,你可以在Spring中以你通常的做法来配置事务。

@Transactional注解和AOP(Aspect-OrientedProgram,面向切面编程,译者注)样式的配置都是支持的。

在事务处理期间,一个单独的SqlSession对象将会被创建和使用。

当事务完成时,这个session会以合适的方式提交或回滚。

一旦事务创建之后,MyBatis-Spring将会透明的管理事务。

在你的DAO类中就不需要额外的代码了。

标准配置

要开启Spring的事务处理,在Spring的XML配置文件中简单创建一个DataSourceTransactionManager对象:

指定的DataSource一般可以是你使用Spring的任意JDBCDataSource。

这包含了连接池和通过JNDI查找获得的DataSource。

要注意,为事务管理器指定的DataSource必须和用来创建SqlSessionFactoryBean的是同一个数据源,否则事务管理器就无法工作了。

容器管理事务

如果你正使用一个JEE容器而且想让Spring参与到容器管理事务(Containermanagedtransactions,CMT,译者注)中,那么Spring应该使用JtaTransactionManager或它的容器指定的子类来配置。

做这件事情的最方便的方式是用Spring的事务命名空间:

jta-transaction-manager/>

在这种配置中,MyBatis将会和其它由CMT配置的Spring事务资源一样。

Spring会自动使用任意存在的容器事务,在上面附加一个SqlSession。

如果没有开始事务,或者需要基于事务配置,Spring会开启一个新的容器管理事务。

注意,如果你想使用CMT,而不想使用Spring的事务管理,你就必须配置SqlSessionFactoryBean来使用基本的MyBatis的ManagedTransactionFactory而不是其它任意的Spring事务管理器:

编程式事务管理

MyBatis的SqlSession提供指定的方法来处理编程式的事务。

但是当使用MyBatis-Spring时,bean将会使用Spring管理的SqlSession或映射器来注入。

那就是说Spring通常是处理事务的。

你不能在Spring管理的SqlSession上调用SqlSmit(),SqlSession.rollback()或SqlSession.close()方法。

如果这样做了,就会抛出UnsupportedOperationException异常。

注意在使用注入的映射器时不能访问那些方法。

无论JDBC连接是否设置为自动提交,SqlSession数据方法的执行或在Spring事务之外任意调用映射器方法都将会自动被提交。

如果你想编程式地控制事务,请参考Spring手册的10.6节。

这段代码展示了如何手动使用在10.6.2章节描述的PlatformTransactionManager来处理事务。

DefaultTransactionDefinitiondef=newDefaultTransactionDefinition();

def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatusstatus=txManager.getTransaction(def);

try{

userMapper.insertUser(user);

}

catch(MyExceptionex){

txManager.rollback(status);

throwex;

}

txMmit(status);

注意这段代码展示了一个映射器,但它也能和SqlSession一起使用。

第五章使用SqlSession

在MyBatis中,你可以使用SqlSessionFactory来创建SqlSession。

一旦你获得一个session之后,你可以使用它来执行映射语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭session。

使用MyBatis-Spring之后,你不再需要直接使用SqlSessionFactory了,因为你的bean可以通过一个线程安全的SqlSession来注入,基于Spring的事务配置来自动提交,回滚,关闭session。

注意通常不必直接使用SqlSession。

在大多数情况下MapperFactoryBean,将会在bean中注入所需要的映射器。

下一章节中的MapperFactoryBean(6.1节)会解释这个细节。

SqlSessionTemplate

SqlSessionTemplate是MyBatis-Spring的核心。

这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。

SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用。

当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证使用的SqlSession是和当前Spring的事务相关的。

此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。

SqlSessionTemplate实现了SqlSession接口,这就是说,在代码中无需对MyBatis的SqlSession进行替换。

SqlSessionTemplate通常是被用来替代默认的MyBatis实现的DefaultSqlSession,因为模板可以参与到Spring的事务中并且被多个注入的映射器类所使用时也是线程安全的。

相同应用程序中两个类之间的转换可能会引起数据一致性的问题。

SqlSessionTemplate对象可以使用SqlSessionFactory作为构造方法的参数来创建。

这个bean现在可以直接注入到DAObean中。

你需要在bean中添加一个SqlSession属性,就像下面的代码:

publicclassUserDaoImplimplementsUserDao{

privateSqlSessionsqlSession;

publicvoidsetSqlSession(SqlSessionsqlSession){

this.sqlSession=sqlSession;

}

publicUsergetUser(StringuserId){

return(User)sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser",userId);

}

}

如下注入SqlSessionTemplate:

SqlSessionTemplate有一个使用ExecutorType作为参数的构造方法。

这允许你用来创建对象,比如,一个批量SqlSession,但是使用了下列Spring配置的XML文件:

现在你所有的语句可以批量操作了,下面的语句就可以在DAO中使用了。

publicvoidinsertUsers(User[]users){

for(Useruser:

users){

sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser",user);

}

}

注意,如果所需的执行方法和默认的SqlSessionFactory设置不同,这种配置风格才能使用。

对这种形式需要说明的是当这个方法被调用时,不能有一个存在使用不同ExecutorType运行的事务。

也要保证在不同的事务中,使用不同执行器来调用SqlSessionTemplate时,(比如PROPAGATION_REQUIRES_NEW)或完全在一个事务外面。

SqlSessionDaoSupport

SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。

调用getSqlSession()方法你会得到一个SqlSessionTemplate,之后可以用于执行SQL方法,就像下面这样:

publicclassUserDaoImplextendsSqlSessionDaoSupportimplem

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1