Mybatis Ibatis Spring整合方式

mybatis ibatis sprin

mybatis是ibatis的升级版,spring也有自带mybatis的orm。所以,搭建ibatis的框架也会有多种方式(我这里mybatis是3.0的,ibatis是2.3的,spring是3.0的,数据库是mysql)。下面介绍3中方式

1,只是用mybatis3。

2,使用mybatis3+spring3(使用mybatis的SqlSessionFactory )。

3,使用ibatis2.3+spring(使用spring自带的ibatis)

spring的orm包中只有ibatis,没有mybatis。而mybatis和ibatis还是有些区别的,比如配置文件属性不同。

 

第一种方式(只使用mybatis):

1)jar包:

cglib-2.2.jar
asm-3.1.jar
mysql-connector-java-3.1.13.jar
mybatis-3.0.5.jar

junit.jar

2)mybatis配置文件:

[html] view plain copy
  1. xml version="1.0" encoding="UTF-8" ?>>  
  2. <configuration>  
  3.       
  4.     <settings>  
  5.           
  6.         <setting name="cacheEnabled" value="true"/>  
  7.           
  8.         <setting name="lazyLoadingEnabled" value="true"/>  
  9.           
  10.         <setting name="aggressiveLazyLoading" value="true"/>  
  11.           
  12.         <setting name="multipleResultSetsEnabled" value="true"/>  
  13.           
  14.         <setting name="useColumnLabel" value="true"/>  
  15.           
  16.         <setting name="useGeneratedKeys" value="true"/>  
  17.           
  18.         <setting name="autoMappingBehavior" value="PARTIAL"/>  
  19.           
  20.         <setting name="defaultExecutorType" value="SIMPLE"/>  
  21.           
  22.         <setting name="defaultStatementTimeout" value="25000"/>  
  23.     settings>  
  24.       
  25.       
  26.     <typeAliases>  
  27.         <typeAlias alias="pageAccessURL"  type="com.lgm.mybatis.model.PageAccessURL" />  
  28.     typeAliases>  
  29.       
  30.     <environments default="development">  
  31.           
  32.         <environment id="development1">  
  33.               
  34.         <environment id="development2">  
  35.             <transactionManager type="JDBC"/>  
  36.             <dataSource type="POOLED">  
  37.                 <property name="driver" value="com.mysql.jdbc.Driver"/>  
  38.                 <property name="url" value="jdbc:mysql://localhost:3306/appdb"/>  
  39.                 <property name="username" value="root"/>  
  40.                 <property name="password" value="123456"/>  
  41.                   
  42.                 <property name="poolMaximumActiveConnections" value="10"/>  
  43.                   
  44.                 <property name="poolMaximumIdleConnections" value="5"/>  
  45.                   
  46.                 <property name="poolMaximumCheckoutTime" value="20000"/>  
  47.                   
  48.                 <property name="poolTimeToWait" value="20000"/>  
  49.                   
  50.                 <property name="poolPingQuery" value="NO PING QUERY SET"/>  
  51.                   
  52.                 <property name="poolPingEnabled" value="false"/>  
  53.                   
  54.                 <property name="poolPingConnectionsNotUsedFor" value="0"/>  
  55.             dataSource>  
  56.         environment>  
  57.           
  58.           
  59.         <environment id="development3">  
  60.             <transactionManager type="JDBC"/>  
  61.             <dataSource type="JNDI">  
  62.                 <property name="data_source" value="java:comp/env/jndi/mybatis"/>  
  63.                 <property name="env.encoding" value="UTF8"/>  
  64.                   
  65.     <mappers>  
  66.         <mapper resource="com/lgm/mybatis/config/pageAccessURL.xml"/>  
  67.     mappers>  
  68.   
  69. configuration>  


 

其中属性是数据源环境配置,可以配置多个数据源配置。每个属性代表一种配置方式。

加载事务配置 和数据源配置

  有两种配置方式,分别是JDBC和MANAGED,详细说明见配置注释。

有三种配置方式,分别是UNPOOLED、POOLED、JNDI,详细说明见配置注释。

定义别名,使用指定的别名来定义。

注:关于JNDI的配置,见tomcat的几种JNDI配置方法

3)mybatis的sql映射配置文件:

[html] view plain copy
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  3.   
  4. <mapper namespace="pageAccessURL" >  
  5.   
  6.       
  7.       
  8.     <select id="selectPageAccessURL" parameterType="int" resultType="pageAccessURL" >  
  9.         select * from tables where URL_ID = #{id}  
  10.     select>  
  11.       
  12.     <select id="selectPageAccessURLByClass" parameterType="pageAccessURL" resultType="pageAccessURL">  
  13.         select * from tables where URL_ID = #{urlId} and URL = #{url}  
  14.     select>  
  15.   
  16.       
  17.     <sql id="usercolumns">URL_ID as urlId,url,moduleId,state,marksql>  
  18.     <select id="selectPageAccessURL2" parameterType="int" resultType="pageAccessURL">  
  19.         select <include refid="usercolumns" />    
  20.         from tables where URL_ID = #{id}  
  21.     select>  
  22.           
  23.       
  24.       
  25.       
  26.         <setting name="cacheEnabled" value="true"/>  
  27.           
  28.         <setting name="lazyLoadingEnabled" value="true"/>  
  29.           
  30.         <setting name="aggressiveLazyLoading" value="true"/>  
  31.           
  32.         <setting name="multipleResultSetsEnabled" value="true"/>  
  33.           
  34.         <setting name="useColumnLabel" value="true"/>  
  35.           
  36.         <setting name="useGeneratedKeys" value="true"/>  
  37.           
  38.         <setting name="autoMappingBehavior" value="PARTIAL"/>  
  39.           
  40.         <setting name="defaultExecutorType" value="SIMPLE"/>  
  41.           
  42.         <setting name="defaultStatementTimeout" value="25000"/>  
  43.     settings>  
  44.       
  45.       
  46.     <typeAliases>  
  47.         <typeAlias alias="pageAccessURL"  type="com.lgm.mybatis.model.PageAccessURL" />  
  48.     typeAliases>  
  49.       
  50.   
  51.       
  52.     <mappers>  
  53.         <mapper resource="com/lgm/mybatis/config/pageAccessURL.xml"/>  
  54.     mappers>  
  55.   
  56. configuration>  


使用了spring管理的话,这里就不用设置数据源等其他配置了

5)mybatis的sql映射文件配置:

同方式一配置的sql映射文件配置

6)配置DAO层:

[html] view plain copy
  1. public class PageAccessURLManager {  
  2.   
  3.   
  4.     private SqlSessionFactory sqlSessionFactory ;  
  5.   
  6.     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {  
  7.         this.sqlSessionFactory = sqlSessionFactory;  
  8.     }  
  9.       
  10.     public PageAccessURL getPageAccessURL(int url_id){  
  11.         PageAccessURL page = (PageAccessURL)sqlSessionFactory.openSession().selectOne("selectPageAccessURL",url_id);  
  12.         System.out.println(page.getUrl());  
  13.         return page;  
  14.     }  
  15. }  


7)测试:

[java] view plain copy
  1. public void testSelect() {  
  2.     ApplicationContext tx = new ClassPathXmlApplicationContext("applicationContext.xml");  
  3.     PageAccessURLManager page = (PageAccessURLManager)tx.getBean("pageAccessURLManager");  
  4.     page.getPageAccessURL(123456);  
  5. }  


 

 

 

第三种方式(ibatis2.3+spring3):

1)jar包:

mysql-connector-java-3.1.13.jar
log4j-1.2.16.jar
org.springframework.aop-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.orm-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
org.springframework.web.servlet-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.context.support-3.0.5.RELEASE.jar
commons-logging-1.1.1.jar
spring-asm-3.0.5.RELEASE.jar
spring-expression-3.0.5.RELEASE.jar
spring-jdbc-3.0.5.RELEASE.jar
spring-tx-3.0.5.RELEASE.jar
commons-dbcp-1.2.2.jar
commons-pool-1.3.jar
ibatis-2.3.0.677.jar

junit.jar

2)spring配置文件:

applicationContext.xml

 

[html] view plain copy
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. >  
  3.   
  4. <beans>  
  5.     <import resource="applicationContext-dao.xml" />  
  6. beans>  


applicationContext-dao.xml

[html] view plain copy
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. >  
  3.   
  4. <beans>  
  5.   
  6.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  7.         <property name="dataSource" ref="dataSource" />  
  8.     bean>  
  9.       
  10.     <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  11.         <property name="configLocation" value="classpath:mybatis-config-mappings.xml" />  
  12.         <property name="dataSource" ref="dataSource" />  
  13.     bean>  
  14.   
  15.       
  16.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  17.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  18.         <property name="url" value="jdbc:mysql://localhost:3306/appdb" />  
  19.         <property name="username" value="root" />  
  20.         <property name="password" value="123456" />  
  21.         <property name="maxActive" value="100" />  
  22.         <property name="maxIdle" value="5" />  
  23.         <property name="minEvictableIdleTimeMillis" value="300000" />  
  24.         <property name="timeBetweenEvictionRunsMillis" value="120000" />  
  25.         <property name="validationQuery" value="SELECT 1" />  
  26.         <property name="testWhileIdle" value="true" />  
  27.         <property name="testOnReturn" value="true" />  
  28.         <property name="testOnBorrow" value="true" />  
  29.     bean>  
  30.   
  31.     <bean id="pageAccessURLManager" class="com.lgm.mybatis.manager.PageAccessURLManager">  
  32.         <property name="sqlMapClient" ref="sqlMapClient" />  
  33.     bean>  
  34.   
  35. beans>  

 

3)ibatis配置文件:

[html] view plain copy
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. >  
  3.   
  4. <sqlMapConfig>  
  5.     <settings cacheModelsEnabled="true" enhancementEnabled="true"  
  6.         lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"  
  7.         maxTransactions="5" useStatementNamespaces="false" />  
  8.       
  9.       
  10.     <typeAlias alias="pageAccessURL"  type="com.lgm.mybatis.model.PageAccessURL" />  
  11.       
  12.     <sqlMap resource="com/lgm/mybatis/config/pageAccessURL.xml"/>  
  13.       
  14. sqlMapConfig>  


4)ibatis的sql映射配置文件:

[html] view plain copy
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. >  
  3. <sqlMap namespace="pageAccessURL">  
  4.       
  5.     <cacheModel id="productCache" type="LRU">  
  6.         <flushInterval hours="24"/>  
  7.         <property name="size" value="1000" />  
  8.     cacheModel>  
  9.   
  10.     <select id="selectPageAccessURL" parameterClass="int" resultClass="pageAccessURL" cacheModel="productCache">  
  11.         select * from PAGE_ACCESS_URL where URL_ID = #id#  
  12.     select>  
  13.       
  14.     <select id="selectPageAccessURLByClass" parameterClass="pageAccessURL" resultClass="pageAccessURL">  
  15.         select * from PAGE_ACCESS_URL where URL_ID = #urlId# and URL = #url#  
  16.     select>  
  17.   
  18.     <sql id="usercolumns">URL_ID as urlId,url,moduleId,state,marksql>  
  19.     <select id="selectPageAccessURL2" parameterClass="int" resultClass="pageAccessURL">  
  20.         select <include refid="usercolumns" />    
  21.         from PAGE_ACCESS_URL where URL_ID = #id#  
  22.     select>  
  23.       
  24.     <insert id="insertTest" >  
  25.         <selectKey keyProperty="id" resultClass="int" >  
  26.             SELECT FLOOR(1 + (RAND() * 1000000));   
  27.         selectKey>  
  28.         insert into table values(xx,xx);  
  29.     insert>  
  30.   
  31. sqlMap>  


5)配置DAO层:

[java] view plain copy
  1. public class PageAccessURLManager {  
  2.   
  3.     private SqlMapClient sqlMapClient ;  
  4.     public void setSqlMapClient(SqlMapClient sqlMapClient) {  
  5.         this.sqlMapClient = sqlMapClient;  
  6.     }  
  7.       
  8.     public void getPageAccessURL(int urlId) throws SQLException{  
  9.         PageAccessURL page = (PageAccessURL)this.sqlMapClient.queryForObject("selectPageAccessURL", urlId);  
  10.         System.out.println(page.getUrl());  
  11.     }  
  12.           
  13. }  


注意:请仔细对比mybatis和ibatis的配置区别。

6)测试:

同方式二的测试;


你可能感兴趣的:(ibatis)