- 浏览: 685924 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (254)
- java分布式应用架构 (22)
- SSH框架整合 (6)
- java web 学习笔记 (49)
- java 学习笔记 (56)
- struts 2 学习 (6)
- Hibernate学习 (10)
- spring 学习 (2)
- 客户端编程(javascript) (4)
- IDE使用 (13)
- 生命 人生 (6)
- 系统维护 (3)
- 技术篇 (10)
- MySql (2)
- J2ME (1)
- java网络编程 (4)
- 数据库 (5)
- C/C++ (8)
- Oracle (7)
- 软件测试 (0)
- 软件的安装和部署 (0)
- Java快讯 (1)
- swt (1)
- Flex (1)
- 软件工程 (1)
- PostgreSQL (1)
- sql server2000 (2)
- 嵌入式数据库sqlite (5)
- J2EE (1)
- XML (1)
- ibatis3(MyBatis) (6)
- Linux&Unix (1)
- velocity (1)
- 回报社会 (4)
- 软件项目管理 (3)
- android研究 (3)
- C# (2)
- Objective-C (1)
- 音乐 (0)
- webx (1)
- JMS (1)
- maven软件项目管理 (1)
- 分布式服务 (0)
- 云平台 (0)
- 分布式存储 (1)
- 分布式系统架构 (0)
- 移动互联网 (1)
- ZooKeeper (1)
最新评论
-
liyys:
楼主,可不可以发这个项目的源码工程出来分享一下,少了几个类。楼 ...
仿照Hibernate实现一个SQLite的ORM框架 -
liyys:
少了一些类的源码没有粘贴出来
仿照Hibernate实现一个SQLite的ORM框架 -
honglei0412:
我使用的是这种方式获取db文件的目录但是 URL p = Fi ...
使用sqlite注意事项 -
honglei0412:
大侠 能不能说明下DbFile您是怎么做的吗?
使用sqlite注意事项 -
ahack:
刚写完mapping才发现早就有人写好了。仔细一看还都是针对的 ...
仿照Hibernate实现一个SQLite的ORM框架
MyBatis Spring 1.0.0-RC2
参考文档
MyBatis 社区 (MyBatis.org)
Copyright © 2010
本文档的拷贝仅允许您个人使用或分发给其他用户,但是不能收取任何费用,后期的发布无论是印刷版或电子版,也会进行版权声明。
本文档由南磊(nanlei1987@gmail.com)翻译
目录
第一章 介绍 .................................................................................................................... 3
1.1 整合动机 ............................................................................................................ 3
1.2 要求 ................................................................................................................... 3
1.3 感谢 ................................................................................................................... 3
第二章 入门 .................................................................................................................... 4
2.1 安装 ................................................................................................................... 4
2.2 快速创建 ............................................................................................................ 4
第三章 SqlSessionFactoryBean ........................................................................................... 6
3.1 创建 ................................................................................................................... 6
3.2 属性 ................................................................................................................... 6
第四章 事务 .................................................................................................................... 8
4.1 标准配置 ............................................................................................................ 8
4.2 容器管理事务 ..................................................................................................... 8
第五章 MapperFactoryBean .............................................................................................. 9
5.1 创建 ................................................................................................................... 9
5.2 注入映射器 ......................................................................................................... 9
5.3 自动配置 .......................................................................................................... 10
第六章 SqlSessionTemplate和SqlSessionDaoSupport ........................................................ 11
6.1 SqlSessionTemplate ............................................................................................. 11
6.2 SqlSessionDaoSupport.......................................................................................... 12
第七章 使用MyBatis API................................................................................................. 13
第八章 示例代码 ........................................................................................................... 14
第一章 介绍
1.1 整合动机
正如第二版,Spring仅支持iBatis2。那么我们就想将MyBatis3的支持加入到Spring3.0(参考Spring的Jira的问题)中。不幸的是,Spring 3.0的开发在MyBatis 3.0官方发布前就结束了。因为Spring开发团队不想发布一个基于非发行版的MyBatis的整合支持,那么Spring官方的支持就不得不等到至少3.1版本了。要在Spring中支持MyBatis,MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人一起来开始进行Spring和MyBatis整合的时候了。
这个小类库就来创建丢失的粘贴Spring和MyBtatis这两个流行框架的胶水。减少用户不得不来配置MyBatis和Spring 3.X上下文环境的样板和冗余代码。
1.2 要求
在开始阅读本手册之前,很重要的一点是你要熟悉Spring和MyBatis这两个框架还有和它们有关的术语,否则可能会很难理解手册中的表述内容。
和MyBatis一样,MyBatis-Spring也需要Java 5或更高版本。
1.3 感谢
非常感谢那些使得本项目成为现实的人们。Hunter Presnall和Putthibong Boonbong编写了所有的硬编码,Eduardo Macarron完成了MapperFactoryBean和文档,Andrius Juozapaitis, Giovanni Cuccu和Raj Nagappan的贡献和支持,而Simone Tripodi发现了这些人并把他们带入项目之中。没有他们的努力,这个项目是不可能存在的。
第二章 入门
MyBatis-Spring帮助了你的MyBatis代码和Spring进行无缝整合。使用这个类库中的类,Spring将会为你加载必要的MyBatis工厂和session类。这个小类库也会提供一个简便的方式向你的service层bean中注入MyBatis的数据映射器。最终,MyBatis-Spring将会控制事务,翻译MyBatis异常到Spring的DataAccessException(数据访问异常,译者注)。
2.1 安装
要使用MyBatis-Spring模块,你只需要包含mybatis-spring-1.0.0-RC2.jar文件,并在类路径中加入依赖关系。
如果你使用Maven,那么在pom.xml中加入下面的代码即可:
2.2 快速创建
要和Spring一起使用MyBatis,你需要在Spring应用上下文中定义至少两样东西:一个SqlSessionFactory和至少一个数据映射器类。
在MyBatis-Spring中,SqlSessionFactoryBean是用于创建SqlSessionFactory.的。要配置这个工厂bean,放置下面的代码在Spring的XML配置文件中:
要注意SqlSessionFactory需要一个DataSource.(数据源,译者注)。这可以是任意的DataSource.,配置它就和配置其它Spring数据库连接一样。
假设你有一个如下编写的数据映射器类:
那么可以使用,像下面这样来把接口加入到Spring中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.0.0-RC2</version>
</dependency>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{userId}")
User getUser(@Param("userId") String userId);
}
<bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
要注意指定的映射器类必须是一个接口,而不是具体的实现类。在这个示例中,注解被用来指定SQL语句,但是MyBatis的映射器XML文件也可以用。
一旦配置好,你可以以注入其它任意Spring的bean相同的方式直接注入映射器到你的business/service对象中。MapperFactoryBean控制SqlSession创建和关闭它。如果使用了Spring的事务,那么当事务完成时,session将会提交或回滚。最终,任何异常都会被翻译成Spring的DataAccessException异常。
调用MyBatis数据方法下载只需一行代码:
User user = userMapper.getUser(userId);
第三章 SqlSessionFactoryBean
在基本的MyBatis中,session工厂可以使用SqlSessionFactoryBuilder.来创建。在MyBatis-Spring中,使用了SqlSessionFactoryBean来替代。
3.1 创建
要创建工厂bean,放置下面的代码在Spring的XML配置文件中:
要注意SqlSessionFactoryBean实现了Spring的FactoryBean接口(请参考Spring文档的3.8章节部分)。这就说明bean最终的创建不是SqlSessionFactoryBean本身完成的,但是工厂类getObject()返回的方法的结果是基于那个类的。这种情况下,Spring将会在应用启动时为你创建SqlSessionFactory对象,然后将它以SqlSessionFactory为名来存储。在Java中,相同的代码是:
在普通的MyBatis-Spring使用中,你不需要使用SqlSessionFactoryBean或直接和其对应的SqlSessionFactory。而session工厂将会被注入到MapperFactoryBean中或其它扩展了SqlSessionDaoSupport的DAO(Data Access Object,数据访问对象,译者注)中。
3.2 属性
SqlSessionFactory有一个必须的属性,就是JDBC的DataSource。这可以是任意的DataSource,配置和其它Spring数据库连接是一样的。
一个通用的属性是configLocation,它是用来指定MyBatis的XML配置文件路径的。如果基本的MyBatis配置需要改变,那么这就是一个需要它的地方。通常这会是<settings>或<typeAliases>部分。
要注意这个配置文件不需要是一个完整的MyBatis配置。确定地来讲,任意环境,数据源和MyBatis的事务管理器都会被忽略。SqlSessionFactoryBean会创建它自己的,使用这些值定制MyBatis的Environment时是需要的。
如果MyBatis映射器XML文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。使用这个配置,有两种选择。第一个是手动在MyBatis的XML配置文件中使用<mappers>部分来指定类路径。第二个是使用工厂bean的mapperLocations属性。
mapperLocations属性一个资源位置的list。这个属性可以用来指定MyBatis的XML映射器文件的位置。它的值可以包含Ant样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。比如:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
SqlSessionFactory sessionFactory = factoryBean.getObject();
这会从类路径下加载在sample.config.mappers包和它的子包中所有的MyBatis映射器XML文件。
在容器环境管理事务中,一个可能需要的属性是transactionFactoryClass。我们可以在第四章(事务)中来查看有关部分。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>
第四章 事务
一个使用MyBatis-Spring的主要原因是它允许MyBatis参与到Spring的事务中。而不是给MyBatis创建一个新的特定的事务管理器,MyBatis-Spring利用了Spring中的DataSourceTransactionManager。
一旦Spring的PlatformTransactionManager配置好了,你可以在Spring中以你通常的做法来配置事务。@Transactional注解和AOP(Aspect-Oriented Program,面向切面编程,译者注)样式的配置都是支持的。在事务期间,一个单独的SqlSession对象将会被创建和使用。当事务完成时,这个session会以合适的方式提交或回滚。
一旦事务创建之后,MyBatis-Spring将会透明的管理事务。在你的DAO类中就不需要额外的代码了。
4.1 标准配置
要开启Spring的事务处理,在你的Spring的XML配置文件中简单创建一个DataSourceTransactionManager对象:
指定的DataSource可以是你通常使用Spring的任意JDBC DataSource。这包含了连接池和通过JNDI查找获得的DataSource。
要注意,为事务管理器指定的DataSource必须和用来创建SqlSessionFactoryBean的是同一个数据源,否则事务管理器就无法工作了。
4.2 容器管理事务
如果你正使用一个JEE容器而且想让Spring参与到容器管理事务(Container managed transactions,CMT,译者注)中,那么Spring应该使用JtaTransactionManager或它的容器指定的子类来配置。做这件事情的最方便的方式是用Spring的事务命名空间:
在这种配置中,MyBatis将会和其它由CMT配置的Spring事务资源一样。Spring会自动使用任意存在的容器事务,在上面附加一个SqlSession。如果没有开始事务,或者需要基于事务配置,Spring会开启一个新的容器管理事务。
注意,如果你想使用CMT,而不想使用Spring的事务管理,你就必须配置SqlSessionFactoryBean来使用基本的MyBatis的ManagedTransactionFactory::
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:jta-transaction-manager />
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="transactionFactoryClass"
value="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</bean>
第五章 MapperFactoryBean
为了代替手工编写数据访问对象(DAO)的代码,MyBatis-Spring提供了一个动态代理的实现:MapperFactoryBean.。这个类可以让你直接注入数据映射器接口到你的service层bean中。当使用映射器时,你仅仅如调用你的DAO一样调用它们就可以了,但是你不需要编写任何DAO实现的代码,因为MyBatis-Spring将会为你创建代理。
使用注入的映射器代码,在MyBatis,Spring或MyBatis-Spring上面不会有直接的依赖。MapperFactoryBean创建的代理控制开放和关闭session,翻译任意的DataAccessException异常到Spring的异常中。此外,如果需要或参与到一个已经存在对象中,代理将会开启一个新的Spring事务。
5.1 创建
数据映射器接口可以按照如下做法加入到Spring中:
MapperFactoryBean创建的代理类实现了UserMapper接口,并且注入到应用程序中。因为代理创建在运行时环境中(Runtime,译者注),那么指定的映射器必须是一个接口,而不是一个实现类。
如果UserMapper有一个对应的MyBatis的XML映射器文件,如果XML文件在类路径的位置和映射器类相同时,它会被MapperFactoryBean自动解析。没有必要在MyBatis配置文件中去指定映射器,除非映射器的XML文件在不同的类路径下。可以参考SqlSessionFactoryBean的configLocation属性来获取更多信息。
注意,当MapperFactoryBean需要SqlSessionFactory或SqlSessionTemplate时。这些可以通过各自的SqlSessionFactory或SqlSessionTemplate属性来设置,或者可以由Spring来自动装配。如果来年哥哥属性都设置了,那么SqlSessionFactory就会被忽略,因为SqlSessionTemplate是需要有一个session工厂的设置;那个工厂会由MapperFactoryBean.来使用。
5.2 注入映射器
你可以在business/service对象中直接注入映射器,和注入Spring的bean是一样的:
这个bean可以直接用在应用程序的逻辑中:
<bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="fooService" class="org.mybatis.spring.sample.mapper.FooServiceImpl">
<property name="userMapper" ref="userMapper" />
</bean>
注意,在这段代码中没有SqlSession或MyBatis的引用。也不需要去创建,打开或关闭session。如果使用了Spring的事务,那么当事务完成时,session将会自动被提交或者回滚。
5.3 自动配置
没有必要在Spring的XML配置文件中注册所有的映射器。相反,你可以使用一个MapperScannerPostProcessor,它将会查找类路径下的映射器并自动创建它们。
要创建MapperScannerPostProcessor,可以在Spring的配置中添加如下代码:
basePackage属性是让你为映射器接口文件设置基本的包路径。你可以使用分号或逗号作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。
注意,没有必要去指定SqlSessionFactory或SqlSessionTemplate,因为MapperScannerPostProcessor将会创建MapperFactoryBean,之后自动装配。但是,如果你使用了一个以上的DataSource,那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactoryBeanName或sqlSessionTemplateBeanName属性来设置正确的bean名称来使用。这就是它是怎么配置的,注意bean的名称是必须的,而不是bean的引用,因此value属性要代替通常的ref:属性:
要开启MapperScannerPostProcessor来指定你的映射器类,它们必须由@Mapper来注解。
注解也让你指定了bean的名称。如果你不提供名字,那么它就以类名来注册。
public class FooService {
private UserMapper userMapper;
...
public User doSomeBusinessStuff(String userId) {
return this.userMapper.getUser(userId);
}
}
<bean class="org.mybatis.spring.annotation.MapperScannerPostProcessor">
<property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
@Mapper("userMapper")
public interface UserMapper {
User getUser(String userId);
}
第六章 SqlSessionTemplate和SqlSessionDaoSupport
6.1 SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。它的作用就是无需替换SqlSession。SqlSessionTemplate通常应该用来代替SqlSession,因为基本的MyBatis的session不能参与到Spring的事务中。同一个应用中两个类之间的转换可以引起数据完整性的问题。
当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证的SqlSession使用是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。
并不需要直接创建或使用SqlSessionTemplate。很多情况下,MapperFactoryBean内部使用一个模板,那就是所有需要的。当需要访问一个SqlSessionTemplate时,它可以使用SqlSessionFactory作为构造方法的参数来创建。
相似地,模板可以在Spring的XML文件中配置。
此外,SqlSession中和SQL相关的所有方法,SqlSessionTemplate会提供一个通用的execute方法。这个方法需要定制的SqlSessionCallback作为参数,所以你可以在一个SqlSession中执行多个SQL方法:
注意execute方法可以接收ExecutorType参数。如果想要的执行方法和SqlSessionFactory的默认设置不同,那么这个可以用了。使用ExecutorType.BATCH对批量SQL查询的性能非常有用。对于这种方法的形式仅有一个警告,那就是当这个方法被调用时,不能有一个存在的事务和不同的ExecutorType一起运行。要么在独立的事务中使用PROPAGATION_REQUIRES_NEW或完全不再一个事务中,确保调用execute(SqlSessionCallback, ExecutorType)来运行,
SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
public void insertUser(final User user) {
getSqlSessionTemplate().execute(new SqlSessionCallback<Object>() {
public Object doInSqlSession(SqlSession sqlSession) {
sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser", user);
sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertAccount", user.getAccount());
return null;
}
});
}
6.2 SqlSessionDaoSupport
SqlSessionDaoSupport是一个抽象的支持类,用来为你构建SqlSessionTemplate。调用getSqlSessionTemplate()方法会给你模板的访问,之后可以用于执行SQL方法,就像下面这样:
通常MapperFactoryBean是这个类的首选,因为它不需要额外的代码。但是,如果你需要在DAO中做其它非MyBatis的工作或需要具体的类,那么这个类就很有用了。
SqlSessionDaoSupport的配置和MapperFactoryBean很相似。它需要设置sqlSessionFactory或sqlSessionTemplate属性。这些被明确地设置或由Spring来自动装配。如果两者都被设置了,那么SqlSessionFactory是被忽略的。
假设UserMapperImpl是SqlSessionDaoSupport的子类,它可以在Spring中进行如下的配置:
public class UserMapperDaoImpl extends SqlSessionDaoSupport implements UserMapper {
public User getUser(String userId) {
return (User) getSqlSessionTemplate().selectOne("sample.UserMapper.getUser", userId);
}
}
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
第七章 使用MyBatis API
使用MyBatis-Spring,你可以继续直接使用MyBatis的API。仅仅在Spring中使用SqlSessionFactoryBean来创建一个SqlSessionFactory,之后在你的代码中使用这个工厂。这种情况下你就不需要在代码中编写任何MyBatis-Spring的依赖了;仅在DAO中使用注入的SqlSessionFactory就行了。
注意这种用法不会参与到任何Spring的事务中。更进一步来说,如果SqlSession使用了DataSource,它也被Spring的事务管理器使用了,还有当前过程中的事务,那么这段代码就会抛出异常。出于这个原因,如果你必须使用这种样式的代码,你就不应该使用Spring的事务数据库连接。
public class UserMapperSqlSessionImpl implements UserMapper {
// SqlSessionFactory会通常由SqlSessionDaoSupport来设置
private SqlSessionFactory sqlSessionFactory;
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public User getUser(String userId) {
// 注意标准的MyBatis API用法 – 手动打开和关闭session
SqlSession session = sqlSessionFactory.openSession();
try {
return (User) session.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
} finally {
session.close();
}
}
}
第八章 示例代码
你可以从Google Code的MyBatis资源库中检出示例代码。
Java代码
配置文件
要运行示例,仅在JUnit 4中执行MyBatisSampleTest.java即可。
这个示例代码有一个service接口,FooService,它作为一个被事务管理的service。当它的任意方法被调用时就开启和结束一个事务。
要注意,事务特性是由@Transactional属性配置的。这不是必须的;任何其它由Spring提供的方法都可以用来标定你的事务。
FooServiceImpl.java是FooService接口的实现,它仅仅使用了Spring启动时注入的DAO/mapper。要注意代码不需要调用任何Spring或MyBatis的方法。
在这个手册中,数据库访问层已经实现了使用四种不同技术来解释:使用MapperFactoryBean(可以直接或通过MapperScannerPostProcessor),和使用了基本MyBatis API的DAO实现一起使用SqlSessionDaoSupport。可以参考applicationContext.xml来获取完整的Spring配置信息。
@Transactional
public interface FooService {
User doSomeBusinessStuff(String userId);
}
public class FooServiceImpl implements FooService {
private UserMapper userMapper;
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User doSomeBusinessStuff(String userId) {
return this.userMapper.getUser(userId);
}
}
在这个手册中,数据库访问层已经实现了使用四种不同技术来解释:使用MapperFactoryBean(可以直接或通过MapperScannerPostProcessor),和使用了基本MyBatis API的DAO实现一起使用SqlSessionDaoSupport。可以参考applicationContext.xml来获取完整的Spring配置信息
参考文档
MyBatis 社区 (MyBatis.org)
Copyright © 2010
本文档的拷贝仅允许您个人使用或分发给其他用户,但是不能收取任何费用,后期的发布无论是印刷版或电子版,也会进行版权声明。
本文档由南磊(nanlei1987@gmail.com)翻译
目录
第一章 介绍 .................................................................................................................... 3
1.1 整合动机 ............................................................................................................ 3
1.2 要求 ................................................................................................................... 3
1.3 感谢 ................................................................................................................... 3
第二章 入门 .................................................................................................................... 4
2.1 安装 ................................................................................................................... 4
2.2 快速创建 ............................................................................................................ 4
第三章 SqlSessionFactoryBean ........................................................................................... 6
3.1 创建 ................................................................................................................... 6
3.2 属性 ................................................................................................................... 6
第四章 事务 .................................................................................................................... 8
4.1 标准配置 ............................................................................................................ 8
4.2 容器管理事务 ..................................................................................................... 8
第五章 MapperFactoryBean .............................................................................................. 9
5.1 创建 ................................................................................................................... 9
5.2 注入映射器 ......................................................................................................... 9
5.3 自动配置 .......................................................................................................... 10
第六章 SqlSessionTemplate和SqlSessionDaoSupport ........................................................ 11
6.1 SqlSessionTemplate ............................................................................................. 11
6.2 SqlSessionDaoSupport.......................................................................................... 12
第七章 使用MyBatis API................................................................................................. 13
第八章 示例代码 ........................................................................................................... 14
第一章 介绍
1.1 整合动机
正如第二版,Spring仅支持iBatis2。那么我们就想将MyBatis3的支持加入到Spring3.0(参考Spring的Jira的问题)中。不幸的是,Spring 3.0的开发在MyBatis 3.0官方发布前就结束了。因为Spring开发团队不想发布一个基于非发行版的MyBatis的整合支持,那么Spring官方的支持就不得不等到至少3.1版本了。要在Spring中支持MyBatis,MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人一起来开始进行Spring和MyBatis整合的时候了。
这个小类库就来创建丢失的粘贴Spring和MyBtatis这两个流行框架的胶水。减少用户不得不来配置MyBatis和Spring 3.X上下文环境的样板和冗余代码。
1.2 要求
在开始阅读本手册之前,很重要的一点是你要熟悉Spring和MyBatis这两个框架还有和它们有关的术语,否则可能会很难理解手册中的表述内容。
和MyBatis一样,MyBatis-Spring也需要Java 5或更高版本。
1.3 感谢
非常感谢那些使得本项目成为现实的人们。Hunter Presnall和Putthibong Boonbong编写了所有的硬编码,Eduardo Macarron完成了MapperFactoryBean和文档,Andrius Juozapaitis, Giovanni Cuccu和Raj Nagappan的贡献和支持,而Simone Tripodi发现了这些人并把他们带入项目之中。没有他们的努力,这个项目是不可能存在的。
第二章 入门
MyBatis-Spring帮助了你的MyBatis代码和Spring进行无缝整合。使用这个类库中的类,Spring将会为你加载必要的MyBatis工厂和session类。这个小类库也会提供一个简便的方式向你的service层bean中注入MyBatis的数据映射器。最终,MyBatis-Spring将会控制事务,翻译MyBatis异常到Spring的DataAccessException(数据访问异常,译者注)。
2.1 安装
要使用MyBatis-Spring模块,你只需要包含mybatis-spring-1.0.0-RC2.jar文件,并在类路径中加入依赖关系。
如果你使用Maven,那么在pom.xml中加入下面的代码即可:
2.2 快速创建
要和Spring一起使用MyBatis,你需要在Spring应用上下文中定义至少两样东西:一个SqlSessionFactory和至少一个数据映射器类。
在MyBatis-Spring中,SqlSessionFactoryBean是用于创建SqlSessionFactory.的。要配置这个工厂bean,放置下面的代码在Spring的XML配置文件中:
要注意SqlSessionFactory需要一个DataSource.(数据源,译者注)。这可以是任意的DataSource.,配置它就和配置其它Spring数据库连接一样。
假设你有一个如下编写的数据映射器类:
那么可以使用,像下面这样来把接口加入到Spring中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.0.0-RC2</version>
</dependency>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{userId}")
User getUser(@Param("userId") String userId);
}
<bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
要注意指定的映射器类必须是一个接口,而不是具体的实现类。在这个示例中,注解被用来指定SQL语句,但是MyBatis的映射器XML文件也可以用。
一旦配置好,你可以以注入其它任意Spring的bean相同的方式直接注入映射器到你的business/service对象中。MapperFactoryBean控制SqlSession创建和关闭它。如果使用了Spring的事务,那么当事务完成时,session将会提交或回滚。最终,任何异常都会被翻译成Spring的DataAccessException异常。
调用MyBatis数据方法下载只需一行代码:
User user = userMapper.getUser(userId);
第三章 SqlSessionFactoryBean
在基本的MyBatis中,session工厂可以使用SqlSessionFactoryBuilder.来创建。在MyBatis-Spring中,使用了SqlSessionFactoryBean来替代。
3.1 创建
要创建工厂bean,放置下面的代码在Spring的XML配置文件中:
要注意SqlSessionFactoryBean实现了Spring的FactoryBean接口(请参考Spring文档的3.8章节部分)。这就说明bean最终的创建不是SqlSessionFactoryBean本身完成的,但是工厂类getObject()返回的方法的结果是基于那个类的。这种情况下,Spring将会在应用启动时为你创建SqlSessionFactory对象,然后将它以SqlSessionFactory为名来存储。在Java中,相同的代码是:
在普通的MyBatis-Spring使用中,你不需要使用SqlSessionFactoryBean或直接和其对应的SqlSessionFactory。而session工厂将会被注入到MapperFactoryBean中或其它扩展了SqlSessionDaoSupport的DAO(Data Access Object,数据访问对象,译者注)中。
3.2 属性
SqlSessionFactory有一个必须的属性,就是JDBC的DataSource。这可以是任意的DataSource,配置和其它Spring数据库连接是一样的。
一个通用的属性是configLocation,它是用来指定MyBatis的XML配置文件路径的。如果基本的MyBatis配置需要改变,那么这就是一个需要它的地方。通常这会是<settings>或<typeAliases>部分。
要注意这个配置文件不需要是一个完整的MyBatis配置。确定地来讲,任意环境,数据源和MyBatis的事务管理器都会被忽略。SqlSessionFactoryBean会创建它自己的,使用这些值定制MyBatis的Environment时是需要的。
如果MyBatis映射器XML文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。使用这个配置,有两种选择。第一个是手动在MyBatis的XML配置文件中使用<mappers>部分来指定类路径。第二个是使用工厂bean的mapperLocations属性。
mapperLocations属性一个资源位置的list。这个属性可以用来指定MyBatis的XML映射器文件的位置。它的值可以包含Ant样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。比如:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
SqlSessionFactory sessionFactory = factoryBean.getObject();
这会从类路径下加载在sample.config.mappers包和它的子包中所有的MyBatis映射器XML文件。
在容器环境管理事务中,一个可能需要的属性是transactionFactoryClass。我们可以在第四章(事务)中来查看有关部分。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>
第四章 事务
一个使用MyBatis-Spring的主要原因是它允许MyBatis参与到Spring的事务中。而不是给MyBatis创建一个新的特定的事务管理器,MyBatis-Spring利用了Spring中的DataSourceTransactionManager。
一旦Spring的PlatformTransactionManager配置好了,你可以在Spring中以你通常的做法来配置事务。@Transactional注解和AOP(Aspect-Oriented Program,面向切面编程,译者注)样式的配置都是支持的。在事务期间,一个单独的SqlSession对象将会被创建和使用。当事务完成时,这个session会以合适的方式提交或回滚。
一旦事务创建之后,MyBatis-Spring将会透明的管理事务。在你的DAO类中就不需要额外的代码了。
4.1 标准配置
要开启Spring的事务处理,在你的Spring的XML配置文件中简单创建一个DataSourceTransactionManager对象:
指定的DataSource可以是你通常使用Spring的任意JDBC DataSource。这包含了连接池和通过JNDI查找获得的DataSource。
要注意,为事务管理器指定的DataSource必须和用来创建SqlSessionFactoryBean的是同一个数据源,否则事务管理器就无法工作了。
4.2 容器管理事务
如果你正使用一个JEE容器而且想让Spring参与到容器管理事务(Container managed transactions,CMT,译者注)中,那么Spring应该使用JtaTransactionManager或它的容器指定的子类来配置。做这件事情的最方便的方式是用Spring的事务命名空间:
在这种配置中,MyBatis将会和其它由CMT配置的Spring事务资源一样。Spring会自动使用任意存在的容器事务,在上面附加一个SqlSession。如果没有开始事务,或者需要基于事务配置,Spring会开启一个新的容器管理事务。
注意,如果你想使用CMT,而不想使用Spring的事务管理,你就必须配置SqlSessionFactoryBean来使用基本的MyBatis的ManagedTransactionFactory::
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:jta-transaction-manager />
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="transactionFactoryClass"
value="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</bean>
第五章 MapperFactoryBean
为了代替手工编写数据访问对象(DAO)的代码,MyBatis-Spring提供了一个动态代理的实现:MapperFactoryBean.。这个类可以让你直接注入数据映射器接口到你的service层bean中。当使用映射器时,你仅仅如调用你的DAO一样调用它们就可以了,但是你不需要编写任何DAO实现的代码,因为MyBatis-Spring将会为你创建代理。
使用注入的映射器代码,在MyBatis,Spring或MyBatis-Spring上面不会有直接的依赖。MapperFactoryBean创建的代理控制开放和关闭session,翻译任意的DataAccessException异常到Spring的异常中。此外,如果需要或参与到一个已经存在对象中,代理将会开启一个新的Spring事务。
5.1 创建
数据映射器接口可以按照如下做法加入到Spring中:
MapperFactoryBean创建的代理类实现了UserMapper接口,并且注入到应用程序中。因为代理创建在运行时环境中(Runtime,译者注),那么指定的映射器必须是一个接口,而不是一个实现类。
如果UserMapper有一个对应的MyBatis的XML映射器文件,如果XML文件在类路径的位置和映射器类相同时,它会被MapperFactoryBean自动解析。没有必要在MyBatis配置文件中去指定映射器,除非映射器的XML文件在不同的类路径下。可以参考SqlSessionFactoryBean的configLocation属性来获取更多信息。
注意,当MapperFactoryBean需要SqlSessionFactory或SqlSessionTemplate时。这些可以通过各自的SqlSessionFactory或SqlSessionTemplate属性来设置,或者可以由Spring来自动装配。如果来年哥哥属性都设置了,那么SqlSessionFactory就会被忽略,因为SqlSessionTemplate是需要有一个session工厂的设置;那个工厂会由MapperFactoryBean.来使用。
5.2 注入映射器
你可以在business/service对象中直接注入映射器,和注入Spring的bean是一样的:
这个bean可以直接用在应用程序的逻辑中:
<bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="fooService" class="org.mybatis.spring.sample.mapper.FooServiceImpl">
<property name="userMapper" ref="userMapper" />
</bean>
注意,在这段代码中没有SqlSession或MyBatis的引用。也不需要去创建,打开或关闭session。如果使用了Spring的事务,那么当事务完成时,session将会自动被提交或者回滚。
5.3 自动配置
没有必要在Spring的XML配置文件中注册所有的映射器。相反,你可以使用一个MapperScannerPostProcessor,它将会查找类路径下的映射器并自动创建它们。
要创建MapperScannerPostProcessor,可以在Spring的配置中添加如下代码:
basePackage属性是让你为映射器接口文件设置基本的包路径。你可以使用分号或逗号作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。
注意,没有必要去指定SqlSessionFactory或SqlSessionTemplate,因为MapperScannerPostProcessor将会创建MapperFactoryBean,之后自动装配。但是,如果你使用了一个以上的DataSource,那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactoryBeanName或sqlSessionTemplateBeanName属性来设置正确的bean名称来使用。这就是它是怎么配置的,注意bean的名称是必须的,而不是bean的引用,因此value属性要代替通常的ref:属性:
要开启MapperScannerPostProcessor来指定你的映射器类,它们必须由@Mapper来注解。
注解也让你指定了bean的名称。如果你不提供名字,那么它就以类名来注册。
public class FooService {
private UserMapper userMapper;
...
public User doSomeBusinessStuff(String userId) {
return this.userMapper.getUser(userId);
}
}
<bean class="org.mybatis.spring.annotation.MapperScannerPostProcessor">
<property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
@Mapper("userMapper")
public interface UserMapper {
User getUser(String userId);
}
第六章 SqlSessionTemplate和SqlSessionDaoSupport
6.1 SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。它的作用就是无需替换SqlSession。SqlSessionTemplate通常应该用来代替SqlSession,因为基本的MyBatis的session不能参与到Spring的事务中。同一个应用中两个类之间的转换可以引起数据完整性的问题。
当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证的SqlSession使用是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。
并不需要直接创建或使用SqlSessionTemplate。很多情况下,MapperFactoryBean内部使用一个模板,那就是所有需要的。当需要访问一个SqlSessionTemplate时,它可以使用SqlSessionFactory作为构造方法的参数来创建。
相似地,模板可以在Spring的XML文件中配置。
此外,SqlSession中和SQL相关的所有方法,SqlSessionTemplate会提供一个通用的execute方法。这个方法需要定制的SqlSessionCallback作为参数,所以你可以在一个SqlSession中执行多个SQL方法:
注意execute方法可以接收ExecutorType参数。如果想要的执行方法和SqlSessionFactory的默认设置不同,那么这个可以用了。使用ExecutorType.BATCH对批量SQL查询的性能非常有用。对于这种方法的形式仅有一个警告,那就是当这个方法被调用时,不能有一个存在的事务和不同的ExecutorType一起运行。要么在独立的事务中使用PROPAGATION_REQUIRES_NEW或完全不再一个事务中,确保调用execute(SqlSessionCallback, ExecutorType)来运行,
SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
public void insertUser(final User user) {
getSqlSessionTemplate().execute(new SqlSessionCallback<Object>() {
public Object doInSqlSession(SqlSession sqlSession) {
sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertUser", user);
sqlSession.insert("org.mybatis.spring.sample.mapper.UserMapper.insertAccount", user.getAccount());
return null;
}
});
}
6.2 SqlSessionDaoSupport
SqlSessionDaoSupport是一个抽象的支持类,用来为你构建SqlSessionTemplate。调用getSqlSessionTemplate()方法会给你模板的访问,之后可以用于执行SQL方法,就像下面这样:
通常MapperFactoryBean是这个类的首选,因为它不需要额外的代码。但是,如果你需要在DAO中做其它非MyBatis的工作或需要具体的类,那么这个类就很有用了。
SqlSessionDaoSupport的配置和MapperFactoryBean很相似。它需要设置sqlSessionFactory或sqlSessionTemplate属性。这些被明确地设置或由Spring来自动装配。如果两者都被设置了,那么SqlSessionFactory是被忽略的。
假设UserMapperImpl是SqlSessionDaoSupport的子类,它可以在Spring中进行如下的配置:
public class UserMapperDaoImpl extends SqlSessionDaoSupport implements UserMapper {
public User getUser(String userId) {
return (User) getSqlSessionTemplate().selectOne("sample.UserMapper.getUser", userId);
}
}
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
第七章 使用MyBatis API
使用MyBatis-Spring,你可以继续直接使用MyBatis的API。仅仅在Spring中使用SqlSessionFactoryBean来创建一个SqlSessionFactory,之后在你的代码中使用这个工厂。这种情况下你就不需要在代码中编写任何MyBatis-Spring的依赖了;仅在DAO中使用注入的SqlSessionFactory就行了。
注意这种用法不会参与到任何Spring的事务中。更进一步来说,如果SqlSession使用了DataSource,它也被Spring的事务管理器使用了,还有当前过程中的事务,那么这段代码就会抛出异常。出于这个原因,如果你必须使用这种样式的代码,你就不应该使用Spring的事务数据库连接。
public class UserMapperSqlSessionImpl implements UserMapper {
// SqlSessionFactory会通常由SqlSessionDaoSupport来设置
private SqlSessionFactory sqlSessionFactory;
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public User getUser(String userId) {
// 注意标准的MyBatis API用法 – 手动打开和关闭session
SqlSession session = sqlSessionFactory.openSession();
try {
return (User) session.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
} finally {
session.close();
}
}
}
第八章 示例代码
你可以从Google Code的MyBatis资源库中检出示例代码。
Java代码
配置文件
要运行示例,仅在JUnit 4中执行MyBatisSampleTest.java即可。
这个示例代码有一个service接口,FooService,它作为一个被事务管理的service。当它的任意方法被调用时就开启和结束一个事务。
要注意,事务特性是由@Transactional属性配置的。这不是必须的;任何其它由Spring提供的方法都可以用来标定你的事务。
FooServiceImpl.java是FooService接口的实现,它仅仅使用了Spring启动时注入的DAO/mapper。要注意代码不需要调用任何Spring或MyBatis的方法。
在这个手册中,数据库访问层已经实现了使用四种不同技术来解释:使用MapperFactoryBean(可以直接或通过MapperScannerPostProcessor),和使用了基本MyBatis API的DAO实现一起使用SqlSessionDaoSupport。可以参考applicationContext.xml来获取完整的Spring配置信息。
@Transactional
public interface FooService {
User doSomeBusinessStuff(String userId);
}
public class FooServiceImpl implements FooService {
private UserMapper userMapper;
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User doSomeBusinessStuff(String userId) {
return this.userMapper.getUser(userId);
}
}
在这个手册中,数据库访问层已经实现了使用四种不同技术来解释:使用MapperFactoryBean(可以直接或通过MapperScannerPostProcessor),和使用了基本MyBatis API的DAO实现一起使用SqlSessionDaoSupport。可以参考applicationContext.xml来获取完整的Spring配置信息
发表评论
-
Spring MVC集成velocity扩展
2013-07-23 17:18 32581、扩展velocity的视图 [code=" ... -
Java获取客户端信息
2011-09-07 14:48 1651String agent = request.getHeade ... -
获取IP地址
2011-09-07 13:41 2426public String getIpAddrByReques ... -
netty telnet 应用实例server代码
2011-09-07 12:21 1887public class TelnetServer { ... -
Netty中使用Apache Common FileUpload
2011-09-07 12:19 1280/** * 用Netty来实现上传 */ publi ... -
java管理windows进程
2011-08-29 17:34 1782package org.zzuli.xmsb; /** ... -
java反射工具
2011-08-29 17:30 5446package org.liufei.jweb.reflect ... -
java html工具
2011-08-29 17:26 1088package org.liufei.jweb.util; ... -
java将汉字转化为全拼
2011-08-29 17:24 1236package org.liufei.jweb.util; ... -
JSTL API
2011-08-29 15:13 1787JSTL API -
jdbc操作大观园
2011-08-09 17:22 1385最近公司使用jdbc和mybatis比较多,于是自己试着写了一 ... -
Java处理UTF-8带BOM的文本的读写
2011-08-01 11:28 3019什么是BOM BOM(byte-order mark),即字 ... -
Session和Cookie的区别
2011-06-27 16:34 8781、session保存在服务器,客户端不知道其中的信息;coo ... -
ajax应用时html响应生成工具
2011-05-02 19:00 1136package org.zzuli.xmsb.util; ... -
setTimeout和setInterval的使用
2011-05-01 16:00 1006这两个方法都可以用来 ... -
javasript 经典技巧
2011-03-04 21:30 14611. oncontextmenu="window.e ... -
javascript窗口
2011-03-04 16:31 1038【1、最基本的弹出窗口 ... -
get and post
2011-01-07 17:22 9991. get 是从服务器上获取数据,post 是向服务器传送数 ... -
web开发人员必学的五堂课
2010-12-20 14:42 990越来越多的Web开发人员 ... -
Servlet中Listener的应用
2010-10-27 21:51 855Listener 是Servlet的监听器,它可以监听客户端的 ...
相关推荐
**Spring整合Mybatis原理分析** 在Java Web开发中,Spring框架以其强大的依赖注入和面向切面编程能力,成为了事实上的核心框架。Mybatis则是一个轻量级的持久层框架,它简化了数据库操作,提供了直观的SQL映射。将...
本文将深入探讨如何进行"Spring整合Mybatis"的基础搭建,以及涉及到的相关技术点。 首先,Spring框架是一个开源的应用程序框架,它简化了Java EE应用的开发,提供了依赖注入(DI)和面向切面编程(AOP)等功能。在...
在Spring整合MyBatis的过程中,我们需要在该文件中声明以下关键组件: 1. **数据源(DataSource)**: 数据源定义了如何连接到数据库。Spring支持多种数据源实现,如Apache的DBCP或Tomcat的JDBC数据源。配置中通常...
在Java开发领域,Spring...以上就是Spring集成Mybatis所需的jar包及集成过程中的关键配置和步骤。正确配置这些组件,可以让我们在享受Spring的便利性的同时,充分利用MyBatis的灵活性和高效性,实现高质量的Java应用。
**七、Spring整合MyBatis配置** 1. 在Spring的配置文件`applicationContext.xml`中,配置DataSource、SqlSessionFactory和MapperScannerConfigurer。 2. 配置`mybatis-spring`的`SqlSessionFactoryBean`,指定...
本文将深入探讨如何将Spring与MyBatis进行整合,以及在整合过程中可能遇到的问题和解决方案。 首先,整合Spring与MyBatis的核心在于Spring的DataSource、TransactionManager和SqlSessionFactoryBean。DataSource是...
3. MyBatis-Spring整合库:mybatis-spring。 4. 数据库驱动:如mysql-connector-java(对于MySQL)、ojdbc(对于Oracle)等。 5. 其他依赖库:如log4j或slf4j用于日志记录,asm、cglib等用于AOP代理。 整合过程大致...
下面将详细介绍在Spring整合MyBatis3时所需的jar文件以及它们在整合过程中的作用。 1. **Spring核心模块**: - `spring-context`: 提供了应用上下文和依赖注入的核心接口,是Spring框架的基础。 - `spring-beans`...
Spring整合Mybatis源码解析
在本项目中,我们主要探讨的是如何在IntelliJ IDEA(IDEA)环境下,整合Spring、Mybatis和SpringMVC(SSM)框架,并利用PageHelper分页插件实现高效的数据分页。以下是对这些技术及其整合过程的详细说明: 1. **...
在本项目中,“Spring整合Mybatis简单项目”旨在教授初学者如何将两个流行的Java框架——Spring和Mybatis结合,以实现一个简单的影视资源管理系统。这个系统可能会包括资源的增删改查、分类管理等功能,帮助用户高效...
官方Spring整合Mybatis所需jar包,意味着我们需要确保安装的库文件能够支持这两者之间的无缝协作。Mybatis-3.4.6.jar是Mybatis的主要库文件,包含了Mybatis的核心功能,包括SQL映射文件解析、SQL执行、结果映射等。...
首先,Spring整合MyBatis主要是通过Spring的SqlSessionFactoryBean和MapperScannerConfigurer来完成的。SqlSessionFactoryBean用于创建MyBatis的SqlSessionFactory,它是MyBatis的核心,负责管理SqlSession。...
这是一个web程序的后台代码,整合了spring mvc和mybatis的配置,实现了各地方的电量增删改查,该代码持久层利用mybatis框架,简化了dao层的实现,spring实现了controller层、service层。
将两者整合,形成的SSM(Spring、SpringMVC、Mybatis)架构是Java Web开发中的常见选择。现在我们来详细讨论一下Spring-Mybatis整合的相关知识点。 1. **Spring 概述**: Spring 是一个全面的企业级应用框架,它...
下面我们将详细探讨Spring整合MyBatis过程中所需的jar包以及它们的作用。 1. **Spring框架核心库**: - `spring-context`: 提供了核心的上下文功能,包括依赖注入(DI)和bean工厂。 - `spring-beans`: 包含了...
Spring整合Mybatis是Java开发中常见的一种技术组合,它将Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)能力与Mybatis的灵活SQL映射功能结合,提高了开发效率并...
例如Spring框架核心包、Spring JDBC包、MyBatis核心包以及MyBatis与Spring整合包等。文中提到的版本为Spring 5.2.7.RELEASE和MyBatis 3.5.5,MyBatis-Spring 2.0.4,同时也需要添加数据库连接驱动(如文中提到的...
总之,Spring整合MyBatis的过程涉及到依赖管理、配置文件设置、数据源和事务管理的配置,以及Mapper接口和XML文件的编写。这种整合方式使得开发人员可以充分利用Spring的IoC和AOP特性,同时享受MyBatis提供的灵活的...