超详细的springboot3整合MybatisPlus实现单表的增、删、改、查、分页查询、条件查询等(从初学者的角度讲解)

前言:

        由国人自主开发的基于Mybatis的增强框架MybatisPlus,一经推出,便收获了国内Java开发者的一致好评。MybatisPlus在Mybatis的基础上,只做增强,内置了关于单表的许多基础操作,让我们可以不在将时间放在那些基础的CRUD上,直接调用MybatisPlus提供的方法,大大减少了我们在开发过程中的低级代码量,使我们只需要将时间和精力放在一些复杂的多表联合查询上。这大大减少了我们的工作量,而且,由于是国人自行开发的框架,在许多方法的声明和使用上,更符合我们国人的习惯,而且,还提供了中文版的API文档,是我们在阅读和使用时,更加的方便和得心应手。接下来,我将基于spring boot项目,来演示一下如何正确的使用MybatisPlus进行一些单表的基础操作。


使用到的技术栈:jdk17,spring boot3.1.5,MySQL,MybatisPlus

本次演示使用knife4j进行测试。

一、创建一个空的spring boot项目,

并且导入相应的依赖项

 <!--        web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--        mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.2</version>
        </dependency>
        <!--        knife4j-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>
        <!--        mysql-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

二、在MySQL数据库中建立一张表,用来进行测试,并且在spring boot项目中建立相应的类。

1、数据表:我就随便建了一个表,用来进行本次的测试:

id为主键,不为空,并且设置为自动递增,随便加了几条数据用来测试。

2、接下来对应着这张表,我们就要建立相应地数据层、业务层、表现层;

首先建立对应的实体类,要与表中的字段进行对映。

@Data
@TableName("test")
public class Test implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String testName;
    private String testPwd;
    private String testMoney;
    private Integer testAge;
}

我们使用@Data自动进行get,set和toString的生成,@TableName("test")注解里要写上表的名字,这样才能将实体类与数据库中的表进行对映。并且实体类中的属性名称也要与表中的属性名称对映,这里我们使用驼峰命名是可以与数据表中的下划线联立起来的

(MybatisPlus默认实现小驼峰命名与下划线之间的映射;要么属性名称与数据库字段完全一致,要么采用小驼峰命名与下划线之间的映射。如果两种方法都不想使用还可以在属性上加上@TableField()注解,在这个注解里面写上数据库的字段名称也可以进行映射)

3、创建一个mapper接口,实现BaseMapper,BaseMapper是MybatisPlus中的接口,里面定义了很多基础方法,这样就可以使用MybatisPlus中的方法。

@Mapper
public interface TestMapper extends BaseMapper<Test> {
}

BaseMapper里面的泛型就是我们写的实体类,然后再接口上加入@Mapper注解,将这个接口加入MybatisPlus管理。

如果mapper接口比较多的话,也可以直接在项目的启动类加上@MapperScan注解,并指定mapper接口的扫描路径。

4、定义一个业务层的接口,并且新建一个类去实现。再业务层的接口和类中,也要取继承一些MybatisPlus的接口或类,才能实现MybatisPlus的功能。

public interface ITestService extends IService<Test> {  //接口

}
@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements ITestService {    //实现类

}

业务层的接口继承了IService接口,并传入一个实体类的泛型

业务层的实现类继承了ServiceImpl类,并且,传入我们定义的Mapper接口和实体类,还要实现了业务层的接口。

5、创建一个controller类,并且使用自动装配注入我们的业务层Bean,,接下来在表现层中实现我们的代码。

@RestController
@RequestMapping("/tests")
public class TestController {
@Autowired
private ITestService testService;

}

表现层,采用Rest风格。

接下来,看一下我们的包层次结构:

6、在application.yml配置文件中,配置数据库的连接信息,及MybatisPlus的一些标准配置:

id-type: 将表中的id字段设为自动递增

log-impl:日志输出:将执行的SQL语句打印在控制台上

datasource:数据库的一些配置信息

三、接下来开始基于MybatisPlus完成单表操作。

1、查全部信息:

@GetMapping("/all")
public List<Test> getAll(){
    return testService.list();
}

直接调用testService的list()方法,就能实现查询到数据表中的所有数据,

查询结果:

控制台输出的SQL语句:

可以看到,我们调用MybatisPlus提供的方法,与我们手写SQl语句,是一样的效果。而MybatisPlus封装了大量的方法供我们进行使用,这样就减少了我们手写低级SQL的时间与精力。而MybatisPlus封装的方法基本上都能做到见名知意,这样就能大大提高我们的效率。

2、根据id查单个信息:

@Operation(summary = "根据id获取测试数据")
@GetMapping("/getById/{id}")
public Test getById(@PathVariable("id") Integer id) {
return testService.getById(id);
}

直接调用testService的getById方法,名字起的也是非常直接。运行结果如下

控制台输出的SQL语句:

与我们手写的SQl语句,没有什么不同。

3、新增一条数据到数据库

@Operation(summary = "添加测试数据")
@PostMapping("/add")
public String  add(@RequestBody Test test) {
    return testService.save(test)?"添加成功":"添加失败";
}

调用save方法,返回一个布尔类型,用于判断新增是否成功。运行结果:

控制台输出的SQL语句:

4、根据id,修改一条数据

@Operation(summary = "根据id,更新测试数据")
@PostMapping("/update")
public  String updateById(@RequestBody Test test) {
    return testService.updateById(test)?"更新成功":"更新失败";
}

运行结果:

控制台输出的SQL语句:

5、根据id删除一条数据

@Operation(summary = "根据id删除测试数据")
@DeleteMapping("/deleteById/{id}")
public String  deleteById(@PathVariable("id") Integer id) {
    return testService.removeById(id)?"删除成功":"删除失败";
}

运行结果:

控制台输出的SQL语句:

6、分页查询:

@Operation(summary = "分页查询")
@GetMapping("/getPage/{PageSize}/{PageNum}")
public List<Test>  getPage(@PathVariable("PageSize") Integer PageSize,@PathVariable("PageNum") Integer PageNum){
   Page<Test> page = new Page<>(PageNum,PageSize);
    Page<Test> testPage = testService.page(page);
    List<Test> testList = testPage.getRecords();
    return testList;
}

使用分页查询时,要新增分页拦截器。不然,分页功能不能实现。新建一个配置类,实现MybatisPlus的分页拦截。

//MybatisPlus分页拦截器
@Configuration
public class MPInterceptors {
@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
    MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    return mybatisPlusInterceptor;
}

运行结果:

控制台输出的SQL语句:

7、分页条件查询

创建一个分页对象Page,使用Lambda表达式的方式,创建一个条件对象,然后,使用like模糊查询,查询的条件是,根据用户名模糊查询。

@Operation(summary = "分页条件查询(根据用户名模糊查询)")
@PostMapping("/getPage/{PageSize}/{PageNum}")
public List<Test>  getPageCondition(@PathVariable("PageSize") Integer PageSize,@PathVariable("PageNum") Integer PageNum,@RequestBody Test test){
    Page<Test> page = new Page<>(PageNum,PageSize);
    LambdaQueryWrapper<Test> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.like(test.getTestName()!=null,Test::getTestName,test.getTestName());
    List<Test> testList = testService.page(page, queryWrapper).getRecords();
    return testList;
}

运行结果:

控制台输出的SQL语句:

还是比较完美的输出的SQL语句,和我们编写的没太大差异。


总结:

MybatisPlus封装了几乎所有的条件,模糊查询、大于、小于、等于、分页等等,我们可以记住常用的几种。在需要其他条件时,可以在MybatisPlus的官网上进行查询,官网是中文写的,我们读起来更加的方便和的心应手,

官网地址:MyBatis-Plus

https://baomidou.com

使用MybatisPlus框架可以帮助我们省去写低级SQL语句的时间和精力,在单表的操作上,MybatisPlus几乎可以满足我们在开发过程中遇到的所有需求。而且,MybatisPlus是对Mybatis做的无侵入式增强,我们仍然可以使用Mybatis在mapper.xml中写动态SQL语句。现在,在国内的Java开发中,MybatisPlus几乎是写后端必不可少的框架。

写单表的SQL时,用MybatisPlus封装的方法。涉及到,多表查询时,可以在Mapper文件中写SQL语句,这样,大大提高了我们的开发效率。减少了一些重复枯燥的CRUD操作。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张乔24

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

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

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

打赏作者

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

抵扣说明:

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

余额充值