1、前言
我们前奏篇讲解了用dao+daoimpl+spring整合sqlconfig。我们发现还有daoimpl这个东西,这一章我们也就讲解,去掉这个impl吧。使用mapper代理方式。
2、mapper.java代理
spring代理设置,没有了impl作为service,那么我就用MapperSacnnerConfigurer的basePackage扫描我们的mapper类吧。扫描完毕之后---》》获取MappFactory<T>---->
<beans xmlns="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-placeholder location="classpath:/config/db.properties" /> <!-- 数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="10" /> <property name="maxIdle" value="5" /> </bean> <!-- SqlsessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据源 --> <property name="dataSource" ref="dataSource"/> <!-- mybatis配置文件 --> <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/> </bean> <!-- 1、配置原始dao、impl(多而且繁琐) --> <!-- <bean id="userDao" class="com.ycy.mybatis.dao.impl.UserMappermpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>--> <!-- 配置mapper.java代理 --> <!--2、MapperFactoryBean(多而且繁琐):用于生成mapper代理对象 <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="cn.itcast.mybatis.mapper.UserMapper"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> --> <!-- 3、MapperScannerConfigurer(扫描简单):mapper的扫描器,将包下边的mapper接口自动创建代理对象, 自动创建到spring容器中,bean的id是mapper的类名(首字母小写) --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 配置扫描包的路径 如果要扫描多个包,中间使用半角逗号分隔 --> <property name="basePackage" value="com.ycy.mybatis.dao"/> <!-- 使用sqlSessionFactoryBeanName --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans>2.1 关于第一种方式三种注入spring方式
第一种就不用说了,就是我们常见的bean注入,找到impl类,注入实体,找到实现方法,找到namespace----》找到sqlconfig----》找到了sqlstatament,实现组装数据。
第二种方式与第三种方式,来自哪里呢?三个类如下图片,第一个类是是根据类路径扫描(后面两个类都会用到);第二个类是单个扫描,第三个是basepackage扫描。就这么完美的注入然后:找到sqlconfig----》找到了sqlstatament,实现组装数据。
2.2来自其他网站说明,我觉得还是可以,摘抄过来如下:
要创建 MapperScannerConfigurer,可以在 Spring 的配置中添加如下代码:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="org.mybatis.spring.sample.mapper" /> </bean>
basePackage 属性是让你为映射器接口文件设置基本的包路径。 你可以使用分号或逗号 作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。
注 意 , 没 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate , 因 为 MapperScannerConfigurer 将会创建 MapperFactoryBean,之后自动装配。但是,如果你使 用了一个 以上的 DataSource ,那 么自动 装配可 能会失效 。这种 情况下 ,你可 以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 属性来设置正确的 bean 名 称来使用。这就是它如何来配置的,注意 bean 的名称是必须的,而不是 bean 的引用,因 此,value 属性在这里替代通常的 ref:
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
package com.ycy.mybatis.springmybatisTest; import com.ycy.mybatis.dao.UserMapper; import com.ycy.mybatis.module.User; import javafx.application.Application; import org.apache.ibatis.session.SqlSessionFactory; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.applet.AppletContext; /** * Created by Administrator on 2015/9/15 0015. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:spring/applicationContext.xml"}) public class Test11 { @Autowired private UserMapper userMapper; @Test public void test111() throws Exception { User user=userMapper.getUserById(1); System.out.println( user.getUsername()); } }