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();
		}
	}

}





如何将多个ISO合并到一张光盘(都是可以启动的) — Windows Live

学习了挺有启发,我把帖子都集中在一起,需要的自己拿回去仔细琢磨毛桃的经验吧! [求助]如何将多个ISO合并到一张光盘(都是可以启动的) 问:有好几个200多M的ISO文件,都是启动盘,请问...
  • nosodeep
  • nosodeep
  • 2014年04月24日 15:57
  • 1725

阅读分享-海尔的人单合一模式

海尔的人单合一模式,已经成为很多企业学习的典范。  这个模式说起来,我总结的两点,其中一个模式机会公平,而不是结果公平的机制。第二,真正能让组织里头每一个人发挥自己的才能和价值;     人单合一...
  • springlove2000
  • springlove2000
  • 2015年07月06日 21:58
  • 1290

如何搭建三站合一的H5响应式网站

原文链接 如何搭建三站合一的H5响应式网站 建站宝盒 2017-05-08 15:41:22 浏览45 评论0 html5 域名 互联网 网站建设 布局 用户体验 网站备...
  • bystarlight
  • bystarlight
  • 2017年05月10日 14:34
  • 395

java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)

首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理。其实如果支付,不需要my...
  • fanghuainihao
  • fanghuainihao
  • 2017年03月30日 17:46
  • 3345

人脸识别算法,人证合一的应用

科技发展越来越快,人脸识别技术不论是在科技研究还是生活领域,都有着很大的发挥前景,试想一下:如果以后门禁识别人脸、支付识别人脸、会议识别人脸等等,岂不是很方便呢,这样既提高了效率,也提高了速度。  ...
  • zky13512721355
  • zky13512721355
  • 2017年07月04日 23:51
  • 244

mtk 72平台四合一芯片配置相关

蓝牙相关: # When this option set to yes, the Bluetooth stack will comply to Bluetooth Sepc 2.1 (BR/EDR)...
  • sunxingzhesunjinbiao
  • sunxingzhesunjinbiao
  • 2014年03月26日 21:15
  • 2384

SpringMVC3.0+myBatis3.2整合的显示和添加功能中时间问题解决

这段时间,我在网上看见,数据访问框架除了hibernate,还有不少的公司使用mybatis,边在网上下了mybatis,自己做一个springmvc+mybatis整合的小Demo,发现使用spri...
  • u013085291
  • u013085291
  • 2015年01月14日 15:25
  • 931

spring+mybatis开发配置文件说明

使用spring+mybatis开发时候需要配置的文件再次说明
  • myvanguard
  • myvanguard
  • 2017年02月19日 20:25
  • 1183

CTSC2016滚粗记 前篇

现在的时间是2016年5月5日22:48:48,是CTSC的结束日晚上,也是APIO的开始日晚上。鉴于喜闻乐见狗牌滚粗,于是就写个游记纪念一下吧。day -∞要从R1完了的那天开始说起。教练被R1给吓...
  • LOI_DQS
  • LOI_DQS
  • 2016年05月06日 01:36
  • 5993

【AI学习笔记】置换、合一、归结原理

本文内容来自中科院大学张文生老师的人工智能课件,整理by@tianranhe 3置换与合一.5归结原理.人工智能复习笔记,考试前还是没看懂,考试也来了,转过来好好看 - - ...
  • Modeala
  • Modeala
  • 2013年12月31日 12:04
  • 3924
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring-mybatis整合一MapperFactoryBean
举报原因:
原因补充:

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