九 spring和mybatis整合


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包

1.3     sqlSessionFactory

在applicationContext.xml配置sqlSessionFactory和数据源

sqlSessionFactory在mybatis和spring的整合包下。

 1 
 2 
 3    <context:property-placeholder location="classpath:db.properties" />
 4 
 5  
 6 
 7    
 8 
 9    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
10 
11       destroy-method="close">
12 
13       <property name="driverClassName" value="${jdbc.driver}" />
14 
15       <property name="url" value="${jdbc.url}" />
16 
17       <property name="username" value="${jdbc.username}" />
18 
19       <property name="password" value="${jdbc.password}" />
20 
21       <property name="maxActive" value="10" />
22 
23       <property name="maxIdle" value="5" />
24 
25    bean>
26 
27  
28 
29  
30 
31    
32 
33    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
34 
35       
36 
37       <property name="configLocation" value="mybatis/SqlMapConfig.xml" />
38 
39       
40 
41       <property name="dataSource" ref="dataSource" />
42 
43    bean>

1.4     原始dao开发(和spring整合后)

1.4.1     User.xml

 

在SqlMapconfig.xml中加载User.xml

 

1.4.2     dao(实现类继承SqlSessionDaoSupport)

 

dao接口实现类需要注入SqlSessoinFactory,通过spring进行注入。

这里spring声明配置方式,配置dao的bean:

让UserDaoImpl实现类继承SqlSessionDaoSupport

 

1.4.3     配置dao

在applicationContext.xml中配置dao。

 

1.4.4     测试程序

 

1.5     mapper代理开发

1.5.1     mapper.xml和mapper.java

1.5.2     通过MapperFactoryBean创建代理对象

 

此方法问题:

需要针对每个mapper进行配置,麻烦。

1.5.3     通过MapperScannerConfigurer进行mapper扫描(建议使用)

 

1.5.4     测试代码

 

applicationContext.xml

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
 3     xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 6         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
 7         http://www.springframework.org/schema/mvc 
 8         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
 9         http://www.springframework.org/schema/context 
10         http://www.springframework.org/schema/context/spring-context-3.2.xsd 
11         http://www.springframework.org/schema/aop 
12         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
13         http://www.springframework.org/schema/tx 
14         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
15 
16     
17     <context:property-placeholder location="classpath:db.properties" />
18 
19     
20     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
21         destroy-method="close">
22         <property name="driverClassName" value="${jdbc.driver}" />
23         <property name="url" value="${jdbc.url}" />
24         <property name="username" value="${jdbc.username}" />
25         <property name="password" value="${jdbc.password}" />
26         <property name="maxActive" value="10" />
27         <property name="maxIdle" value="5" />
28     bean>
29 
30 
31     
32     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
33         
34         <property name="configLocation" value="mybatis/SqlMapConfig.xml" />
35         
36         <property name="dataSource" ref="dataSource" />
37     bean>
38     
39     
40     
41     <bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
42         <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
43     bean>
44     
45     
48     
53     
57     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
58         
61         <property name="basePackage" value="cn.itcast.ssm.mapper"/>
62         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
63         
64     bean>
65     
66 
67 
68 beans>

sqlMapConfig.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 
 7 
 8 
 9     
10     <typeAliases>
11 
12 
13         
14         <package name="cn.itcast.ssm.po" />
15 
16     typeAliases>
17 
18     
19     <mappers>
20         <mapper resource="sqlmap/User.xml" />
21 
22 
23 
24         
26         
27 
28     mappers>
29 
30 configuration>

User.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 
 9 <mapper namespace="test">
10 
11     
12     
13     
22     <select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User">
23         SELECT * FROM USER WHERE id=#{value}
24     select>
25     
26     
27 mapper>

UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 
 9 <mapper namespace="cn.itcast.ssm.mapper.UserMapper">
10 
11 
12 
13     <select id="findUserById" parameterType="int" resultType="user">
14         SELECT * FROM USER WHERE id=#{value}
15     select>
16     
17     
18     
19 mapper>

项目源码:

链接:http://pan.baidu.com/s/1c1S7qUk 密码:5oyl