SpringBoot整合Mybatis Plus实现基本CRUD的示例代码

2023-05-30 0 4,312

目录

数据库的操作是我们公司中必不可少的功能,Mybatis Plus是在Mybatis的基础上的增强,使得我们对一些基本的CRUD使用起来更方便等,这篇文章主要讲讲SpringBoot如何去整合Mybatis Plus,并实现基本的CRUD功能。

一、引入相应的依赖

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.3.1</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.32</version>
</dependency>

引入mybatis-plus的依赖和mysql驱动的依赖。

二、进行配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb?characterEncoding=utf-8&serverTimeZone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: auto
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0

spring.datasource是对数据库的链接信息的配置

mybatis-plus:

  • configuration.log-impl: 配置打印sql日志
  • id-type: id主键生成策略,auto为自增
  • logic-delete-field: 逻辑删除的字段,线上数据库一般要配置逻辑删除
  • logic-delete-value: 逻辑删除已删除的值
  • logic-not-delete-value: 逻辑删除未删除的值

三、新建数据库表

这里我新建一张简单的user表

SpringBoot整合Mybatis Plus实现基本CRUD的示例代码

sql如下:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `age` int(3) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `deleted` int(1) DEFAULT \'0\',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

可以看到表中有一些建表必须的字段create_timeupdate_timedeleted,前两个字段我们需要在项目中配置一下Mybatis Plus让他在我们新增数据,更新数据时自动插入值,deleted逻辑删除字段因为我们已经在yml中配置了,后续我们都不需要再处理。

四、配置 Mybatis Plus 自动填充

配置 Mybatis Plus 自动填充来实现对create_timeupdate_time的值自动插入和更新。

  • 新建handler.mybatisplus.MyMetaObjectHandler
  • 该类实现MetaObjectHandler接口
  • 并重写insertFilleupdateFill方法

具体代码实现如下:

handler.mybatisplus.MyMetaObjectHandler:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName(\"createTime\", new Date(), metaObject);
        setFieldValByName(\"updateTime\", new Date(), metaObject);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName(\"updateTime\", new Date(), metaObject);
    }
}

五、实现User实体类UserMapperUserService

  • User实体类

domain.entity.User:

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName(\"user\")
public class User {
    @TableId
    private Long id;
    private String username;
    private Integer age;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    private Integer deleted;
}

@TableName:指定实体类对应的表名

@TableId:指定为主键,我们配置的是auto,即主键自增策略

@TableField:指定该值使用我们的自动填充策略,INSERT为插入时填充,INSERT_UPDATE为插入和更新时填充

  • UserMapper

mapper.UserMapper:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jk.domain.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

继承Mybatis Plus提供的BaseMapper,已经实现了一些基本的CRUD接口

  • UserService

service.UserService:

public interface UserService {
}

service.impl.UserServiceImpl:

import com.jk.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
}

先把对应的service建好,后面实现controller时再一并实现。

六、使用Restful风格实现CRUD功能

  • 前期准备

因为我们需要在查列表时需要使用分页功能,需要配置一下Mybatis Plus分页插件

config.MybatisPlus:

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 MybatisPlus {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

另外因为我们需要在新增和更新时是不需要全部的实体字段,需要创建对应的DTO来接收前端数据,返回时也不需要全部字段,需要对应的Vo对返回前端所需字段

domain.dto.AddUserDto:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddUserDto {
    private String username;
    private Integer age;
}

domain.dto.UpdateUserDto:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UpdateUserDto {
    private Long id;
    private String username;
    private Integer age;
}

domain.vo.UserVo:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo {
    private Long id;
    private String username;
    private Integer age;
    private Date createTime;
}

domain.vo.PageVo:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageVo {
    private List result;
    private Long total;
}

PageVo用来处理所有需要分页数据的响应

关于统一响应大家可以看 SpringBoot 中统一响应格式及统一异常处理,你应该这样做

关于Bean拷贝大家可以看SpringBoot 项目中 Bean 拷贝及工具类封装

  • CRUD 对应的controller

controller.UserController:

import com.jk.domain.dto.AddUserDto;
import com.jk.domain.dto.UpdateUserDto;
import com.jk.service.UserService;
import com.jk.domain.vo.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(\"/user\")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping
    public ResponseResult addUser(@RequestBody AddUserDto addUserDto) {
        return userService.addUser(addUserDto);
    }
    @PutMapping
    public ResponseResult updateUser(@RequestBody UpdateUserDto updateUserDto) {
        return userService.updateUser(updateUserDto);
    }
    @DeleteMapping(\"/{id}\")
    public ResponseResult deleteUser(@PathVariable(\"id\") Long id) {
        return userService.deleteUser(id);
    }
    @GetMapping
    public ResponseResult getUser(@RequestParam(defaultValue = \"1\") Integer pageNum,
                                  @RequestParam(defaultValue = \"10\") Integer pageSize) {
        return userService.getUser(pageNum, pageSize);
    }
}
  • CRUD 对应的 service

service.UserService:

import com.jk.domain.dto.AddUserDto;
import com.jk.domain.dto.UpdateUserDto;
import com.jk.domain.vo.ResponseResult;
public interface UserService {
    ResponseResult addUser(AddUserDto addUserDto);
    ResponseResult updateUser(UpdateUserDto updateUserDto);
    ResponseResult deleteUser(Long id);
    ResponseResult getUser(Integer pageNum, Integer pageSize);
}
  • CRUD 都应 service实现类

service.impl.UserServiceImpl:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jk.domain.dto.AddUserDto;
import com.jk.domain.dto.UpdateUserDto;
import com.jk.domain.entity.User;
import com.jk.domain.vo.UserVo;
import com.jk.mapper.UserMapper;
import com.jk.service.UserService;
import com.jk.domain.vo.PageVo;
import com.jk.domain.vo.ResponseResult;
import com.jk.utils.BeanCopyUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public ResponseResult addUser(AddUserDto addUserDto) {
        User user = BeanCopyUtils.copyBean(addUserDto, User.class);
        userMapper.insert(user);
        return ResponseResult.okResult();
    }
    @Override
    public ResponseResult updateUser(UpdateUserDto updateUserDto) {
        User user = new User();
        BeanUtils.copyProperties(updateUserDto, user);
        userMapper.updateById(user);
        return ResponseResult.okResult();
    }
    @Override
    public ResponseResult deleteUser(Long id) {
        userMapper.deleteById(id);
        return ResponseResult.okResult();
    }
    @Override
    public ResponseResult getUser(Integer pageNum, Integer pageSize) {
        Page<User> userPage = new Page<>(pageNum, pageSize);
        userMapper.selectPage(userPage, null);
        List<UserVo> userVos = BeanCopyUtils.copyBeanList(userPage.getRecords(), UserVo.class);
        PageVo pageVo = new PageVo(userVos, userPage.getTotal());
        return ResponseResult.okResult(pageVo);
    }
}
资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 SpringBoot整合Mybatis Plus实现基本CRUD的示例代码 http://www.20zxx.cn/763177/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务