MyBatis与Spring的整合

在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。

基于框架的程序要成功运行,对于JAR包的版本,配置文件的正确性有着苛刻的要求,任何一个地方出错了,都会导致框架程序运行失败。 请务必严格按照教程的指导,完全模仿操作,直到成功看到运行效果。 第一次成功之后,信心,思路都会有较好的铺垫,然后再根据自己的疑惑,在“成功”的代码上做原本想做的改动和调整,这样可以大大节约学习的时间,提高效率,切勿一来就擅自改动,给自己的学习制造障碍!!!
链接:https://pan.baidu.com/s/1AeRffxjm3wU6kegtrJxIGA?pwd=5w5g
提取码:5w5g

 数据库内容:

create database db_mybatis;
use db_mybatis;
create table t_user(
id int(32) primary key auto_increment ,
username varchar(30) ,
jobs varchar(30) ,
phone varchar(16)
);
insert into t_user values(1,'zyy','teacher','18865123456');
insert into t_user values(2,'wrr','student','18865124567');
insert into t_user values(3,'xxc','student','18869872126');

一.整合环境搭建

 1.准备所需要的jar包

(1).所需Spring框架的jar包

 (2).所需MyBatis框架的jar包

 (3).MyBatis与Spring整合所需的中间jar包

 (4).数据库驱动jar包

 (5).数据源所需jar包

 2.编写配置文件

 (1).db.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/db_mybatis
jdbc.username=root
jdbc.password=root
jdbc.maxTotal=30
jdbc.maxIdle=10
jdbc.initialSize=5

 除了配置连接数据库的4个基本项外,还配置数据库连接池的最大连接数(maxTotal),最大空闲连接数(maxIdle)以及初始化连接数(initialSize)。

(2).applicationContext.xml

<?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:aop="http://www.springframework.org/schema/aop"
	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:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/jdbc 
     http://www.springframework.org/schema/jdbc/spring-jdbc-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/aop 
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	
	<context:property-placeholder location="classpath:db.properties"/>
	
	<!-- 配置数据源 -->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
	    <property name="driverClassName" value="${jdbc.driver}" />   
	    <property name="url" value="${jdbc.url}"/>   
	    <property name="username" value="${jdbc.username}"/>  
	    <property name="password" value="${jdbc.password}"/>   	
	    <property name="maxTotal" value="${jdbc.maxTotal}"/>
	    <property name="maxIdle" value="${jdbc.maxIdle}"/>
	    <property name="initialSize" value="jdbc.initalSize"/>
   </bean>
	
	<!-- 事务管理器,依赖于数据源 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
	</bean>
	
	<!-- 注册事务管理器驱动,开启事务注解 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
	<!-- 配置MyBatis工厂 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:mybatis-config.xml"/>
	</bean>
     
     <!-- 配置实体类 -->

	
</beans>

(3).mybatis-config.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>
      <package name="po"/>
    </typeAliases>
    <mappers>
    <!-- 配置指定mapper文件 -->
    </mappers>
</configuration>

二.整合

1.传统DAO方式的开发整合

采用传统DAO开发方式进行MyBatisSpring框架的整合时,我们需要编写DAO接口以及接口的实现类,并且需要向DAO实现类中注入SqlSessionFactory,然后在方法体内通过 SqlSessionFactory创建SqlSession

SqlSessionTemplate:mybatis-spring的核心类,它负责管理MyBatis的SqlSession,调用MyBatis的SQL方法。当调用SQL方法时,SqlSessionTemplate将会保证使用的SqlSession和当前Spring的事务是相关的,他还管理SqlSession的生命周期,包含必要的管理,提交和回滚操作。

SqlSessionDaoSupport:一个抽象支持类,他继承DaoSupport类,主要是作为Dao的基类来使用,可以通过SqlSessiondaoSupport类的getSqlSession()方法来获取所需的SqlSession。

(1).在src目录下创建一个包命名为po,并在包下创建User类

package po;
public class User {
	private Integer id;
	private String username;
	private String jobs;
	private String phone;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getJobs() {
		return jobs;
	}
	public void setJobs(String jobs) {
		this.jobs = jobs;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
	}
}

(2).在po包下创建映射文件UserMapper.xml

<?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">
<mapper namespace="po.UserMapper">
	<!--根据用户编号获取用户信息 -->
	<select id="findUserById" parameterType="Integer" resultType="User">
		select * from t_user where id=#{id}
	</select>
</mapper>

(3).在mybatis-config.xml中配置映射文件UserMapper.xml的位置

<mapper resource="po/UserMapper.xml"/>

(4).在src目录下创建一个包命名为dao,在包内创建UserDao接口,在接口内编写一个通过id查询用户的的方法findUserById()。

package dao;

import po.User;

public interface UserDao {
public User findUserById(Integer id) ;

}

(5).在src目录下创建一个包命名为impl,在包内创建UserDaoImpl类,在类中实现方法findUserById()。

package impl;
import dao.UserDao;
import po.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

	public User findUserById(Integer id) {
		return this.getSqlSession().selectOne("po.UserMapper.findUserById", id);
	}
}

(6).在applicationContext.xml中编写实例化UserDaoImpl的配置

     <bean id="userDao" class="impl.UserDao.Impl">
     <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
     </bean>

(7).在src目录下创建包命名为test,在包内创建UserDaoTest01,并在类中编写测试方式.

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import dao.UserDao;
import mapper.UserMapper;
import po.User;
public class UserDaoTest01 {
public static void main(String[] args) {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserDao userDao=(UserDao)applicationContext.getBean("userDao");
	//UserDao userDao=applicationContext.getBean(UserDao.class);
	User user=userDao.findUserById(1);
	System.out.println(user);
}

}

 运行结果:

2.Mapper接口方式的开发整合

在MyBatis-Spring项目中,虽然使用传统的Dao开发方式可以实现所需功能,但是采用这种方式在实现类中会出现大量的重复的代码,在方法中也需要指定映射文件中执行语句的id,并且不能保证编写时id的正确性。为此,我们可以使用MyBatis提供的另一种编程方式,即使用Mapper接口编程。

(1).在src目录下创建一个包命名为mapper,在包内创建UserMapper接口以及对应的映射文件UserMapper.xml。

package mapper;
import po.User;
public interface UserMapper {
	public User findUserById(Integer id);
}
<?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">
<mapper namespace="mapper.UserMapper">
	<!--根据用户编号获取用户信息 -->
	<select id="findUserById" parameterType="Integer" resultType="User">
		select * from t_user where id=#{id}
	</select>
</mapper>

(2).在mybatis的配置文件中引入相应的映射文件

<mapper resource="po/UserMapper.xml" />

(3).在applicationContext.xml中设置相应的Bean

	<bean id="userMapper2" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="mapper.UserMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

(4).在test包下创建测试类UserDaoTest02

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import mapper.UserMapper;

public class UserDaoTest02 {
public static void main(String[] args) {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
	UserMapper userMapper=(UserMapper)applicationContext.getBean("userMapper2");
	po.User user=  userMapper.findUserById(1);
	System.out.println(user);
}
}

 (5).基于MapperScannerConfigurer的整合

在实际项目中,Dao层会包含很多接口,如果每一个接口都要在Spring配置文件中配置,那么不仅会增加工作量,还会使得Spring配置文件很臃肿。为此,mybatis-spring团队提供了一种自动扫描的形式来配置MyBatis中的映射器——采用MapperScannerConfigurer类。MapperScannerConfigurer类的使用很简单,只需要在Spring中做以下配置:

	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="mapper" />
	</bean>

 在通常情况下,MapperScannerConfigurer类在使用时只需要通过basePackage属性指定需要扫描的包即可。spring会自动地通过包中接口生成映射器。这使得开发人员可以在编写很少代码的情况下完成对映射器的配置,从而提高开发效率。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无忧#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值