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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 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的操作更简单一些。

今日小作业:

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
SQL Java 数据库连接
SpringBoot整合Mybatis
SpringBoot整合Mybatis
21 2
|
16天前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
29 6
|
18天前
|
运维 监控 安全
云HIS医疗管理系统源码——技术栈【SpringBoot+Angular+MySQL+MyBatis】
云HIS系统采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分,功能易扩展;支持多样化灵活配置,提取大量公共参数,无需修改代码即可满足不同客户需求;服务组织合理,功能高内聚,服务间通信简练。
32 4
|
5天前
|
Java 数据库连接 Spring
Spring 整合mybatis
Spring 整合mybatis
17 2
|
1天前
|
JSON Java 数据格式
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
|
2天前
|
Java 关系型数据库 MySQL
保姆级教程——将springboot项目部署到阿里云服务器包含环境配置(小白包会)
本文档详细介绍了将SpringBoot项目部署到阿里云服务器的步骤。首先,通过Xshell连接服务器,使用公网IP地址。接着,下载JDK的Linux版本,使用XFTP上传并解压,配置环境变量。然后,安装MySQL 5.7,包括下载YUM源、安装、启动服务以及修改root密码和开启远程访问。最后,将SpringBoot项目打包成jar,上传至服务器,使用`java -jar`命令运行,通过`nohup`确保服务持续运行。配置安全组以允许远程访问。
|
9天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
29 4
|
11天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
11天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
11天前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。