spring-mybatis整合一MapperFactoryBean

原创 2016年08月31日 11:39:23

我们知道在使用mybatis的所有操作都基于Sqlsession对象,而Sqlsession是由SqlSessionFactory产生的,而SqlSessionFactory又是由SqlSessionFactoryBuilder创建的。但是Mybatis-Spring是基于SqlSessionFactoryBean的,在使用Mybatis-Spring的时候,SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="mapperLocations" value="classpath*:config/mapper/*.xml"/>
	</bean>

        接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperFactoryBean了。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要我们注入,一个是Mybatis-Spring用来生成实现了SqlSession接口的SqlSessionTemplate对象的sqlSessionFactory;另一个就是我们所要返回的对应的Mapper接口了。

       定义好相应Mapper接口对应的MapperFactoryBean之后,我们就可以把我们对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当我们需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。

 <bean id="personMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">   
     	<property name="mapperInterface" value="cn.com.mybatis.dao.mapper.PersonMapper"/>   
    	<property name="sqlSessionFactory" ref="sqlSessionFactory"/>   
     </bean>
代码:

spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        	http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        	http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"
        	default-lazy-init="false">

	<!-- 数据 -->
	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/lpWeb"/>
		<property name="username" value="root"/>
		<property name="password" value="root123"/>
	</bean>
	 
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="mapperLocations" value="classpath*:config/mapper/*.xml"/>
	</bean>
	
	 <bean id="personMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">   
     	<property name="mapperInterface" value="cn.com.mybatis.dao.mapper.PersonMapper"/>   
    	<property name="sqlSessionFactory" ref="sqlSessionFactory"/>   
     </bean>
     
     
	 <bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
	</bean> 
	
	
</beans>

映射接口

package cn.com.mybatis.dao.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import cn.com.mybatis.mapper.Person;

public interface PersonMapper {

	 public List<Person> getPerson();  
	 
	 public void update(Map map);
	 
	 public void insert(Map map);
	 
	 @Select("select * from person where user_name like '%${username}%' and (age = ${age} or age is null)")
	 public List<Person> queryPersonList(Map map);
}

映射文件PersonMapper.xml

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.com.mybatis.dao.mapper.PersonMapper">
	<resultMap type="cn.com.mybatis.mapper.Person" id="personmap">
		<id column="USER_NAME" property="username" javaType="string" jdbcType="VARCHAR"/>
		<result column="SEX" property="sex" javaType="string" jdbcType="VARCHAR"/>
		<result column="AGE" property="age" javaType="int" jdbcType="INTEGER"/>
	</resultMap>
	
	<select id="getPerson" resultMap="personmap">
		select * from person
	</select>
	
	<insert id="insert" parameterType="java.util.Map">
	    insert into person (USER_NAME, SEX, AGE) values (
	    	#{username}, #{sex}, #{age}
	    )
	</insert>
	
	<update id="update">
	update person set AGE = #{age}
	where USER_NAME = #{username}
	</update>
	
	<delete id="delete">
	delete from person;
	</delete>
</mapper>

Person类

package cn.com.mybatis.mapper;

public class Person {

	private String username;
	
	private String sex;
	
	private int age;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [username=" + username + ", sex=" + sex + ", age=" + age + "]";
	}

	
	
}
测试类TestPersonMapper

package mybatis;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.com.mybatis.dao.mapper.PersonMapper;

public class TestPersonMapper {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
		ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("classpath*:spring-mybatis2.xml");
		PersonMapper personMapper = (PersonMapper) cpx.getBean("personMapper");
		System.out.println(personMapper.getPerson());
		
//		Map map = new HashMap();
//		map.put("username", "as");
//		map.put("sex", "boy");
//		map.put("age", 26);
//		personMapper.insert(map);
		Map map = new HashMap();
		map.put("username", "as");
		map.put("age", 26);
		System.out.println(personMapper.queryPersonList(map));
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}





相关文章推荐

spring-mybatis —— MapperFactoryBean之数据映射文件

为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象(DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现——Map...

spring-mybatis——MapperFactoryBean 之映射接口

为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象(DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现——Map...

springmvc+spring+mybatis整合

  • 2017年03月18日 22:38
  • 14.79MB
  • 下载

Spring,Mybatis整合

  • 2017年11月06日 14:59
  • 72KB
  • 下载

spring+mybatis 多数据源整合

原文:http://blog.csdn.net/fhx007/article/details/12530735 -------------------------------------------...

MyBatis-Spring 整合

  • 2017年02月24日 17:13
  • 36.93MB
  • 下载

maven+mybatis+spring+springmvc整合

  • 2017年08月22日 20:09
  • 42KB
  • 下载

MyBatis与Spring整合——通过官方文档进行最简单的整合

整合前先重新理下两个框架的基础的东西。以前搭Hibernate那些,都是是自己看着别人已经搭好的视频,然后自己重新理了一次。这次Mybatis与Spring的整合。从最原始的官方文档开始搭起。要学的,...
  • iaiti
  • iaiti
  • 2016年12月05日 17:55
  • 2620

Spring与Mybatis整合

  • 2013年11月19日 10:02
  • 18KB
  • 下载

spring,mybatis整合

  • 2014年09月16日 11:31
  • 11.63MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring-mybatis整合一MapperFactoryBean
举报原因:
原因补充:

(最多只允许输入30个字)