SpringBoot操作数据库--MybatisPlus【JSB系列之007】

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SpringBoot操作数据库--MybatisPlus【JSB系列之007】

本系列环境

环境 win11
工具 idea 2017
jdk 1.8
数据库 mysql5.5
maven 3.2.1
项目导入方式 maven 导入
数据库前端工具 mysql-front (navicat 也可以)

数据库前端工具:mysql-front (navicat 也可以)

主要是这些跟PHPStudy 2018 整合了,所以有的时候懒的打开navicat

————————————————

MybatisPlus

mybatisplus 前身是iBatis ,然后发展成了myBatis

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

在使用Mybatis进行项目开发的时候,最繁琐的事情就是实体类,dao接口,mapper.xml文件的编写,几乎每个表都需要对应写一套,并且大部分的工作量都在最基本的增删改查上。如果表中的字段进行了修改,那么实体类,mapper文件甚至dao接口都要进行修改。

MybatisPlus

MybatisPlus 可以认为一个Mybatis的外挂,用了这个技术之后 可以不写mapper文件 可以不写dao接口中的方法 然后实现增删改查 分页查询 条件查询 等等

MybatisPlus的使用

注意:要首先删除Mybatis的依赖

因为Mybatisplus中包含有Mybatis的依赖 不需要独立导入 容易jar包冲突

要在pom.xml里引入mybatis-plus

<dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>3.3.2</version>
   </dependency>

在项目的yml 文件里,这里是mybatis-plus

那问题来了,尤其是以前学过mybatis或ibatis的人找不到对应关系。其实,可以再一次的看JPA的部分。

SpringBoot操作数据库jpa–SB系列之006

entity

@Data
@TableName("sys_department")// 映射
public class Sys_Department {
    private int id;
    private int pid;//上级部门
    private String name;//部门名称
    private String description;//描述
    private long create_time;//创建时间
    private String create_by;//创建人
    private long update_time;//修改时间
    private String update_by;//修改人
    private int del_flag;//是否删除
    private String sub_ids;//所有子部门id
//    get set 自己生成吧

Mapper

然后DAO层呢? 这里取代的是Mapper(跟mybatis差不多)

代码如下:

@Repository
@Mapper
public interface Sys_DepartmentMapper extends BaseMapper<Sys_Department> {
}

你没有看错,一行,只有这一行接口。

Service

那一般用到的增删改查以又怎么使用?

@Service
public class Sys_DepartmentServiceImpl implements Sys_DepartmentService {
    @Autowired
    private Sys_DepartmentMapper sys_departmentMapper;
    public List<Sys_Department> getAllSys_Departments() {
        List<Sys_Department> sys_departments = sys_departmentMapper.selectList(null);
        System.out.println(sys_departments);
        return sys_departments;
    }
    @Override
    public Sys_Department getSys_DepartmentById(Integer id) {
        return sys_departmentMapper.selectById(id);
    }
    @Override
    public boolean insertSys_Department(Sys_Department sys_department) {
        return sys_departmentMapper.insert(sys_department) > 0 ? true : false;
    }
    @Override
    public boolean deleteSys_DepartmentById(Integer id) {
        return sys_departmentMapper.deleteById(id) > 0 ? true : false;
    }
    @Override
    public boolean updateSys_Department(Sys_Department sys_department) {
        return sys_departmentMapper.updateById(sys_department) > 0 ? true : false;
    }
    @Override
    public Sys_DepartmentVo queryList(Integer current, Integer size) {
        Sys_DepartmentVo sys_departmentVo = new Sys_DepartmentVo();
        IPage<Sys_Department> page = new Page<>(current, size);
        sys_departmentMapper.selectPage(page, null);
        sys_departmentVo.setCurrent(current);
        sys_departmentVo.setSize(size);
        sys_departmentVo.setTotal(page.getTotal());
        sys_departmentVo.setSys_departmentList(page.getRecords());
        return sys_departmentVo;
    }
}

不但能增删改查,而且还带一个分页的查询。

控制层

事实上控制层的代码还是相当的丰富的。

@RestController
public class Sys_DepartmentController {
    @Autowired
    private Sys_DepartmentService sysDepartmentService;
    @GetMapping("/getAllSys_Departments")
    public String getAllSysDepartments() {
        return sysDepartmentService.getAllSys_Departments().toString();
    }
    @GetMapping("/getSys_DepartmentById/{id}")
    public Sys_Department getSys_DepartmentById(@PathVariable Integer id) {
        return sysDepartmentService.getSys_DepartmentById(id);
    }
    @GetMapping("/insertSys_Department")
    public String insertSys_Department() {
        Sys_Department sys_department = new Sys_Department();
        sys_department.setName("企划营销部-05");
        sys_department.setPid(15);
        sys_department.setDescription("企划营销部-05");
        sys_department.setCreate_time((new Date()).getTime());
        sys_department.setCreate_by(Integer.toString(3));
        sys_department.setUpdate_time((new Date()).getTime());
        sys_department.setUpdate_by(null);
        sys_department.setDel_flag(0);
        sys_department.setSub_ids(null);
        boolean result = sysDepartmentService.insertSys_Department(sys_department);
        if (result) {
            return "添加部门成功!";
        } else {
            return "添加部门失败!";
        }
    }
    @GetMapping("/deleteSys_DepartmentById/{id}")
    public String deleteSys_DepartmentById(@PathVariable Integer id) {
        boolean result = sysDepartmentService.deleteSys_DepartmentById(id);
        if (result) {
            return "删除部门成功!";
        } else {
            return "删除部门失败!";
        }
    }
    @GetMapping("/updateSys_Department")
    public String updateSys_Department() {
        Sys_Department sys_department = new Sys_Department();
        sys_department.setId(12);
        sys_department.setPid(15);
        sys_department.setDescription("企划销售部-031");
        sys_department.setCreate_time((new Date()).getTime());
        sys_department.setCreate_by(Integer.toString(3));
        sys_department.setUpdate_time((new Date()).getTime());
        sys_department.setUpdate_by(null);
        sys_department.setDel_flag(1);
        sys_department.setSub_ids(null);
        boolean result = sysDepartmentService.updateSys_Department(sys_department);
        if (result) {
            return "修改部门成功!";
        } else {
            return "修改部门失败!";
        }
    }
    @GetMapping("/querySys_Department/{current}/{size}")
    public Sys_DepartmentVo queryList(@PathVariable Integer current, @PathVariable Integer size) {
        return sysDepartmentService.queryList(current, size);
    }
}

可以看出,增,删,改,查单个,查所有,查分页,都有了。

对于一般的字典表而言,通用的功能都有了。特殊的框架也没有办法预置上。

#分页的处理

要注意的是,这里有一个SQL级的分页。(这也是效率最高的分页方式)

@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }
}

跑起来!

说这么多,看了这么多,还是要实践出来才是硬道理!文章的代码及SQL都在本文最后的资源包里

再重新运行插入成功的URL。

修改失败。出现了一个这样的报错

这里就可以看出来mysql 的不友好了。明明是SQL执行的时候,没有更新到要更新的内容。结果页面显示更新失败,会让很多人感觉是更新不成功,程序运行失败了。

但是其实不是!

检查SQL以及参数,会发现这里更新的不是id=1 的,而是更新了一条id=12的数据。

直接进mysql-front,把里面的数据的id改成12

查找操作。

查所有

查单个查分页

时间关系。就没有搞很多条数据去搞一个一页10条的数据了。

有兴趣的可以试一下。

总结

提示:这里对文章进行总结:

MybatisPlus 不能再引入Mybatis , 从一般的日常操作上,MybatisPlus更加的暴力,简便,甚至都不知道写什么代码了。

配送资源

https://download.csdn.net/download/dearmite/88042686

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
47 4
SpringBoot入门(4) - 添加内存数据库H2
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
33 2
SpringBoot入门(4) - 添加内存数据库H2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
66 13
|
27天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
39 4
|
29天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
17 0
|
SQL 缓存 监控
SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0等等)
SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0等等)保姆级教程超详细,Druid配置信息等等。
2719 0
SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0等等)
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
164 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
107 62
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
60 2
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。