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需要的包

时间: 2024-11-08 13:43:08

MyBatis集成Spring开发 讲解的相关文章

MyBatis6:MyBatis集成Spring事物管理(下篇)

前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事物处理.文章内容主要包含两方面: 1.单表多数据的事物处理 2.多库/多表多数据的事物处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事物管理,前面的文章建立了一个Student相关

mybatis集成spring的事务管理

第一 创建一个测试实体 1 public class Order { 2 3 private int id; 4 private String orderName; 5 6 public Order(String orderName) { 7 this.orderName = orderName; 8 } 9 10 public int getId() { 11 return id; 12 } 13 public void setId(int id) { 14 this.id = id; 15

聊聊、Mybatis集成Spring 注解方式

导航: 聊聊.Mybatis API 聊聊.Mybatis XML 聊聊.Mybatis集成Spring XML 方式 聊聊.Mybatis手写实现 原文地址:https://www.cnblogs.com/xums/p/12642139.html

MyBatis5:MyBatis集成Spring事物管理(上篇)

前言 有些日子没写博客了,主要原因一个是工作,另一个就是健身,因为我们不仅需要努力工作,也需要有健康的身体嘛. 那有看LZ博客的网友朋友们放心,LZ博客还是会继续保持更新,只是最近两三个月LZ写博客相对会慢一些,博客的内容也会更偏向于实战一些,主要是对于工作中遇到一些比较实际性的问题进行总结与研究,并整理成文与网友朋友们分享. 灵感来源于生活,灵感也来源于工作,今天LZ博文的内容就是MyBatis与Spring事物集成的问题,后面的文章写作宗旨就是尽量写得详细点,把东西能给网友朋友们说清楚,OK

Mybatis与Spring集成时都做了什么?

Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势. 本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和Spring的集成过程,有清晰的理解. 以mybatis-spring-2.0.2为例,工程划分六个模块. 一.annotation 模块 定义了@MapperScan和@MapperScans,用于注解方式扫描mapper接口.以及mapper扫描注册器(MapperScannerRegistrar

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 这篇博文我们通过spring与Mybatis集成,开发一个简单用户增删改查的Web项目. 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2.下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis/ 3.下载mybatis-spring-1.2.1版:https://repo1.maven.org/maven2/org/m

Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?

不知道一些同学有没有这种疑问,为什么Mybtis中要配置dataSource,Spring的事务中也要配置dataSource?那么Mybatis和Spring事务中用的Connection是同一个吗?我们常用配置如下 <!--会话工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name=&qu

spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能

软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-framework/ MyBatis是一个基于Java的数据持久层框架,其原名是iBatis,在升级到3.0版本后,更名为MyBatis.https://github.com/mybatis/mybatis-3/ MyBatis Generator是一个MyBatis的代码生成器,通过配置,可自动生成数据操作

重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

一般来说,修改框架的源代码是极其有风险的,除非万不得已,否则不要去修改.但是今天却小心翼翼的重构了Mybatis官方提供的与Spring集成的SqlSessionFactoryBean类,一来是抱着试错的心态,二来也的确是有现实需要. 先说明两点: 通常来讲,重构是指不改变功能的情况下优化代码,但本文所说的重构也包括了添加功能 本文使用的主要jar包(版本):spring-*-4.3.3.RELEASE.jar.mybatis-3.4.1.jar.mybatis-spring-1.3.0.jar