关闭

spring-mybatis整合一MapperFactoryBean

标签: MapperFactoryBean
236人阅读 评论(0) 收藏 举报
分类:

我们知道在使用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();
		}
	}

}





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29161次
    • 积分:882
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:9篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论