mybatis学习教程中级(十一)mybatis和spring框架整合(前奏篇2)

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" />
2.3测试如旧
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());
    }
}






上一篇:C# 系统应用之调用SDelete程序粉碎文件及基础原理知识


下一篇:云上运维最佳实践一览|阿里云产品内容精选(三十九)