spring 和 mybatis 的整合
2015-07-28 21:01
525 查看
1 spring和mybatis整合
1.1 整合思路
需要spring通过单例方式管理SqlSessionFactory。
spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
持久层的mapper都需要由spring进行管理。
1.2 整合环境
创建一个新的java工程(接近实际开发的工程结构)jar包:
mybatis3.2.7的jar包
spring3.2.0的jar包
mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供。
全部jar包
jar包在附属文件里
目录环境;
db.Properties 数据库的连接池;
SqlMapConfig.xml mybatis 的配置环境
1.3 Mybatis配置文件
在classpath下创建mybatis/SqlMapConfig.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 全局配置参数,需要时再设置 -->
<settings>
<!--
打开延迟加载的开关系统默认为false-->
<settingname="lazyLoadingEnabled"value="true"/>
<!--
将积极加载改为消极加载即按需要加载 系统默认为true
-->
<settingname="aggressiveLazyLoading"value="false"/>
<!--
开启二级缓存 默认值为true -->
<settingname="cacheEnabled"value="true"/>
</settings>
<!-- 别名定义 -->
<typeAliases>
<!-- 批量别名定义
指定报名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)
-->
<packagename="cn.hpu.ssm.po"></package>
<!-- 可多包扫描<packagename="cn.hpu.mybatis.po"></package> -->
</typeAliases>
<!-- 加载映射文件 -->
<mappers>
<!-- 通过resource一次加载一个,单个映射文件的加载
-->
<mapperresource="sqlmap/User.xml"></mapper>
<!-- <mapperclass="cn.hpu.mybatis.mapper.OrdersMapperCustom"/> -->
<!-- 批量加载mapper 推荐
指定mapper接口的报名,mybatis自动扫描包下的所有的mapper接口进行加载
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名车个保持一致,且在同一个目录中
上边的规范是前提:使用mapper代理的方法
和spring整合后,使用mapper扫描器,这里不需要配置
-->
<!--<package name="cn.hpu.ssm.mapper"/> -->
</mappers>
</configuration>
1.4 Spring配置文件:
在classpath下创建applicationContext.xml,定义数据库链接池、SqlSessionFactory。<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 加载配置文件 -->
<context:property-placeholderlocation="classpath:db.properties"/>
<!-- 数据库连接池 -->
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
<propertyname="driverClassName"value="${jdbc.driver}"/>
<propertyname="url"value="${jdbc.url}"/>
<propertyname="username"value="${jdbc.username}"/>
<propertyname="password"value="${jdbc.password}"/>
<propertyname="maxActive"value="10"/>
<propertyname="maxIdle"value="5"/>
</bean>
<!-- mapper配置 -->
<!-- 让spring管理sqlsessionfactory使用mybatis和spring整合包中的
-->
<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池 -->
<propertyname="dataSource"ref="dataSource"/>
<!-- 加载mybatis的全局配置文件 -->
<propertyname="configLocation"value="classpath:mybatis/SqlMapConfig.xml"/>
</bean>
</beans>
注意:在定义sqlSessionFactory时指定数据源dataSource和mybatis的配置文件。
1.5 原始dao开发(和spring整合后)
1.5.1 User.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace命名空间,作用是对sql进行隔离,理解sql隔离
注意:使用mapper戴丽丽方法,namepace有特殊的重要作用
-->
<mappernamespace="test">
<!--通过select执行数据库查询
-->
<selectid="findUserById"parameterType="int"resultType="cn.hpu.ssm.po.User">
SELECT * FROMUSER WHERE id=#{id}
</select>
</mapper>
在SqlMapconfig.xml中加载User.xml
<!-- 加载映射文件 -->
<mappers>
<!-- 通过resource一次加载一个,单个映射文件的加载 -->
<mapperresource="sqlmap/User.xml"></mapper>
1.5.2 dao(实现类继承SqlSessionDaoSupport)
定义dao接口/**
* dao接口用户管理
* @authoryang
*
*/
public
interface UserDao {
//根据id查询户信息
public User findUserById(int id)throws Exception;
}
dao接口实现类需要注入SqlSessoinFactory,通过spring进行注入。
这里spring声明配置方式,配置dao的bean:
让UserDaoImpl实现类继承SqlSessionDaoSupport
public
class UserDaoImpl extendsSqlSessionDaoSupportimplements UserDao{
public User findUserById(int id)throws Exception {
//集成SqlSesstionDaoSupport,通过this.getsqlsession的到sqlsession
// TODO Auto-generatedmethod stub
SqlSession sqlSession =this.getSqlSession();
User user=sqlSession.selectOne("test.findUserById", id);
//spring 管理释放资源,方法结束自动关闭
//sqlSession.close();
return user;
}
1.5.3 配置dao
在applicationContext.xml中配置dao。<!-- 原始DAO接口 -->
<beanid="userDao"class="cn.hpu.ssm.dao.UserDaoImpl">
<propertyname="sqlSessionFactory"ref="sqlSessionFactory"></property>
</bean>
1.5.4 测试程序
publicclass UserDaoImplTest {
//在setup中得到spring的容器
private ApplicationContextapplicationContext;
@Before
public
void setUp() throws Exception {
applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationcontext.xml");
}
@Test
public
void test() throws Exception {
UserDao userDao=(UserDao) applicationContext.getBean("userDao");
User user= userDao.findUserById(1);
System.out.println(user.getUsername());
}
}
1.6 mapper代理开发
1.6.1 第一步mapper.xml和mapper.java
配置mapper.xml 和mapper.java 和mybatis 配置一样mapper.java
public
interface UserMapper {
//根据id查询户信息
public User findUserById(int id)throws Exception;
}
mapper.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="cn.hpu.ssm.mapper.UserMapper">
<!--通过select执行数据库查询 -->
<selectid="findUserById"parameterType="int"resultType="cn.hpu.ssm.po.User">
SELECT * FROM USER WHERE id=#{id}
</select>
</mapper>
1.6.2 第二步通过MapperFactoryBean创建代理对象
在applicationContext.xml中配置mapper。<!-- mapper 接口
MapperFactoryBean :可以通过mapper接口生成代理对象
-->
<beanid="userMapper"class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--mapperInterface指定mapper接口 -->
<propertyname="mapperInterface"value="cn.hpu.ssm.mapper.UserMapper"></property>
<propertyname="sqlSessionFactory"ref="sqlSessionFactory"></property>
</bean>
此方法问题:
需要针对每个mapper进行配置,麻烦。
1.6.3 通过MapperScannerConfigurer进行mapper扫描(建议使用)
在applicationContext.xml中配置mapper的批量扫描。<!-- mapper 的批量扫描,从mapper包中扫除mapper接口,自动创建代理对象并在spring的容器中注册
规范:需要将mapper接口类名和mapper.xml映射文件名车个保持一致,且在同一个目录中
上边的规范是前提
-->
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的报名
sqlSessionFactoryBeanName
自动扫描来的mapper的bean的id为mapper(类名)首字母小写
扫描多个包包之间用半角,号隔开
-->
<propertyname="basePackage"value="cn.hpu.ssm.mapper"></property>
<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory">
</property>
</bean>
1.6.4 第三步测试代码
publicclass UserMapperTest {
private ApplicationContextapplicationContext;
@Before
public
void setUp() throws Exception {
//得到spring容器
applicationContext= new ClassPathXmlApplicationContext("classpath:spring/applicationcontext.xml");
}
@Test
public
void testFindUserById() throws Exception{
UserMapper userMapper=(UserMapper)
applicationContext.getBean("userMapper");
User user=userMapper.findUserById(1);
System.out.println(user.getUsername());
}
}
摘自传智博客燕青老师的视频
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)
- java实现简单美女拼图游戏
- 浅析Mybatis 在CS程序中的应用
- java基本教程之线程休眠 java多线程教程
- JSP开发中在spring mvc项目中实现登录账号单浏览器登录
- 基于Spring框架的Shiro配置方法
- Spring MVC中上传文件实例
- 实例讲解Java的Spring框架中的AOP实现
- 解析Java中如何获取Spring中配置的bean
- Spring的注解配置与XML配置之间的比较
- java Spring整合Freemarker的详细步骤
- Java 二维码,QR码,J4L-QRCode 的资料整理
- java当中的定时器的4种使用方式