码迷,mamicode.com
首页 > 编程语言 > 详细

MyBatis集成Spring开发 讲解

时间:2015-04-30 12:40:54      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:mybatis   spring   

MyBatis集成Spring开发 讲解

  简介:Spring集成Mybatis开发简述有两种方式,第一种是在applicationContext.xml中配置接口扫描类(同时也扫描了sql.xml配置文件)或者注入接口类(MapperScannerConfigurer、MapperFactoryBean这两个在test中有讲解如何配置),第二种是原生的Mybatis,不用接口开发,而在applicationContext.xml中当配置sqlSessionFactory时候,配置如conf.xml文件,让Mybatis自己扫描,从而在程序中使用原生Mybatis做CRUD操作。

      注意点,在上一篇文章中写到了Mybatis的注解方式也是接口,在spring中的接口和注解方式是不一样的,注解方式的时候定义了接口,要在接口中写入配置,比如@Select("select * from Users where id = #{id}")等,不需要对应的sql.xml配置文件,二在Spring中,写入了接口,还需要对应的sql.xml配置文件,而这个文件的namespace就是对应的接口全名,使用MapperScannerConfigurer扫描了接口类型后,在调用的时候使用接口类型.save()等方法来实现CRUD。

 

1、项目清单

技术分享

2、顺序源码

package com.bjsxt.bean;

public class User {
//shift+alt+s
	private int id;
	private String name;
	private int age;
	
	public User(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public User() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

	
}
package com.bjsxt.user.dao;

import java.util.List;

import com.bjsxt.bean.User;

public interface UserMapper {
	void save(User user);
	void update(User user);
	void delete(int id);
	User findById(int id);
	List<User> findAll();
}
package com.bjsxt.user.dao;

import java.util.List;

import com.bjsxt.bean.User;

public interface UserMapper2 {
	void save(User user);
	void update(User user);
	void delete(int id);
	User findById(int id);
	List<User> findAll();
}
<?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">
<!-- spring集成Mybatis namespace 必须是接口的全类名  -->
<mapper namespace="com.bjsxt.user.dao.UserMapper">
	<insert id="save" parameterType="User" >
		insert into users(name,age) values(#{name},#{age})
	</insert>
</mapper>
<?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">
<!-- spring集成Mybatis namespace 必须是接口的全类名  -->
<mapper namespace="com.bjsxt.user.dao.UserMapper2">
	<insert id="save" parameterType="User" >
		insert into users(name,age) values(#{name},#{age})
	</insert>
</mapper>
package com.test;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import com.bjsxt.bean.User;
import com.bjsxt.user.dao.UserMapper;
import com.bjsxt.user.dao.UserMapper2;

/**
 * 配置了这个,<bean
 * class="org.mybatis.spring.mapper.MapperScannerConfigurer">,就不在需要配置
 * org.mybatis.spring.mapper.MapperFactoryBean了.前者配置一次,自动注入不同的接口类就可以了
 * 后者也是通过封装成了单个前者,而且还需要配置多个,所以用前者自动扫面,所有的接口和sql配置文件
 * ,在下面的测试类中注入一个接口类,配置的MapperScannerConfigurer会自动的
 * 解析出所有的接口提供方法的使用,MapperScannerConfigurer不用配置id了,没有什么意义了
 * 
 * 
 */
@Component
public class Test {
	@Autowired
	private UserMapper userMapper;
	@Autowired
	private UserMapper2 userMapper2;
/**
 * 下面两个是测试不同的接口类的实现
 */
	@org.junit.Test
	public void saveUser1() {
		ApplicationContext ac = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		SqlSessionFactory sf = (SqlSessionFactory) ac
				.getBean("sqlSessionFactory");
		SqlSession session = sf.openSession();
		Test t = (Test) ac.getBean("test");
		System.out.println(t.userMapper);
		t.userMapper.save(new User(-1, "连发2", 1));
	}
	@org.junit.Test
	public void saveUser2() {
		ApplicationContext ac = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		SqlSessionFactory sf = (SqlSessionFactory) ac
				.getBean("sqlSessionFactory");
		SqlSession session = sf.openSession();
		Test t = (Test) ac.getBean("test");
		System.out.println(t.userMapper2);
		t.userMapper2.save(new User(-1, "连发2", 1));
	}
	/**
	 * application.xml mybatis.spring.mapper.MapperFactoryBean 配置的实现与测试
	 * 如果有多个接口那么久需要多次这样的配置,根据id来识别具体的接口类型
	 */
	@org.junit.Test
	public void saveUser3() {
		ApplicationContext ac = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		SqlSessionFactory sf = (SqlSessionFactory) ac
				.getBean("sqlSessionFactory");
		SqlSession session = sf.openSession();
		UserMapper mapper = (UserMapper) ac.getBean("UserMapper");
		mapper.save(new User(-1, "连发3", 1));
	}
	/**
	 * application.xml中引入了conf.xml配置文件的测试
	 */
	@org.junit.Test
	public void saveUser4() {
		ApplicationContext ac = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		SqlSessionFactory sf = (SqlSessionFactory) ac
				.getBean("sqlSessionFactory");
		SqlSession session = sf.openSession(true);
		session.insert("com.bjsxt.user.dao.UserMapper.save",new User(-1, "老婆", 27));
	}
	public static void main(String[] args) {
		new Test().saveUser4();
	}
}

 

3、applicationContext.xml 配置讲解

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans">
	<context:component-scan base-package="com"></context:component-scan>
	<!-- 1. 数据源 : DriverManagerDataSource -->
	<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
		id="datasource">
		<property value="com.mysql.jdbc.Driver" name="driverClassName" />
		<property value="jdbc:mysql://localhost:3306/mybaits" name="url" />
		<property value="root" name="username" />
		<property value="123456" name="password" />
	</bean>
	<!--
		2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource /
		typeAliasesPackage
	-->

	<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
		<property name="dataSource" ref="datasource" />
		<property value="com.bjsxt.bean" name="typeAliasesPackage" />
		<!--configLocation属性指定mybatis的核心配置文件--> 
        <property name="configLocation" value="conf.xml"/> 
	</bean>
	<!--
		3. mybatis自动扫描加载Sql映射文件和接口 
		       通过类型的注入就可以直接使用其中的方法
	-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property value="com.bjsxt.user.dao" name="basePackage" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	<!-- 专门配置两个接口Mapper 下面两个配置就是,但是这种方式是比较不适用的,要用的话呢就在上面自动扫描的配置中进行 -->
	<bean id="UserMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
	<property name="mapperInterface" value="com.bjsxt.user.dao.UserMapper"></property>
	<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>
	
	<bean id="UserMapper2" class="org.mybatis.spring.mapper.MapperFactoryBean">
	<property name="mapperInterface" value="com.bjsxt.user.dao.UserMapper2"></property>
	<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>
	<!-- 4. 事务管理 : DataSourceTransactionManager -->
	<bean
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
		id="manager">
		<property name="dataSource" ref="datasource" />
	</bean>
	<!-- 5. 使用声明式事务 -->
	<tx:annotation-driven transaction-manager="manager" />
</beans>

4、conf.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>

	<!-- 配置实体类的别名 -->
	<typeAliases>
	<!-- 下面两者前者是别名,后者是让在xml中省去了包名的写,可直接写入简单类名就行了 -->
		<typeAlias type="com.bjsxt.bean.User" alias="_User"/> 
		<package name="com.bjsxt.bean"/>
	</typeAliases>
<!-- 
	development : 开发模式
	work : 工作模式
 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybaits" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com/bjsxt/user/dao/userMapper.xml"/>
		<mapper resource="com/bjsxt/user/dao/userMapper2.xml"/>
	</mappers>
</configuration>

 

5、lib 下载地址

Spring集成Mybatis需要的包

MyBatis集成Spring开发 讲解

标签:mybatis   spring   

原文地址:http://blog.csdn.net/u014201191/article/details/45391553

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!