【SSM-MyBatis框架】Spring整合Mybatis

1. 整合思路:

    需要spring通过单例管理mybatis的SQLSessionFactory。

   spring和mybatis整合生成代理对象,使用SQLSessionFactory创建sqlSession,(spring和mybatis整合自动完成。)。

   持久层的mapper都需要spring管理。

2.sqlSessionFactory:

   使用mybatis管理sqlSessionFactory:

   在applicationContext.xml中配置sqlSessionFactory和数据源(原先sqlMapConfig.xml中数据库部分可去除)。

  

<!-- 加载配置文件 -->
<context:property-placeholder location="classpath: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>	
<!-- mapper配置 -->
	<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 加载mybatis的全局配置文件 -->
		<property name="configLocation" value="mybatis/SqlMapConfig.xml" />
	</bean>


  3.mybatis配置文件:(SQLMapConfig.xml)

    

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<!-- 批量设置(推荐使用)
			指定包名,mybatis自动扫描扫描po类,自动定义别名。默认为类名(首字母大写或小写) -->
			<typeAliases>
					<package name="cn.edu.hpu.ssm.po"/>
			</typeAliases>
			
					<mappers>
							<!-- 批量扫描 -->
							<package name="cn.edu.hpu.ssm.mapper"/>
					</mappers>
</configuration>


    4.Spring配置文件:(applicationConfig.xml)

 

<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: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>	
<!-- mapper配置 -->
	<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 加载mybatis的全局配置文件 -->
		<property name="configLocation" value="mybatis/SqlMapConfig.xml" />
	</bean>
	
	<!-- 单个mapper代理 -->
	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
			<property name="mapperInterface"  value="cn.edu.hpu.ssm.mapper.UserMapper"/>
			<property name="sqlSessionFactory"  ref="sqlSessionFactory"/>
	</bean>
	<!-- 批量代理,代理出来的mapper对象,引用时为mapper接口名称,首字母必须小写 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 			<property name="basePackage" value="cn.edu.hpu.ssm.mapper"></property>
			<property name="sqlSessionFactoryBeanName"  value="sqlSessionFactory" />
	</bean>

</beans>

     5.Mapper代理(使用MapperFactoryBean):

       使用MapperFactoryBean实现单个Mapper的注入:

       mapper.java:

       

public interface UserMapper {
	
	//返回值类型必须与mapper.xml中resultType类型相同
	//形参必须与mapper.xml中的parameterType类型相同
	//mapper.java接口中的方法名和mapper.xml中statement的id一致
	public User findUserById(int id) throws Exception;
	
}

     mapper.xml:

    

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace:命名空间,作用就是对sql进行分类化管理,sql隔离
		注意:在使用mapper的代理方法开发时,有重要作用  
				namespace命名必须与Mapper接口的路径相同 -->
<mapper namespace="cn.edu.hpu.ssm.mapper.UserMapper">

	<!-- 按照id查询 -->
	<!-- 将sql语句封装到MapperStatement中,所以也将id 成为statement的Id -->
	<!-- paramerType:指定输入参数的类型。
			#{ } :代表占位符。
			#{id }:表示接受输入参数id的值,如果输入参数是简单类型,#{ }中的参数名可以任意
					 ,可以是value或是其他值
					 
			resultType:表示sql输出结果的所映射的Javabean的对象类型,resultType指定将单条记录映射成Java对像-->
	<select id="findUserById" parameterType="int"  resultType="user">
		SELECT * FROM USER WHERE id = #{value}
	</select>
	
</mapper>


     test.java:

    单元测试,setUp方法执行在测试方法之前,这里手动将application.xml文件注解。

    

public class UserMapperTest {

	private ApplicationContext applicationContext;
	@Before
	public void setUp() throws Exception {
		applicationContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
		
	}

	@Test
	public void testFindUserById() throws Exception {
		UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
		User u =userMapper.findUserById(1);
		System.out.println(u);
	}

}


   6.Mapper代理(使用MapperScannerConfigurer 批量处理mapper接口):

      使用MapperScannerConfigurer必须满足其特定的要求,即:mapper.java与mapper.xml必须放在同一目录,mapper.java接口中的方法名必须与mapper.xml中的statement的ID相同。mapper.java在注解工程中,使用首字母小写。

      其他同上类似。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值