Spring + Mybatis - 原始dao开发整合 与 Mapper代理整合



Spring + Mybatis - 原始dao开发整合 与 Mapper代理整合





标签:
mybatisSpringbeanApplicationContextMapper




2160人阅读
评论(0)
收藏
举报







分类:





1.准备

    这段时间学习了Spring和Mybatis的知识,我们知道持久层的 mapper,dao都需要spring进行管理, 需要spring通过单例的方式管理SqlSessionFactory,spring和mybatis整合生成代理对象使用sqlsessionFactory创建sqlsession;

    练习全部jar (Spring+Mybatis+Spring-mybatis整合包)下载 :

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

  

    demo数据准备 :

        (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) 初始化数据 :

  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整合

        整合图解 :

          


      下面我们使用一个例子来说明 :

           场景描述 : 通过客户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







posted @ 2017-11-07 18:44  星朝  阅读(361)  评论(0)    收藏  举报