SpringBoot2.0(mybatis-plus常见的增删改查和分页)

简介: SpringBoot2.0(mybatis-plus常见的增删改查和分页)

一,mybatis-plus常见注解

@TableName 用于定义表名

@TableId 用于定义表的主键

属性

value 用于定义主键字段名

type 用于定义主键类型(主键策略 IdType),具体策略如下:

IdType.AUTO          主键自增,系统分配,不需要手动输入
IdType.NONE          未设置主键
IdType.INPUT         需要自己输入 主键值
IdType.ASSIGN_ID     系统分配 ID,用于数值型数据(Long,对应 mysql 中 BIGINT 类型)
IdType.ASSIGN_UUID   系统分配 UUID,用于字符串型数据(String,对应 mysql 中 varchar(32) 类型)

统一配置主键策略

配置全局默认主键类型,实体类就不用加 @TableId(value = "id", type = IdType.AUTO)

mybatis-plus.global-config.db-config.id-type=auto

@TableField 用于定义表的非主键字段

属性

value 用于定义非主键字段名,用于别名匹配,假如java对象属性和数据库属性不一样

exist 用于指明是否为数据表的字段, true 表示是,false 为不是,假如某个java属性在数据库没对应的字段则要标记为faslse

fill 用于指定字段填充策略(FieldFill,用的不多)

 字段填充策略:一般用于填充 创建时间、修改时间等字段
     FieldFill.DEFAULT         默认不填充
     FieldFill.INSERT          插入时填充
     FieldFill.UPDATE          更新时填充
     FieldFill.INSERT_UPDATE   插入、更新时填充。

二,创建一个工具类和启动类

util包JsonData类

DemoApplication启动类

启动类

package com.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.demo.mapper")  //
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class,args);
    }
}

工具类

package com.demo.util;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor //会生成一个包含所有变量
@NoArgsConstructor //生成一个无参数的构造方法
public class JsonData {
    /**
     * 状态码 0 表示成功,1表示处理中,-1表示失败
     */
    private Integer code;
    /**
     * 数据
     */
    private Object data;
    /**
     * 描述
     */
    private String msg;
    // 成功,传入数据
    public static JsonData buildSuccess() {
        return new JsonData(0, null, null);
    }
    // 成功,传入数据
    public static JsonData buildSuccess(Object data) {
        return new JsonData(0, data, null);
    }
    // 失败,传入描述信息
    public static JsonData buildError(String msg) {
        return new JsonData(-1, null, msg);
    }
    // 失败,传入描述信息,状态码
    public static JsonData buildError(String msg, Integer code) {
        return new JsonData(code, null, msg);
    }
}

三,创建实体类

Bean包Lapop类

package com.demo.bean;
import lombok.Data;
@Data
public class Lapop {
    /** 键盘id */
    private Integer id ;
    /** 键盘名称 */
    private String name ;
    /** 键盘尺寸 */
    private String size ;
    /** 键盘重量 */
    private String weight ;
    /** 电压 */
    private String voltage ;
    /** 电流 */
    private String current ;
    /** 键盘接口 */
    private String interfacepass ;
    /** 按键个数 */
    private String number ;
}

四,创建mapper接口

mapper包LapopMapper接口

package com.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.demo.bean.Lapop;
public interface LapopMapper extends BaseMapper<Lapop> {
}

五,创建service接口和impl类

service包LapopService接口

impl包LapopServiceImpl类

LapopService接口

package com.demo.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.demo.bean.Lapop;
import java.util.List;
import java.util.Map;
public interface LapopService {
    // 查询全部
    List<Lapop> getLapop();
    // 根据id查
    Lapop getByIdLapop(int id);
    //模糊查
    List<Lapop> getLapopBylist(Lapop lapop);
    // 新增
    int addLapop(Lapop lapop);
    // 修改
    int updateLapop(Lapop lapop);
    // 删除
    int deleteLapop(int id);
    // 分页
    IPage<Lapop> selectPageVO(Integer LapopIPage, Integer queryWrapper);
}

LapopServiceImpl类

package com.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.demo.bean.Lapop;
import com.demo.mapper.LapopMapper;
import com.demo.service.LapopService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class LapopServiceImpl implements LapopService {
    @Autowired
    private LapopMapper lapopMapper;
    @Override
    public List<Lapop> getLapop() {
        // 查询全部
        List<Lapop> getLapopList = lapopMapper.selectList(new QueryWrapper<Lapop>());
        return getLapopList;
    }
    @Override
    public Lapop getByIdLapop(int id) {
        // 根据id查
        return lapopMapper.selectById(id);
    }
    @Override
    public List<Lapop> getLapopBylist(Lapop lapop) {
        // 模糊查询
        QueryWrapper queryWrapper = new QueryWrapper<Lapop>();
        queryWrapper.like("name",lapop.getName());
        queryWrapper.gt("Number",lapop.getNumber());
        return lapopMapper.selectList(queryWrapper);
    }
    @Override
    public int addLapop(Lapop lapop) {
        // 新增
        return lapopMapper.insert(lapop);
    }
    @Override
    public int updateLapop(Lapop lapop) {
        // 修改
        return lapopMapper.updateById(lapop);
    }
    @Override
    public int deleteLapop(int id) {
        // 删除
        return lapopMapper.deleteById(id);
    }
    @Override
    public IPage<Lapop> selectPageVO(Integer LapopIPage, Integer queryWrapper) {
        // 分页
        QueryWrapper<Lapop> wrapper = new QueryWrapper<>();
        //第1页,每页2条
        Page<Lapop> page = new Page<>(LapopIPage, queryWrapper);
        IPage<Lapop> LapopbyIPage = lapopMapper.selectPage(page, wrapper);
        System.out.println("总条数"+LapopbyIPage.getTotal());
        System.out.println("总页数"+LapopbyIPage.getPages());
        //获取当前数据
        return LapopbyIPage;
    }
}

六,创建配置类

config包MybatisPlusPageConfig类

配置分页插件

package com.demo.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusPageConfig {
    /**
     * 新的分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

七,创建controller

controller包LapopController类

package com.demo.controller;
import com.demo.bean.Lapop;
import com.demo.service.LapopService;
import com.demo.util.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/lapopController")
public class LapopController {
    @Autowired
    private LapopService lapopService;
    @RequestMapping("/LapopList")
    @ResponseBody
    public JsonData LapopList(){
        // 查询全部
        return JsonData.buildSuccess(lapopService.getLapop());
    }
    @RequestMapping("/LapopByIDDList")
    @ResponseBody
    public JsonData LapopByIDDList(int id){
        // 根据id查
        return JsonData.buildSuccess(lapopService.getByIdLapop(id));
    }
    @RequestMapping("/paLapopByList")
    @ResponseBody
    public JsonData paLapopByList(Lapop lapop){
        // 模糊查
        return JsonData.buildSuccess(lapopService.getLapopBylist(lapop));
    }
    @RequestMapping("/insertLapop")
    public Object insertLapop(@RequestBody Lapop lapop){
        // 新增
        int restue = lapopService.addLapop(lapop);
        return JsonData.buildSuccess(restue);
    }
    @RequestMapping("/updateLapop")
    public Object updateLapop(@RequestBody Lapop lapop){
        // 修改
        int request = lapopService.updateLapop(lapop);
        return JsonData.buildSuccess(request);
    }
    @RequestMapping("/deleteLapop")
    public Object deleteLapop(int id){
        // 删除
        return JsonData.buildSuccess(lapopService.deleteLapop(id));
    }
    @RequestMapping("/PageLapop")
    public Object PageLapop(Integer passerIPage, Integer queryWrapper ){
        // 分页
        return JsonData.buildSuccess(lapopService.selectPageVO(passerIPage,queryWrapper));
    }
}

八,使用测试工具测试增删改查和分页

8.1,测试全部查询

8.2,测试根据id查

8.3,测试模糊查询

8.4,测试新增

8.5,测试修改

8.6,测试删除

8.7,测试分页

九,QueryWrapper介绍

QueryWrapper介绍

可以封装sql对象,包括where条件,order by排序,select哪些字段等等

查询包装类,可以封装多数查询条件,泛型指定返回的实体类

List<BannerDO> list = bannerMapper.selectList(new QueryWrapper<BannerDO>());

核心API

- eq 等于
- ne 不等于
- gt 大于
- ge 大于等于
- lt 小于
- le 小于等于
- or 拼接or
- between 两个值中间
- notBetween 不在两个值中间
- like 模糊匹配
- notLike 不像
- likeLeft 左匹配
- likeRight 右边匹配
- isNull 字段为空
- in in查询
- groupBy 分组
- orderByAsc 升序
- orderByDesc 降序
- having having查询


相关文章
|
3月前
|
SQL Java 数据库连接
MyBatis分页
MyBatis作为Java持久层框架,需结合数据库特性或插件实现分页。分页分为物理分页(如MySQL的LIMIT)和逻辑分页(内存截取),推荐使用PageHelper插件自动注入分页语句,提升开发效率与性能。需注意索引优化、深分页问题及多表关联时的兼容性,结合业务场景选择合适方案。
157 4
|
9月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
495 0
|
9月前
|
SQL Java 数据库连接
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
131 0
|
6月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1146 1
Spring boot 使用mybatis generator 自动生成代码插件
|
6月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
268 1
|
5月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
168 0
|
7月前
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
735 15
|
6月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
278 1
|
8月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
550 4
|
9月前
|
人工智能 Java 数据库连接
MyBatis Plus 使用 Service 接口进行增删改查
本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。
670 0