Spring + Mybatis - 原始dao開發整合 與 Mapper代理整合

Spring + Mybatis - 原始dao開發整合 與 Mapper代理整合

標籤: mybatisSpringbeanApplicationContextMapper
2160人閱讀 評論(0) 收藏 舉報
分類:

1.準備

    這段時間學習了Spring和Mybatis的知識,咱們知道持久層的 mapper,dao都須要spring進行管理, 須要spring經過單例的方式管理SqlSessionFactory,spring和mybatis整合生成代理對象使用sqlsessionFactory建立sqlsession;html

    練習所有jar (Spring+Mybatis+Spring-mybatis整合包)下載 :java

    http://download.csdn.net/detail/lablenet/9385114spring

  

    demo數據準備 :sql

        (1) 建立一個客戶表 :數據庫

  1. --客戶表  
  2. CREATE TABLE F_CLIENT(  
  3.     ID NUMBER(12) PRIMARY KEY,--用戶編號  
  4.     USERNAME VARCHAR2(20) NOT NULL,--用戶姓名  
  5.     CLIENT_CERTIFICATE_NO VARCHAR2(20) NOT NULL UNIQUE,--證件號碼  
  6.     BORN_DATE DATE,--出生日期  
  7.     FAMILY_REGISTER_ADDRESS VARCHAR2(200),--家庭住址  
  8.     NOW_ADDRESS VARCHAR2(200) NOT NULL,--如今住址  
  9.     CONTACT_MODE VARCHAR2(50) NOT NULL,--聯繫方式  
  10.     URGENCY_CONTACT_MODE VARCHAR2(50) NOT NULL,--緊急聯繫方式  
  11.     CREATE_DATE DATE NOT NULL--建立時間  
  12. );  

        (2) 初始化數據 :apache

  1. insert into f_client(id,username,client_certificate_no,born_date,family_register_address,now_address,contact_mode,urgency_contact_mode,create_date) values (14,  
  2. 'yuan','311209070127',to_date('1993-03-12','yyyy-mm-dd'),'河南省焦做市','河南省河南理工大學','150000000','110',sysdate);  
  3. insert into f_client(id,username,client_certificate_no,born_date,family_register_address,now_address,contact_mode,urgency_contact_mode,create_date) values(  
  4.  15,'yang','311209070126',to_date('1993-04-12','yyyy-mm-dd'),'河南溫縣','河南理工大學','3987321','110',sysdate);  
  5.  insert into f_client values(  
  6.  16,'yang','311209070129',to_date('1997-04-12','yyyy-mm-dd'),'河南新鄉','河南理工大學','3987321','110',sysdate);  
  7.       


       (3) 客戶表 po

  1. public class FClient {  
  2.      private Integer id;  
  3.      private String username;  
  4.      private String client_certificate_no;  
  5.      private Date born_date;  
  6.      private String family_register_address;  
  7.      private String now_address;  
  8.      private String contact_mode;  
  9.      private String urgency_contact_mode;  
  10.      private Date create_data;  
  11.     public Integer getId() {  
  12.         return id;  
  13.     }  
  14.     public void setId(Integer id) {  
  15.         this.id = id;  
  16.     }  
  17.     public String getUsername() {  
  18.         return username;  
  19.     }  
  20.     public void setUsername(String username) {  
  21.         this.username = username;  
  22.     }  
  23.     public String getClient_certificate_no() {  
  24.         return client_certificate_no;  
  25.     }  
  26.     public void setClient_certificate_no(String client_certificate_no) {  
  27.         this.client_certificate_no = client_certificate_no;  
  28.     }  
  29.     public Date getBorn_date() {  
  30.         return born_date;  
  31.     }  
  32.     public void setBorn_date(Date born_date) {  
  33.         this.born_date = born_date;  
  34.     }  
  35.     public String getFamily_register_address() {  
  36.         return family_register_address;  
  37.     }  
  38.     public void setFamily_register_address(String family_register_address) {  
  39.         this.family_register_address = family_register_address;  
  40.     }  
  41.     public String getNow_address() {  
  42.         return now_address;  
  43.     }  
  44.     public void setNow_address(String now_address) {  
  45.         this.now_address = now_address;  
  46.     }  
  47.     public String getContact_mode() {  
  48.         return contact_mode;  
  49.     }  
  50.     public void setContact_mode(String contact_mode) {  
  51.         this.contact_mode = contact_mode;  
  52.     }  
  53.     public String getUrgency_contact_mode() {  
  54.         return urgency_contact_mode;  
  55.     }  
  56.     public void setUrgency_contact_mode(String urgency_contact_mode) {  
  57.         this.urgency_contact_mode = urgency_contact_mode;  
  58.     }  
  59.     public Date getCreate_data() {  
  60.         return create_data;  
  61.     }  
  62.     public void setCreate_data(Date create_data) {  
  63.         this.create_data = create_data;  
  64.     }  
  65. }  




2.原始dao整合

        整合圖解 :api

          


      下面咱們使用一個例子來講明 :微信

           場景描述 : 經過客戶id查詢客戶信息 ;

   (1)dao層

          dao接口

  1. public interface ClientDao {  
  2.   
  3.     FClient findClientById(int id);  
  4. }  

          dao接口實現 :

           注意 : 在這裏咱們讓dao實現接口繼承SqlSessionDaoSupport (在spring-mybatis整合包中 org.mybatis.spring.support.SqlSessionDaoSupport),則在dao接口實現中不須要sqlsessionFactory屬性了;就不用了在注入sqlSessionFactory了;


  1. public class ClinetDapimpl extends SqlSessionDaoSupport implements ClientDao {  
  2.   
  3.       
  4. /*    
  5.  *  原始的sqlSessionFactory的注入方式 
  6.  *  private SqlSessionFactory sqlSessionFactory; 
  7.  
  8.     public ClinetDapimpl(SqlSessionFactory sqlSessionFactory) { 
  9.         super(); 
  10.         this.sqlSessionFactory = sqlSessionFactory; 
  11.     }*/  
  12.   
  13.     @Override  
  14.     public FClient findClientById(int id) {  
  15.         SqlSession session = this.getSqlSession();  
  16.         FClient client = (FClient) session.selectOne("cn.labelnet.dao.ClientDao.findClientById",id);  
  17.         return client;  
  18.     }  
  19.       
  20. }  

    (2)Clientmap.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. <mapper namespace="cn.labelnet.dao.ClientDao">   
  6.   
  7.   
  8.    <select id="findClientById" parameterType="int" resultType="cn.labelnet.po.FClient">  
  9.       select * from f_client where id=#{value}  
  10.    </select>  
  11.   
  12.   
  13. </mapper>  


    (3)SqlMapConfig.xml

             在以前的練習中,咱們在這裏加載數據源,可是在整合中咱們將數據源加載交給了spring的ApplicationContext.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.     <mappers>  
  8.       
  9.        <mapper resource="cn/lablenet/dao/sqlmap/ClientMap.xml"/>  
  10.       
  11.         <!-- 加載mapper映射文件 -->  
  12.           
  13.       <!--  <mapper resource="cn/labelnet/mapper/ClientMapper.xml" /> -->  
  14.           
  15.     </mappers>  
  16.       
  17. </configuration>  

   (4)ApplicationContext.xml

            注意 :1)數據源加載用的是 org.apache.commons.dbcp.BasicDataSource ;

                       2)配置sqlsessionFactory 用的是 org.mybatis.spring.SqlSessionFactoryBean ;

                       3)配置dao的接口實現,爲其注入sqlSessionFactory ;


  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xmlns:aop="http://www.springframework.org/schema/aop"   
  7.     xsi:schemaLocation="  
  8.     http://www.springframework.org/schema/beans   
  9.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  10.     http://www.springframework.org/schema/aop   
  11.     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    
  12.     http://www.springframework.org/schema/context  
  13.     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  14.    
  15.     <!-- 加載數據庫配置文件 -->  
  16.     <context:property-placeholder location="classpath:db.properties"/>  
  17.       
  18.     <!-- 配置數據源,使用dbcp -->  
  19.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  20.        <property name="driverClassName" value="${oracle.driver}"></property>  
  21.        <property name="url" value="${oracle.url}"></property>  
  22.        <property name="username" value="${oracle.name}"></property>  
  23.        <property name="password" value="${oracle.pass}"></property>  
  24.        <property name="maxActive" value="10"></property>  
  25.        <property name="maxIdle" value="5"></property>  
  26.     </bean>  
  27.    
  28.     <!-- 1.配置sqlSessionFactory -->  
  29.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >  
  30.            
  31.          <!-- 加載mybatis的配置信息 -->  
  32.          <property name="configLocation" value="cn/labelnet/mybatis/config/SqlmapDaoConfig.xml"></property>  
  33.            
  34.          <!-- 加載數據源  dataSource-->  
  35.          <property name="dataSource" ref="dataSource"></property>  
  36.            
  37.     </bean>  
  38.       
  39.       
  40.     <!-- 配置dao的接口實現,爲其注入sqlSessionFactory -->  
  41.     <bean id="ClientDao" class="cn.labelnet.dao.ClinetDapimpl">  
  42.       
  43.         <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
  44.       
  45.     </bean>  
  46. </beans>  


    5)測試

  1. //獲得Spring 容器  
  2. private ApplicationContext applicationContext;  
  3.   
  4. @Before  
  5. public void setUp() throws Exception {  
  6.     applicationContext=new ClassPathXmlApplicationContext("classpath:cn/labelnet/spring/config/applicationContext.xml");  
  7. }  
  8.   
  9.   
  10. @Test  
  11. public void test() {  
  12.     ClientMapper bean = (ClientMapper) applicationContext.getBean("clientMapper");  
  13.     bean.findClientById(15);  
  14. }  


3.Mapper代理整合

     整合圖解 :

               

         示例 :上面的場景不變,採用上面的場景實現

       (1)Mapper.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. <mapper namespace="cn.labelnet.mapper.ClientMapper">   
  6.   
  7.    <select id="findClientById" parameterType="int" resultType="cn.labelnet.po.FClient">  
  8.       select * from f_client where id=#{value}  
  9.    </select>  
  10.      
  11. </mapper>  

     (2)Mapper.java實現

  1. public interface ClientMapper {  
  2.   
  3.     FClient findClientById(int id);  
  4.       
  5. }  

    (3)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.     <mappers>  
  8.       
  9.        <mapper resource="cn/lablenet/dao/sqlmap/ClientMap.xml"/>  
  10.       
  11.         <!-- 加載mapper映射文件 -->  
  12.           
  13.         <mapper resource="cn/labelnet/mapper/ClientMapper.xml" />  
  14.           
  15.     </mappers>  
  16.       
  17. </configuration>  

    (4)Applicationcontext.xml

              

            注意 :1)數據源加載用的是 org.apache.commons.dbcp.BasicDataSource ;

                       2)配置sqlsessionFactory 用的是 org.mybatis.spring.SqlSessionFactoryBean ;

                       3)經過MapperFactoryBean 實現 建立代理對象用的是 org.mybatis.spring.mapper.MapperFactoryBean

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xmlns:aop="http://www.springframework.org/schema/aop"   
  7.     xsi:schemaLocation="  
  8.     http://www.springframework.org/schema/beans   
  9.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  10.     http://www.springframework.org/schema/aop   
  11.     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    
  12.     http://www.springframework.org/schema/context  
  13.     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  14.    
  15.     <!-- 加載數據庫配置文件 -->  
  16.     <context:property-placeholder location="classpath:db.properties"/>  
  17.       
  18.     <!-- 配置數據源,使用dbcp -->  
  19.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  20.        <property name="driverClassName" value="${oracle.driver}"></property>  
  21.        <property name="url" value="${oracle.url}"></property>  
  22.        <property name="username" value="${oracle.name}"></property>  
  23.        <property name="password" value="${oracle.pass}"></property>  
  24.        <property name="maxActive" value="10"></property>  
  25.        <property name="maxIdle" value="5"></property>  
  26.     </bean>  
  27.    
  28.     <!-- 1.配置sqlSessionFactory -->  
  29.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >  
  30.            
  31.          <!-- 加載mybatis的配置信息 -->  
  32.          <property name="configLocation" value="cn/labelnet/mybatis/config/SqlmapDaoConfig.xml"></property>  
  33.            
  34.          <!-- 加載數據源  dataSource-->  
  35.          <property name="dataSource" ref="dataSource"></property>  
  36.            
  37.     </bean>  
  38.       
  39.       
  40.  <!--    <!-- 配置dao的接口實現,爲其注入sqlSessionFactory -->  
  41.     <bean id="ClientDao" class="cn.labelnet.dao.ClinetDapimpl">  
  42.       
  43.         <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
  44.       
  45.     </bean> -->  
  46.       
  47.     <!--1.配置mapper代理對象   
  48.             經過MapperFactoryBean 實現 建立代理對象   
  49.     -->  
  50.        
  51.      <bean id="clientMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  52.         <!--  value爲接口的全限定名 -->  
  53.          <property name="mapperInterface" value="cn.labelnet.mapper.ClientMapper"></property>  
  54.          <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
  55.      </bean>  
  56. </beans>  

    (5)測試

  1. //獲得Spring 容器  
  2. private ApplicationContext applicationContext;  
  3.   
  4. @Before  
  5. public void setUp() throws Exception {  
  6.     applicationContext=new ClassPathXmlApplicationContext("classpath:cn/labelnet/spring/config/applicationContext.xml");  
  7. }  
  8.   
  9.   
  10. @Test  
  11. public void test() {  
  12.     ClientMapper bean = (ClientMapper) applicationContext.getBean("clientMapper");  
  13.     bean.findClientById(15);  
  14. }  

    (6)問題

          在使用mapper代理的時候,發生了一個錯誤:

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [cn/labelnet/spring/config/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException  
  2.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)  
  3.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)  
  4.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)  
  5.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)  
  6.     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)  
  7.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)  
  8.     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:591)  
  9.     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)  
  10.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)  
  11.     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)  
  12.     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)  
  13.     at cn.labelnet.dao.ClientMapperScannerTest.setUp(ClientMapperScannerTest.java:17)  
  14.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  15.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)  
  16.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  17.     at java.lang.reflect.Method.invoke(Method.java:606)  
  18.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)  
  19.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
  20.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)  
  21.     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)  
  22.     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)  
  23.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)  
  24.     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)  
  25.     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)  
  26.     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)  
  27.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)  
  28.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)  
  29.     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)  
  30.     at org.junit.runners.ParentRunner.run(ParentRunner.java:309)  
  31.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)  
  32.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  33.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)  
  34.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)  
  35.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)  
  36.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)  
  37. Caused by: java.lang.reflect.MalformedParameterizedTypeException  
  38.     at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:60)  
  39.     at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:53)  
  40.     at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)  
  41.     at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)  
  42.     at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)  
  43.     at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)  
  44.     at sun.reflect.generics.visitor.Reifier.visitArrayTypeSignature(Reifier.java:159)  
  45.     at sun.reflect.generics.tree.ArrayTypeSignature.accept(ArrayTypeSignature.java:42)  
  46.     at sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:94)  
  47.     at java.lang.reflect.Method.getGenericParameterTypes(Method.java:292)  
  48.     at java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:387)  
  49.     at java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:114)  
  50.     at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:72)  
  51.     at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:56)  
  52.     at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1149)  
  53.     at java.beans.Introspector.getBeanInfo(Introspector.java:416)  
  54.     at java.beans.Introspector.getBeanInfo(Introspector.java:163)  
  55.     at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:224)  
  56.     at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:149)  
  57.     at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:324)  
  58.     at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptors(BeanWrapperImpl.java:331)  
  59.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1242)  
  60.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1101)  
  61.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)  
  62.     ... 34 more  
 

      再此陷入糾結中;開始的時候,本身的spring , mybatis ,spring-mybatis的整合包是本身這裏複製哪裏粘貼的,致使不少重複包,通過使用上面的所有整合包,解決了;

  

     還有一個問題 :

 問題 : mapper多的話,須要配置多個mapper
 解決:mapper批量掃描,從mapper包中掃描出mapper接口,自動建立mapper對象    


4.Mapper代理整合 bean掃描實現

    整合圖解 :

                


   1) bean配置

      Mapper.xml 和 mapper.java同樣,在這裏就只配置下ApplicationContext.xml文件

   

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xmlns:aop="http://www.springframework.org/schema/aop"   
  7.     xsi:schemaLocation="  
  8.     http://www.springframework.org/schema/beans   
  9.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  10.     http://www.springframework.org/schema/aop   
  11.     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    
  12.     http://www.springframework.org/schema/context  
  13.     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  14.    
  15.     <!-- 加載數據庫配置文件 -->  
  16.     <context:property-placeholder location="classpath:db.properties"/>  
  17.       
  18.     <!-- 配置數據源,使用dbcp -->  
  19.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  20.        <property name="driverClassName" value="${oracle.driver}"></property>  
  21.        <property name="url" value="${oracle.url}"></property>  
  22.        <property name="username" value="${oracle.name}"></property>  
  23.        <property name="password" value="${oracle.pass}"></property>  
  24.        <property name="maxActive" value="10"></property>  
  25.        <property name="maxIdle" value="5"></property>  
  26.     </bean>  
  27.    
  28.     <!-- 1.配置sqlSessionFactory -->  
  29.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >  
  30.            
  31.          <!-- 加載mybatis的配置信息 -->  
  32.          <property name="configLocation" value="cn/labelnet/mybatis/config/SqlmapDaoConfig.xml"></property>  
  33.            
  34.          <!-- 加載數據源  dataSource-->  
  35.          <property name="dataSource" ref="dataSource"></property>  
  36.            
  37.     </bean>  
  38.       
  39.       
  40.    <!-- 配置dao的接口實現,爲其注入sqlSessionFactory -->  
  41.     <bean id="ClientDao" class="cn.labelnet.dao.ClinetDapimpl">  
  42.       
  43.         <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
  44.       
  45.     </bean>   
  46.       
  47.     <!--1.配置mapper代理對象   
  48.             經過MapperFactoryBean 實現 建立代理對象   
  49.     -->  
  50.        
  51.     <!--  <bean id="clientMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  52.          value爲接口的全限定名  
  53.          <property name="mapperInterface" value="cn.labelnet.mapper.ClientMapper"></property>  
  54.          <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
  55.      </bean> -->  
  56.        
  57.      <!-- mapper批量掃描:  
  58.      從mapper包中掃描出mapper接口,自動建立代理對象 而且在spring容器中註冊;  
  59.      遵循規範:將mapper.java和mapper.xml映射文件名稱保持一致,且在一個目錄中,  
  60.      自動掃描出來的mapper的bean的 id爲mapper類名首字母小寫;-->  
  61.        
  62.      <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  63.           <!-- 掃描的包名 -->  
  64.           <property name="basePackage" value="cn.labelnet.mapper"></property>  
  65.           <!-- Sqlsession -->  
  66.           <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
  67.      </bean>  
  68.             
  69.   
  70. </beans>  

   (2) 重點是 :

  1. <!-- mapper批量掃描:  
  2. 從mapper包中掃描出mapper接口,自動建立代理對象 而且在spring容器中註冊;  
  3. 遵循規範:將mapper.java和mapper.xml映射文件名稱保持一致,且在一個目錄中,  
  4. 自動掃描出來的mapper的bean的 id爲mapper類名首字母小寫;-->  
  5.   
  6. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  7.      <!-- 掃描的包名 -->  
  8.      <property name="basePackage" value="cn.labelnet.mapper"></property>  
  9.      <!-- Sqlsession -->  
  10.      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
  11. </bean>  
  12.        


    注意幾點 :
     1)掃描bean不須要 設置ID ,使用的時候是掃描出來的mapper的類名且首字母小寫;

     2)掃描bean使用的是 org.mybatis.spring.mapper.MapperScannerConfigurer;

     3)配置SqlSessionFactory的時候使用 :value爲sqlSessionFactory的bean的id ;

  1. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  



5.Demo免積分下載

   http://download.csdn.net/detail/lablenet/9385109


0
0
 
 

相關文章
相關標籤/搜索