SpringBoot2.x系列教程28--SpringBoot中整合Mybatis框架实现数据库CRUD操作

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 前言在上一章节中,我带大家在Spring Boot中整合了JdbcTemplate,利用JdbcTemplate感觉会比较麻烦,所以我让各位思考有没有更简单易用的实现方式。那么接下来在这一章节中,我会继续带领大家学习在Spring Boot中整合Mybatis框架,利用Mybatis来实现数据库的操作。一. Mybatis简介1. MyBatis概述MyBatis是一款优秀的持久层框架,它本来是Apache的一个开源项目iBatis。在2010年的时候,这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,在2013年

前言

在上一章节中,我带大家在Spring Boot中整合了JdbcTemplate,利用JdbcTemplate感觉会比较麻烦,所以我让各位思考有没有更简单易用的实现方式。那么接下来在这一章节中,我会继续带领大家学习在Spring Boot中整合Mybatis框架,利用Mybatis来实现数据库的操作。

一. Mybatis简介

1. MyBatis概述

MyBatis是一款优秀的持久层框架,它本来是Apache的一个开源项目iBatis。在2010年的时候,这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,在2013年11月的时候又迁移到了Github。

iBATIS一词来源于“internet”和“abatis”的组合,后来改名为了Mybatis。

2. Mybatis特点

  • 支持定制化 SQL、存储过程以及高级映射。
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射。
  • 提供对象关系映射标签,支持对象关系组建维护。
  • 提供xml标签,支持编写动态SQL。

3. Mybatis的发展历程

Mybatis 初期使用比较麻烦,需要各种配置文件、实体类、Dao 层映射关联、还有一大推其它配置。

然后 Mybatis 就发现了这种弊端,为了解决这种弊端,就开发了generator逆向工程,可以根据表结构自动生成实体类、配置文件和 Dao 层代码,可以减轻一部分开发量。

后期也进行了大量的优化,可以使用注解进一步简化开发,自动管理 Dao 层和配置文件等。到了今天Mybatis进一步简化到极致,那就是mybatis-spring-boot-starter 的出现。我们可以利用 Spring Boot 整合 Mybatis,即使完全不用配置文件,也可以简单配置轻松实现数据库操作。

二. Spring Boot中整合Mybatis

接下来我就讲解在SpringBoot中实现Mybatis的整合,我们整合的方式一般有2种:

  • 1. 注解方式;
  • 2. XML方式。

由于注解方式更为简单易用,所以本案例的讲解会以注解方式实现的案例。

1. 创建Web项目

按照之前的经验,我们先创建一个SpringBoot的Web程序,具体过程略,各位可以参考下图创建自己的项目。

2. 添加依赖包

接下来我们需要添加几个核心依赖包。

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

3. 添加配置文件

然后我们要创建一个applicaiton.yml配置文件,在这里配置数据库的相关信息。大家注意,Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中。

spring:  datasource:    url: jdbc:mysql://localhost:3306/db4?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: syc
    driver-class-name: com.mysql.jdbc.Driver #驱动mybatis:  type-aliases-package: com.yyg.boot.mapper

配置文件中的核心配置含义:

spring.datasource.url: 数据库连接字符串;
spring.datasource.username: 数据库用户名;
spring.datasource.password: 数据库密码;
spring.datasource.driver-class-name: 驱动类型(注意MySQL 8.0的值是com.mysql.cj.jdbc.Driver和之前不同);
mybatis.type-aliases-package 配置mapper包名。

4. 创建DataSource配置类(可以省略)

这里我使用用Druid提供的DataSource作为数据源,来替换默认的DataSource。

packagecom.yyg.boot.config;
importcom.alibaba.druid.pool.DruidDataSource;
importlombok.Data;
importorg.mybatis.spring.annotation.MapperScan;
importorg.springframework.boot.context.properties.ConfigurationProperties;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.ComponentScan;
importorg.springframework.context.annotation.Configuration;
importjavax.sql.DataSource;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description 第二种配置数据源的方式*/@Data@ComponentScan@Configuration@ConfigurationProperties(prefix="spring.datasource")
@MapperScan("com.yyg.boot.mapper")
publicclassDbConfig {
privateStringurl;
privateStringusername;
privateStringpassword;
@BeanpublicDataSourcegetDataSource() {
DruidDataSourcedataSource=newDruidDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
returndataSource;
    }
}

我们可以在这个类上添加@MapperScan("com.yyg.boot.mapper"),指定Mapper接口所在包位置。

5. 创建实体类

然后封装一个实体类,对应我们的数据库用户表。

packagecom.yyg.boot.domain;
importlombok.Data;
importlombok.ToString;
/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/@Data@ToStringpublicclassUser {
privateLongid;
privateStringusername;
privateStringbirthday;
privateStringsex;
privateStringaddress;
}

6. 创建UserMapper接口

这里我创建一个Mapper接口类,封装几个数据库操作方法,方法上面使用注解来实现数据库增删改查操作。

packagecom.yyg.boot.mapper;
importcom.yyg.boot.domain.User;
importorg.apache.ibatis.annotations.*;
/*** @Author 一一哥Sun* @Date Created in 2020/3/31* @Description 在Mybatis的Mapper接口中,增删改查都有对应的注解.@Insert,@Select,@Delete,@Update*/publicinterfaceUserMapper {
@Select("select * from user where id = #{id}")
UserqueryUserById(@Param(value="id") intid);
@Insert("insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})")
voidinsertUser(Useruser);
@Update("UPDATE user SET sex=#{sex} WHERE username=#{username}")
voidupdateUser(Useruser);
@Delete("DELETE FROM user WHERE id =#{id}")
voiddeleteById(@Param("id") intid);
}

Mapper中常用注解含义:

  • @Select 是查询类的注解,所有的查询均使用这个;  
  • @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰;  
  • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值;  
  • @Update 负责修改,也可以直接传入对象;  
  • @delete 负责删除。  

7. 创建Controller控制器

我们再创建一个Controller,里面定义几个RESTful风格的接口。

packagecom.yyg.boot.web;
importcom.yyg.boot.domain.User;
importcom.yyg.boot.mapper.UserMapper;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.*;
/*** @Author 一一哥Sun* @Date Created in 2020/3/31* @Description Description*/@RestController@RequestMapping("/user")
publicclassUserController {
@AutowiredprivateUserMapperuserMapper;
@GetMapping("/{id}")
publicUserfindUserById(@PathVariable("id") Integerid) {
returnuserMapper.queryUserById(id);
    }
@PostMapping("")
publicStringaddUser(@RequestBodyUseruser) {
userMapper.insertUser(user);
return"success";
    }
@PostMapping("/update")
publicStringupdateUser(@RequestBodyUseruser) {
userMapper.updateUser(user);
return"success";
    }
@DeleteMapping("/{id}")
publicStringdelUserById(@PathVariable("id") Integerid) {
userMapper.deleteById(id);
return"success";
    }
}

8. 创建Application入口类

最后创建一个项目入口类,另外我们也可以在入口类上添加@MapperScan("com.yyg.boot.mapper")注解,指定Mapper接口所在包位置。

packagecom.yyg.boot;
importorg.mybatis.spring.annotation.MapperScan;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
/*** @Author 一一哥Sun* @Date Created in 2020/3/31* @Description Description*/@SpringBootApplication//@MapperScan("com.yyg.boot.mapper")publicclassMybatisApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
    }
}

9. 启动项目进行测试

最后就把项目启动起来,然后进行测试即可。

9.1 测试查询功能

9.2 测试添加功能

此时可以看到数据库中多了一个id=28的新的记录。

9.3 测试修改功能

此时可以看到数据库中的sex数据被修改了。

9.4 测试删除功能

此时可以看数据库的表中,已经没有了id为28的数据!

结语

这样我们就在SpringBoot中整合了Mybatis,并实现了数据库的增删改查操作,整体而言,比JdbcTemplate的操作更简单一些。

今日小作业:

请思考一下,有没有更简单的方式实现数据库操作呢?

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
111 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
18天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
33 1
持久层框架MyBatisPlus
|
2天前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
6 1
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
345 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
2月前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
SpringBoot 整合jdbc和mybatis
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
95 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
51 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
下一篇
无影云桌面