Mybatis福音书
继上一次福音书的发布 再续辉煌。java中的交互 使得spring变得尤为关键第一章介绍11整合动机正如第二版, Spring仅支持 iBatis2。那么我们就想将 MyBatis3的支持加入到 Spring3.0(参考 Spring的ira的问题)中。不幸的是, Spring3.0的开发在 My Batis3.0官方发布前就结束了因为 Spring开发团队不想发布一个基于非发行版的 MyBatis的整合支持,那么 Spring官方的支持就不得不等到至少3.1版本了。要在 Spring中支持 My Batis, MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人起来开始进行 Spring和 My Batis整合的时候了。这个小类库就来创建丢失的粘贴 Spring和 MyBtatis这两个流行框架的胶水。减少用户不得不来配置 My Batis和 Spring3.X上下文环境的样板和冗余代码。它还透明地增加了 Spring对 My Batis事务的支持。12要求在开始阅读本手册之前,很重要的一点是你要熟悉 Spring和 MyBatis这两个框架还有和它们有关的术语,本手册不会提供二者的背景内容,基本安装和配置教程。和 MyBatis一样, My Batis-Spring也需要Java5或更高版本13感谢非常感谢那些使得本项目成为现实的人们(按字母顺序排序)。 Eduardo macarron,Hunter presnall和 Putthibong Boonbong的编码工作,测试和文档修改; Andrius Juozapailis,Giovanni cuccu, Raj nagappan和 Tomas pinos的页献;而 Simone Tripod设发现了这些人并把他们带入项目之中。没有他们的努力,这个项目是不可能存在的。第二章入门My Batis-Spring帮助了你的 My Batis代码和 Spring进行无缝整合。使用这个类库中的类,Spring将会为你加载必要的 MyBatis工厂和 session类这个小类库也会提供一个简便的方式向你的 service层bean中注入 My Batis的数据映射器。最终, My Batis-Spring将会控制事务,翻译 My Batis异常到 Spring的 DataAcCEss Exception异常(数据访问异常,译者注)。21安装要使用 My Batis-Spring模块,你只需要包含 mybatis- spring-1.0.0-Rc3.jax文件,并在类路径中加入依赖关系如果你使用 Maven,那么在 pom.xm中加入下面的代码即可K'groupId>org. Itybat issartifactld>myra t-ring< version>1.0.C-RC32,2快速创建要和 Spring一起使用 MyBatis,你需要在 Spring应用上卜文中定义至少两样东西:一Sql SessionFactory和至少一个数据映射器类。在 My Batis-spring中, sqlsess-onFactoryBeam是用丁创建 sqlSessionFactory.的。要配置这个工厂bean,放置下面的代码在 Spring的ⅩML配置文件中f- datas上ean要注意 SalSessiorfactory需要一个 atasctrce.(数据源,泽者注)。这可以是任意的 Datasource,配置亡就和配置其亡 Spring数据库连接一样假设你有一个如下编写的数据映射器类:lic interface UserMapperC Select("SElECT FROM user hERE id=#fuser Id")User getUser(pAram("userId") String userId)i那么可以使用,像下面这样来把接口加入到 Spring中 要注意 SglSessionFactoryBean实现了 Spring的 Factory Bean接口(请参考 Spring文档的38章节部分)。这就说明 Spring最终创建的bean不是 Salse ssion FactoryBean本身完成的,但是工厂类 getobject()返回的方法的结果是基于那个类的。这种情況下, Spring将会在应用启动时为你创建sq1 Session Fac-ory对象,然后将它以sq1 Session Factory为名来存储。在Java中,相同的代码是Sql seasionE'actorysean factor ysean= new Sql Se ssione'actoryBean(isql SessionFactory sessionFactory factoryBean. getobjectoi在普通的 My Batis-Spring用法中,你不需要使用 sqlSessionFactoryBean或直接和其对应的 ScISessionfactoryo而 session工厂将会被注入到 MapperFactoryBean中或其它扩展了 SqlsessionDaoSuppor t的DAO( Data Access object,数据访问对象,译者注)中3,2属性sclScssionFactory有一个必须的属性,就是」DBC的 DataSource。这可以是任意的asource,配置和其它的 Spring数据库连接是一样的。个通用的属性是 configloca=ion,它是用来指定 MyBatis的XML配置文件路径的如果基本的 My Batis配胃需要改变,那么这就是一个需要它的地方。通常这会是< settings>或< ypeAliases>部分。要注意这个配置文件不需要是一个完整的 MyBatis配置。确定地来讲,任意环境,数据源和 My Batis的事务管理器都会被忽略。 SylSessionFactoryBean会创建它自己的,使用这些值定制 My Batis的 nvironment时是需要的。如果 MyBatis映射器XML文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。使用这个配置,有两种选择。第一是手动仁 My Batis的XML配買文件中使用< mappers>部分来指定类路径。第二是使用工厂bean的 mapperlocations属性mappcrlocations属性一个资源位置的ist。这个属性可以用来指定 My Batis的ⅩML映射器文件的位置。它的值可以包含Ant样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。比如: 这会从类路径下加载在 sample. con fig. mappers包和它的子包中所有的 MyBatis映射器ⅩML文件。在容器环境管理事务中,一个可能需要的属性是 transactionFactory class。我们可以在第四章(事务)中来查看有关部分第四章事务个使用 My Batis-Spring的主要原因是它允许 MyBatis参与到 Spring的事务中。而不是给 MyBatis创建一个新的特定的事务管理器, MyBatis-Spring利用了 Spring中的CatascurceTransactior Manager旦 Spring的 PlatformTransaction Manager配置好∫,你可以在 Spring中以你通常的做法来配置事务。ε Transactiona1注解和AOP( Aspect- Oriented Program,面向切面编程,译者注)样式的配置都是支持的。在事务期间,一个单独的 SclSession对象将会被创建和使用。当事务完成时,这个seon会以合适的方式提交或回滚。旦事务创建之后, My Batis-Spring将会透明的管理事务。在你的DAO类中就不需要额外的代码了41标准配置要开启 Spring的事务处理,在你的 Spring的XML配置文件中简单创建一个atascurceTransactior Manager对象:在这种配置中, My Batis将会和其它由CMT配置的 Spring事务资源一样。 Spring会自动使用任意存在的容器事务,在上面附加一个 Saisessionc如果没有开始事务,或者需要基于事务配置, Spring会开启一个新的容器管理事务。注意,如果你想使用CMT,而不想使用 Spring的事务管理,你就必须配置sq1 SessionFactorvBear来使用基本的 My Batis的 MaragedTransaction Factory:Cbe an id="sqlSes sionFactcry" class=org. mybatis spring. Sql SessionFactcryBear"> 第五章使用 Sqlsessiot在 MyBatis中,你叮以使用 SqlSessionfactory来创建 salses。n。一且你获得一个session之后,你可以使用它来执行映射语句,提交或冋滚连接,最后,当不再需要它的时候,你可以关闭 sessions使用 My Batis- Spring之后,你不再需要直接使用 SalsessionFactory了,因为你的bean可以通过一个线程安全的sq1scs0n来注入,基于 Spring的事务配置来自动提交,回滚,关闭 session5.1 SqIsessionSupportsc1 SessionDa SUpport是一个抽象的支持类,用米为你提供 Sylsession。调用getsalsession(方法你会得到一个线程安全的 salSes sion,之后可以用于执行SQL方法,就像下面这样:public class .serMapperDaoTmp extends SqlSessionao Support implements UserMapper ipublic User getUser(string userId) ireturn (User) getsqlSes sion ()sele-tOne(ory. Iyhat is spring sample Imapper. UserMappergetUser", user Id)通常 Mapper FactoryBean是这个类的首选,因为它不需要额外的代码。但是,如果你需要在DAO中做其它非 MyBatis的工作或需要具体的类,那么这个类就很有用了。SalSessicnDaoSuppcrt的配置和 Mapperε ctor vBe:很相似。它需要设置saiSessionFactory或 sqIlSessicn'! emplate属性。这些被明确地设置或由 Spring来自动装配。如果两者都被设置了,那么Sq| Session Factory是被忽略的。假设erImpl是sq1st的子类,它可以在 Spring中进行如下的配置: 5.2 Sqlsession templatesq⊥ SessionTemplate是 MyBatis-Spring的核心。这个类负责管理 MyBatis的 Sqlsession,调用 My Batis的SQL方法,翻译异常。sq1 SessionTemplate是线程安全的,可以被多个DAO所共享使用当调用SQL方法时,包含从映射器 getMapper()方法返回的方法,s1sesi:remp1ate将会保证的sq1 Sessicn使用是和当前 Spring的事务相关的。此外,它管理 session的生命周期,包含必要的关闭,提交或回滚操作SalSessicnTemplate实现了 sqlsession,这就是说要对 MyBatis进行简易替换,邇常sq1 esson. SaISessionfemplate是被用来膂代 Assession的,因为 MyBatis基本的SeCession不能参与到 Spring的事务中而且是线程不安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。并不需要直接创建或使用 SqISessionTemplate。很多情况下, Mapper FactoryBean内部使用一个模板,那就是所有需要的。当需要访问一个sq- SessionT'emplace时,它可以使用sq1 SessionFactory作为构造方法的参数来创建。SalSessionTe mp_ate sessionTerrplate new SqISessicnTemplate(sa_Session Factory相似地,模板可以在 Spring的ⅪML文件中配置。s1 SessianTemplate有一个使用.xecutorType作为参数的构造方法。这允许你用来创建对象,比如,个批量sq1 session,但是使用了下列 Spring配置的XML文件: 现在你所有的话句可以批量操作了,下面的语句就可以在DAO中使用了。public void insertUsers(User [l user s)iSqlsession sa-session= getsql Session ()ifor ser user users)(sqlSession, insert(org. mybatis spring sample mapper. Use mApper. insert.ser user)i注意如果所需的执行方法和默认的 SqlSession Factory设置不同,这种配置风格仅能使用。对这种肜式需要说明的是当这个方法被调用时,不能有一个存在使用不同Executortype运行的事务。也要保证在不同的事务巾,使用不同执行器来调用AssEssion! emplate时,不如 PROPAGATION REQUIRES NEW或完仝在一个事务外面
暂无评论