关键词:
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SpringBoot 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:一文吃透SpringBoot整合mybatis-plus(保姆式教程)
文章目录
首先创建一个 SpringBoot 项目,具体创建步骤可以参见我的上一篇博文:SpringBoot 项目的创建与启动。
手动整合 mybatis-plus 详解
1、引入依赖
在 pom.xml 文件中添加相关依赖,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.12</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.kgc</groupId>
<artifactId>springboot04</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot04</name>
<description>springboot04</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--引入mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--引入druid连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、创建基本目录结构
在新创建的springboot项目中的cn.kgc.springboot04包下创建如下图所示的目录结构,再在resources目录下创建mapper目录。
3、配置 application.yml
将下图中 application.properties 文件改为 application.yml 风格的文件
在application.yml文件中添加相关配置,配置代码如下:
server:
port: 8888
spring:
#配置数据源
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql:///java2218?serverTimezone=UTC&useSSL=false&characterEncoding=UTF-8
username: root
password: huanghuang
#配置mybatis-plus
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
type-aliases-package: cn.kgc.springboot04.entity
mapper-locations: classpath:mapper/*.xml
4、在 entity 包下创建实体类
创建一个实体类 Admin,代码如下:
package cn.kgc.springboot04.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@TableName("admin")
@Accessors(chain = true)
public class Admin
@TableId(type = IdType.AUTO)
private long adminId;
@TableField("adminName")
private String adminName;
private long adminPassword;
@TableField(exist = false)
private String sex;
@TableName(“admin”):指定实体类对应数据库中表的名字,Admin类默认对应的表名为admin,当类名不为Admin时,添加此注解可解决此问题。
@Accessors(chain = true) :通过链式调用完成对象创建;如:Admin admin = new Admin().setAdminName(“小明”).setAdminPassword(123456);
@TableId(type = IdType.AUTO) :指定主键自增策略,如果数据库为给主键添加自增属性,通过此注解可以添加自增功能。
@TableField(“adminName”):当实体类的属性名与数据库的字段名不一致时,使用此注解可以指定属性名对应数据库中的哪个字段对应。
@TableField(exist = false):指定当前属性在数据库中不存在对应的字段 忽略该字段的操作。
5、创建 Mapper 接口
创建 AdminMapper 接口,使其继承 BaseMapper 类实现ORM操作,代码如下:
package cn.kgc.springboot04.mapper;
import cn.kgc.springboot04.entity.Admin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface AdminMapper extends BaseMapper<Admin>
其中,BaseMapper提供了常用的CRUD、分页、批量操作等方法。
6、创建 Mapper.xml 文件
创建 AdminMapper.xml 文件,使其的 namespace 为 AdminMapper 接口的路径地址,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kgc.springboot04.mapper.AdminMapper">
</mapper>
7、创建 Service 接口
创建 AdminService 接口,使其继承 IService 类,代码如下:
package cn.kgc.springboot04.service;
import cn.kgc.springboot04.entity.Admin;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AdminService extends IService<Admin>
8、创建 ServiceImpl 实现类
创建 AdminServiceImpl 实现类,使其继承 ServiceImpl 类以及继承 AdminService 接口,代码如下:
package cn.kgc.springboot04.service.impl;
import cn.kgc.springboot04.entity.Admin;
import cn.kgc.springboot04.mapper.AdminMapper;
import cn.kgc.springboot04.service.AdminService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService
9、创建 Controller 控制类
创建 AdminController 控制类,代码如下:
package cn.kgc.springboot04.controller;
import cn.kgc.springboot04.entity.Admin;
import cn.kgc.springboot04.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("admin")
public class AdminController
@Autowired
AdminService adminService;
//查询所有管理员
@RequestMapping("list")
public List<Admin> getList()
return adminService.list();
//增加或者修改一条数据
@RequestMapping("savaOrUpdate")
public String insertOne(Admin admin)
boolean save = adminService.saveOrUpdate(admin);
return ""+save;
//删除一条数据
@RequestMapping("delete")
public String deleteOne(Integer id)
boolean b = adminService.removeById(id);
return ""+b;
10、测试
下面,我们就一一测试不同接口的运行效果吧!
【1】查询所有数据:在浏览器输入(http://localhost:8888/admin/list )
测试结果如下:
【2】插入一条数据:在浏览器输入(http://localhost:8888/admin/savaOrUpdate?adminname=赵敏&adminpassword=123456)
测试结果如下:
添加数据后,数据库数据显示如下:
【3】修改一条数据:在浏览器输入(http://localhost:8888/admin/savaOrUpdate?adminname=赵敏&adminpassword=888888&adminid=1006)
测试结果如下:
修改数据后,数据库数据显示如下:
【4】删除一条数据:在浏览器输入(http://localhost:8888/admin/delete?id=1006)
测试结果如下:
如下图,删除数据后,数据库的这条记录便不存在了。
自动整合 mybatis-plus 详解
1、引入依赖
在 pom.xml 文件中添加相关依赖,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.12</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.kgc</groupId>
<artifactId>springboot05</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot05</name>
<description>springboot05</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--引入mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--引入druid连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、配置 application.yml
将下图中 application.properties 文件改为 application.yml 风格的文件
在application.yml文件中添加相关配置,配置代码如下:
server:
port: 9999
spring:
#配置数据源
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql:///java2218?serverTimezone=UTC&useSSL=false&characterEncoding=UTF-8
username: root
password: huanghuang
#配置mybatis-plus
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
type-aliases-package: cn.kgc.springboot04.entity
mapper-locations: classpath:mapper/*.xml
3、自动整合配置
【1】IDEA 连接 数据库
如下图,打开IDEA 右侧工具栏的 Database ,点击+按钮,选择 Data Source后,选择你使用的数据库类型,我这边使用的是MySQL,所以我选择MySQL,然后进入下一步;
【2】添加数据库到IDEA中
按照下图所示,填入数据库用户名和密码,然后填写需要添加的数据库名称,点击 Apply 和 OK 后,进入下一步。
如果java2218数据库中没有数据,可以点击此处的刷新按钮即可。
【3】选择数据表进行自动创建
第一步:如下图,选择你需要自动创建的表,可以选择多个表,然后右击选择 MybatisX-Generator,进入下一步;
第二步:如下图配置 module path、base package 和 relative package,然后进入下一步;
第三步:如下图配置,选择你安装的 MyBatis-Plus 版本,我安装的是 MyBatis-Plus 3版本,因此选择此项,然后选择 Lombok ,点击 Finish 完成创建
点击完成后,自动生成的文件目录如下图所示:
由图可知,通过次步操作,我们已经自动创建了entity层、 mapper 层和 service 层,大大提高了我们编写的效率。
4、手动创建 Controller 层和测试
Controller 层的业务和测试如 【手动整合 mybatis-plus 详解】中的第9、10步一样。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。
万字详解jvm,让你一文吃透
...享自华为云社区《【JVM】关于JVM,你需要掌握这些|一文彻底吃透JVM系列》,作者:冰河。JDK是什么?JDK是用于支持Java程序开发的最小环境。Java程序设计语言Java虚拟机JavaAPI类库JRE是什么?JRE是支持Java程序运行的标准环... 查看详情
web前端一文带你吃透css(中篇)
前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化继续学习CSS吧!一.CSS盒子模型(BoxModel)1.CSS盒子模型2.元素的宽度和高度二.CSS边框(Border)1.边框样式 查看详情
web前端一文带你吃透html(下篇)
前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化一起学习HTML下篇吧!一.HTML区块1.HTML区块元素2.HTML内联元素3.HTML的div元素4.HTML的span元素 查看详情
万字详解jvm,让你一文吃透(代码片段)
...分享自华为云社区《【JVM】关于JVM,你需要掌握这些|一文彻底吃透JVM系列》,作者: 冰河。JDK是什么?JDK是用于支持Java程序开发的最小环境。Java程序设计语言Java虚拟机JavaAPI类库JRE是什么?JRE是支持Java程序... 查看详情
web前端一文带你吃透css(完结篇)
前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化文章目录一.CSS布局-对齐1.水平对齐1.1元素居中对齐1.2文本居中对齐1.3图片居中对齐1.4使用定位方式实现左右... 查看详情
一文带你吃透java中的继承(代码片段)
继承继承的概念继承的格式定义父类的格式:(一个普通的类定义)publicclass父类名称 //...定义子类的格式:publicclass子类名称extends父类名称 //...举例配合理解:继承中成员变量的访问特点举例配合理解:区分子类方法中重名的三种变... 查看详情
一文带你吃透java中的接口(代码片段)
接口接口的概述和生活举例接口定义的基本格式如何定义一个接口的格式:publicinterface接口名称 //接口内容接口的抽象方法定义/*在任何版本的Java中,接口都能定义抽象方法。格式:publicabstract返回值类型方法名称(参数列表);注意... 查看详情
进程线程与协程傻傻分不清?一文带你吃透!
前言欢迎来到操作系统系列,依然采用图解+大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门本篇开始介绍进程、线程、协程,相信很多小白们对这几个概念理解的不清晰,这里全部给你们安排的明明白白,我们... 查看详情
英雄哪里出来一文带你吃透算法(代码片段)
文章目录前言一、语言基础1、「光天化日学C语言」二、刷题必读1、「LeetCode零基础指南」三、语言入门1、「C语言入门100例」四、算法入门1、「算法零基础100讲」五、算法进阶1、「画解数据结构」2、「算法进阶50讲」3、「LeetC... 查看详情
web前端一文带你吃透html(上篇)(代码片段)
前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化🍁开始前端之旅吧!一.HTML简介1.什么是HTML?2.HTML标签3.HTML元素4.HTML版本5.Web浏览器6.HTM... 查看详情
一文吃透kotlin中眼花缭乱的函数家族...(代码片段)
料想Kotlin开发者对于其庞大繁杂的函数家族必深有感触:包括但不限于简化函数、lambda表达式、匿名函数、高阶函数、扩展函数、内联函数、闭包、顶层函数、局部函数、运算符重载函数等。细看这些叫法,貌似用都会... 查看详情
java多线程系列--掌控面试,一文吃透synchronized锁
前言各位亲爱的读者朋友,我正在创作Java多线程系列文章,本篇我们将分析重点内容:锁锁是面试中的常客,也是多线程编码中必不可少的内容,无论是为了“面试胜利”,还是“写出高质量的代码”ÿ... 查看详情
spring一文带你吃透aop面向切面编程技术(上篇)(代码片段)
个人主页:几分醉意的CSDN博客_传送门文章目录💖AOP概念✨AOP作用✨AOP术语✨什么时候需要用AOP💖Aspectj框架介绍✨Aspectj的5个通知注解✨Aspectj切入点表达式✨前置通知@Before💖投票传送门(欢迎伙伴们投票... 查看详情
springboot整合rabbitmq实现死信队列(代码片段)
...bitMQ实现生产消费(7种通讯方式),本文基于SpringBoot实现RabbitMQ中的死信队列和延迟队列。概 查看详情
进程线程与协程傻傻分不清?一文带你吃透!
前言欢迎来到操作系统系列,依然采用图解+大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门本篇开始介绍进程、线程、协程,相信很多小白们对这几个概念理解的不清晰,这里全部给你们安... 查看详情
吃透这份java高级工程师面试497题解析,一文全懂
蚂蚁金服一面算法题,给了长度为N的有重复元素的数组,要求输出第10大的数。需要在2小时内完成。二面自我介绍目前在部门做什么,业务简单介绍下,内部有哪些系统,作用和交互过程说下Dubbo踩过哪些坑... 查看详情
jvm关于jvm,你需要掌握这些|一文彻底吃透jvm系列(代码片段)
写在前面最近,一直有小伙伴让我整理下关于JVM的知识,经过十几天的收集与整理,初版算是整理出来了。希望对大家有所帮助。JDK是什么?JDK是用于支持Java程序开发的最小环境。Java程序设计语言Java虚拟机JavaAPI... 查看详情
jvm关于jvm,你需要掌握这些|一文彻底吃透jvm系列(代码片段)
写在前面最近,一直有小伙伴让我整理下关于JVM的知识,经过十几天的收集与整理,初版算是整理出来了。希望对大家有所帮助。JDK是什么?JDK是用于支持Java程序开发的最小环境。Java程序设计语言Java虚拟机JavaAPI... 查看详情