首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【Spring教程12】Spring框架实战:Spring整合Mybatis全面深入详解

  • 24-03-05 07:20
  • 3911
  • 9566
blog.csdn.net

目录

  • 1 Spring整合Mybatis思路分析
    • 1.1 环境准备
      • 1.1.1 步骤1:准备数据库表
      • 1.1.2 步骤2:创建项目导入jar包
      • 1.1.3 步骤3:根据表创建模型类
      • 1.1.4 步骤4:创建Dao接口
      • 1.1.6 步骤6:添加jdbc.properties文件
      • 1.1.7 步骤7:添加Mybatis核心配置文件
      • 1.1.8 步骤8:编写应用程序
      • 1.1.9 步骤9:运行程序
    • 1.2 整合思路分析
  • 2 Spring整合Mybatis
    • 2.1 步骤1:项目中导入整合需要的jar包
    • 2.2 步骤2:创建Spring的主配置类
    • 2.3 步骤3:创建数据源的配置类
    • 2.4 步骤4:主配置类中读properties并引入数据源配置类
    • 2.5 步骤5:创建Mybatis配置类并配置SqlSessionFactory
    • 2.6 步骤6:主配置类中引入Mybatis配置类
    • 2.7 步骤7:编写运行类
    • 2.8 步骤8:运行程序

欢迎大家回到《 Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《 如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《 IOC/DI注解开发管理第三方bean》

在这里插入图片描述
学习到这里,已经对Spring有一个简单的认识了,Spring有一个容器,叫做IoC容器,里面保存bean。在进行企业级开发的时候,其实除了将自己写的类让Spring管理之外,还有一部分重要的工作就是使用第三方的技术。前面已经讲了如何管理第三方bean了,下面结合IoC和DI,整合Mybatis,进一步加深对Spring的使用理解。

1 Spring整合Mybatis思路分析

1.1 环境准备

在准备环境的过程中,我们也来回顾下Mybatis开发的相关内容:

1.1.1 步骤1:准备数据库表

Mybatis是来操作数据库表,所以先创建一个数据库及表

create database spring_db character set utf8;
use spring_db;
create table tbl_account(
	id int primary key auto_increment,
	name varchar(35),
	money double
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.1.2 步骤2:创建项目导入jar包

项目的pom.xml添加相关依赖

<dependencies>
	<dependency>
		<groupId>org.springframeworkgroupId>
		<artifactId>spring-contextartifactId>
		<version>5.2.10.RELEASEversion>
	dependency>
	<dependency>
		<groupId>com.alibabagroupId>
		<artifactId>druidartifactId>
		<version>1.1.16version>
	dependency>
	<dependency>
		<groupId>org.mybatisgroupId>
		<artifactId>mybatisartifactId>
		<version>3.5.6version>
	dependency>
	<dependency>
		<groupId>mysqlgroupId>
		<artifactId>mysql-connector-javaartifactId>
		<version>5.1.47version>
	dependency>
dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

1.1.3 步骤3:根据表创建模型类

public class Account implements Serializable {
	private Integer id;
	private String name;
	private Double money;
	//setter...getter...toString...方法略
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.1.4 步骤4:创建Dao接口

public interface AccountDao {
	@Insert("insert into tbl_account(name,money)values(#{name},#{money})")
	void save(Account account);
	@Delete("delete from tbl_account where id = #{id} ")
	void delete(Integer id);
	@Update("update tbl_account set name = #{name} , money = #{money} where
	id = #{id} ")
	void update(Account account);
	@Select("select * from tbl_account")
	List<Account> findAll();
	@Select("select * from tbl_account where id = #{id} ")
	Account findById(Integer id);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

1.1.5 步骤5:创建Service接口和实现类

public interface AccountService {
	void save(Account account);
	void delete(Integer id);
	void update(Account account);
	List<Account> findAll();
	Account findById(Integer id);
}
@Service
public class AccountServiceImpl implements AccountService {
	@Autowired
	private AccountDao accountDao;
	public void save(Account account) {
		accountDao.save(account);
	}
	public void update(Account account){
		accountDao.update(account);
	}
	public void delete(Integer id) {
		accountDao.delete(id);
	}
	public Account findById(Integer id) {
		return accountDao.findById(id);
	}
	public List<Account> findAll() {
		return accountDao.findAll();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

1.1.6 步骤6:添加jdbc.properties文件

resources目录下添加,用于配置数据库连接四要素

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false
jdbc.username=root
jdbc.password=root
  • 1
  • 2
  • 3
  • 4

useSSL:关闭MySQL的SSL连接

1.1.7 步骤7:添加Mybatis核心配置文件


DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	
	<properties resource="jdbc.properties">properties>
	
	<typeAliases>
		<package name="com.itheima.domain"/>
	typeAliases>
	
	<environments default="mysql">
		<environment id="mysql">
		<transactionManager type="JDBC">transactionManager>
		<dataSource type="POOLED">
			<property name="driver" value="${jdbc.driver}">property>
			<property name="url" value="${jdbc.url}">property>
			<property name="username" value="${jdbc.username}">
			property>
			<property name="password" value="${jdbc.password}">
			property>
		dataSource>
		environment>
	environments>
	
	<mappers>
		<package name="com.itheima.dao">package>
	mappers>
configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

1.1.8 步骤8:编写应用程序

public class App {
	public static void main(String[] args) throws IOException {
		// 1. 创建SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
		SqlSessionFactoryBuilder();
		// 2. 加载SqlMapConfig.xml配置文件
		InputStream inputStream =
		Resources.getResourceAsStream("SqlMapConfig.xml.bak");
		// 3. 创建SqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory =
		sqlSessionFactoryBuilder.build(inputStream);
		// 4. 获取SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 5. 执行SqlSession对象执行查询,获取结果User
		AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
		Account ac = accountDao.findById(1);
		System.out.println(ac);
		// 6. 释放资源
		sqlSession.close();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

1.1.9 步骤9:运行程序

在这里插入图片描述

1.2 整合思路分析

Mybatis的基础环境我们已经准备好了,接下来就得分析下在上述的内容中,哪些对象可以交给Spring来管理?

  • Mybatis程序核心对象分析
    在这里插入图片描述
    从图中可以获取到,真正需要交给Spring管理的是SqlSessionFactory
  • 整合Mybatis,就是将Mybatis用到的内容交给Spring管理,分析下配置文件
    在这里插入图片描述
    说明:
    • 第一行读取外部properties配置文件,Spring有提供具体的解决方案@PropertySource ,需要交给Spring
    • 第二行起别名包扫描,为SqlSessionFactory服务的,需要交给Spring
      第三行主要用于做连接池,Spring之前我们已经整合了Druid连接池,这块也需要交给Spring
    • 前面三行一起都是为了创建SqlSession对象用的,那么用Spring管理SqlSession对象吗?回忆下SqlSession是由SqlSessionFactory创建出来的,所以只需要将SqlSessionFactory交给Spring管理即可。
    • 第四行是Mapper接口和映射文件[如果使用注解就没有该映射文件],这个是在获取到SqlSession以后执行具体操作的时候用,所以它和SqlSessionFactory创建的时机都不在同一个时间,可能需要单独管理。

2 Spring整合Mybatis

前面我们已经分析了Spring与Mybatis的整合,大体需要做两件事,
第一件事是:Spring要管理MyBatis中的SqlSessionFactory
第二件事是:Spring要管理Mapper接口的扫描
具体该如何实现,具体的步骤为:

2.1 步骤1:项目中导入整合需要的jar包

<dependency>
	
	<groupId>org.springframeworkgroupId>
	<artifactId>spring-jdbcartifactId>
	<version>5.2.10.RELEASEversion>
dependency>
<dependency>
	
	<groupId>org.mybatisgroupId>
	<artifactId>mybatis-springartifactId>
	<version>1.3.0version>
dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.2 步骤2:创建Spring的主配置类

//配置类注解
@Configuration
//包扫描,主要扫描的是项目中的AccountServiceImpl类
@ComponentScan("com.itheima")
public class SpringConfig {
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3 步骤3:创建数据源的配置类

在配置类中完成数据源的创建

public class JdbcConfig {
	@Value("${jdbc.driver}")
	private String driver;
	@Value("${jdbc.url}")
	private String url;
	@Value("${jdbc.username}")
	private String userName;
	@Value("${jdbc.password}")
	private String password;
	@Bean
	public DataSource dataSource(){
		DruidDataSource ds = new DruidDataSource();
		ds.setDriverClassName(driver);
		ds.setUrl(url);
		ds.setUsername(userName);
		ds.setPassword(password);
		return ds;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2.4 步骤4:主配置类中读properties并引入数据源配置类

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import(JdbcConfig.class)
public class SpringConfig {
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.5 步骤5:创建Mybatis配置类并配置SqlSessionFactory

public class MybatisConfig {
	//定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象
	@Bean
	public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource)	{
		SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
		//设置模型类的别名扫描
		ssfb.setTypeAliasesPackage("com.itheima.domain");
		//设置数据源
		ssfb.setDataSource(dataSource);
		return ssfb;
	}
	//定义bean,返回MapperScannerConfigurer对象
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer(){
		MapperScannerConfigurer msc = new MapperScannerConfigurer();
		msc.setBasePackage("com.itheima.dao");
		return msc;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

说明:

  • 使用SqlSessionFactoryBean封装SqlSessionFactory需要的环境信息
    在这里插入图片描述

    • SqlSessionFactoryBean是前面我们讲解FactoryBean的一个子类,在该类中将SqlSessionFactory的创建进行了封装,简化对象的创建,我们只需要将其需要的内容设置即可。
    • 方法中有一个参数为dataSource,当前Spring容器中已经创建了Druid数据源,类型刚好是DataSource类型,此时在初始化SqlSessionFactoryBean这个对象的时候,发现需要使用DataSource对象,而容器中刚好有这么一个对象,就自动加载了DruidDataSource对象。
  • 使用MapperScannerConfigurer加载Dao接口,创建代理对象保存到IOC容器中
    在这里插入图片描述

    • 这个MapperScannerConfigurer对象也是MyBatis提供的专用于整合的jar包中的类,用来处理原始配置文件中的mappers相关配置,加载数据层的Mapper接口类
    • MapperScannerConfigurer有一个核心属性basePackage,就是用来设置所扫描的包路径

    2.6 步骤6:主配置类中引入Mybatis配置类

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.7 步骤7:编写运行类

在运行类中,从IOC容器中获取Service对象,调用方法获取结果

public class App2 {
	public static void main(String[] args) {
		ApplicationContext ctx = new
		AnnotationConfigApplicationContext(SpringConfig.class);
		AccountService accountService = ctx.getBean(AccountService.class);
		Account ac = accountService.findById(1);
		System.out.println(ac);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.8 步骤8:运行程序

在这里插入图片描述
支持Spring与Mybatis的整合就已经完成了,其中主要用到的两个类分别是:

  • SqlSessionFactoryBean
  • MapperScannerConfigurer
源码获取~定制咨询~非开源
微信名片
注:本文转载自blog.csdn.net的老牛源码的文章"https://biyesheji365.blog.csdn.net/article/details/134818779"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top