基础篇——整合SSMP遇到的问题

本文详细介绍了Spring Boot整合MyBatis-Plus的常见问题及解决方案,包括ID自增策略配置、日志调试、分页查询、条件查询和Lambda表达式使用、后端异常统一处理、页面数据一致性处理等,同时展示了快速开发业务层和服务层的方法,以及前后端数据协议的一致性处理。
摘要由CSDN通过智能技术生成

插入操作的id自增策略

  • 错误

Could not set property ‘id’ of ‘class com.ssc.springboot_04_ssmp.domain.Book’ with value ‘1544949725480325121’ Cause: java.lang.IllegalArgumentException: argument type mismatch

  • 解决id-type: auto
mybatis-plus:
  global-config:
    db-config:
      table-prefix: t_
      id-type: auto 

MP开启调试日志

  • StdOutImpl 标准输出
configuration:
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

MP开启分页

  • 开启MP拦截器
@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        // 配置拦截器,拦截器需要增加都配置在这儿
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
  • 测试
    @Test
    void testGetAllPage(){
        IPage page = new Page(1,2);
        bookDao.selectPage(page, null);
    }
  • 结果
==>  Preparing: SELECT COUNT(*) FROM t_book
==> Parameters: 
<==    Columns: COUNT(*)
<==        Row: 7
<==      Total: 1
==>  Preparing: SELECT id,type,name,description FROM t_book LIMIT ?
==> Parameters: 2(Long)
<==    Columns: id, type, name, description
<==        Row: 1, 科学, 科学有故事, 启发科学探索精神
<==        Row: 2, 语文, 大学语文, 语文学习
<==      Total: 2

在这里插入图片描述

条件查询LambdaQueryWrapper语法检查

    @Test
    void testGetBy(){
        LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.like(Book::getName,"学");
        bookDao.selectList(queryWrapper);
    }
  • 查询条件是否为null(第一个参数false为null就不连
  • 第一个参数可以是一个函数的返回值为Boolean
queryWrapper.like(false,Book::getName,"学");

快速开发业务层

  • service接口
public interface IBookService extends IService<Book> {

}
  • service实现层
@Service
public class IBookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService{
}

  • 自己新增的方法最好不要覆盖原始的基本操作

后端表现层一致性处理(前后端数据协议

  • 创建工具类统一格式
@Data
public class R {
    private Boolean flag;
    private Object data;
    private String message;

    public R(Boolean flag) {
        this.flag = flag;
    }

    public R(Boolean flag, Object data) {
        this.flag = flag;
        this.data = data;
    }

    public R(Boolean flag, String message) {
        this.flag = flag;
        this.message = message;
    }

    public R() {
    }
}
  • controller返回值统一
@RestController
@RequestMapping("/books")
public class BookController2 {

    @Autowired
    private IBookService iBookService;

    @GetMapping
    public R getAll(){
        return new R(true,iBookService.list());
    }

    @PostMapping
    public R save(@RequestBody  Book book) throws IOException {
        if(book.getName() == "123") throw new IOException();
        Boolean flag = iBookService.save(book);
        return  new R(flag,flag?"添加成功^_^":"添加失败-_-||");
    }

    @PutMapping
    public R update(@RequestBody Book book){
        Boolean flag = iBookService.updateById(book);
        return  new R(flag,flag?"修改成功^_^":"修改失败-_-||");
    }

    @DeleteMapping("/{id}")
    public R delete(@PathVariable Integer id){
        Boolean flag = iBookService.removeById(id);
        return  new R(flag,flag?"删除成功^_^":"删除失败-_-||");
    }

    @GetMapping("/{id}")
    public R getOne(@PathVariable Integer id){
        return new R(true,iBookService.getById(id));
    }

    @GetMapping("/{currentPage}/{pageSize}")
    public R getPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize){
        return new R(true,iBookService.getPage(currentPage,pageSize));
    }
}

后台异常消息统一处理

  • 异常处理类
@RestControllerAdvice
public class ProjectExceptionAdvice {
    // 拦截所有异常消息
    @ExceptionHandler
    public R doException(Exception ex){
        // 记录日志
        // 通知运维
        // 通知开发
        ex.printStackTrace();
        return new R(false,"服务器故障请稍后再试");
    }
}

删除最后一页的最后一条数据后页面为空

  • 删除之后直接将currentPage修改为最后一页,再请求一次就可以了。
    @GetMapping("/{id}")
    public R getOne(@PathVariable Integer id){
        return new R(true,iBookService.getById(id));
    }

    @GetMapping("/{currentPage}/{pageSize}")
    public R getPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize){
        IPage<Book> page = iBookService.getPage(currentPage,pageSize);
        if(currentPage > page.getPages()){
            page = iBookService.getPage((int)page.getPages(),pageSize);
        }
        return new R(true,page);
    }

条件查询

  • 业务层实现类
    @Override
    public IPage<Book> getPage(Integer currentPage, Integer pageSize, Book book) {
        IPage<Book> page = new Page<Book>(currentPage,pageSize);
        LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<Book>();
        queryWrapper.like(Strings.isNotEmpty(book.getType()),Book::getType,book.getType());
        queryWrapper.like(Strings.isNotEmpty(book.getName()),Book::getName,book.getName());
        queryWrapper.like(Strings.isNotEmpty(book.getDescription()),Book::getDescription,book.getDescription());
        return bookDao.selectPage(page,queryWrapper);
    }

总结

  1. pom.xml
    配置起步依赖
  2. application.yml
    设置数据源,端口,框架技术相关配置
  3. dao
    继承BaseMapper、添加@Mapper
  4. dao测试
  5. Service
    调用数据层接口或MyBatis-Plus提供的接口快速开发
  6. Service测试类
  7. Controller
    基于Restful开发
  8. 页面
    存放于resources目录下的static目录中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值