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

文章介绍了如何在SpringBoot项目中使用MybatisPlus来替代Mybatis,简化开发流程。MybatisPlus提供自动实体类、Mapper和DAO接口生成,支持增删改查和分页查询等功能。通过配置和示例代码展示了MybatisPlus的使用,包括实体类、Mapper接口、Service层和Controller层的实现,强调了其提高开发效率的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot系列文章目录

SpringBoot知识范围-学习步骤【JSB系列之000】
————————————————


本系列环境

环境win11
工具idea 2017
jdk1.8
数据库mysql5.5
maven3.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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

项目开张雪峰之巅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值