前言
该架构是参考公司原架构做了优化,计划慢慢从0开始完全独立自己搭建一个基于springboot的restful服务后台架构,并且完全后端分离。系列文章所涉及的项目源码都放在了个人github上,关于前端我采用vue,后期会写在其他文章中。
本人的github地址:https://github.com/jokerliuli
接上一章,本文开始springboot集成mybatis-plus
mybatis
mybatis,作为dao层大哥大框架,可以说是目前使用率最高的。面试的时候也几乎是必问的一项(底层源码如果能看懂差不多就能敲门HAT了),关于它的详细信息这篇文章不再过多介绍,我这篇文章是在各位同学已经学会mybatis的基础上展开。
mybatis-plus
我们直接进入mybatis-plus。
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是MP官网的介绍,很简单很准确,按照我个人理解,MP其实是MyBatis模仿JPA的,然后对tkmap(通用mapper)的一种升级。
什么是JPA呢,这边简单介绍一下就是一个dao层的ORM框架规则,spring-data-jpa就是jpa的一个实现,jpa旨在减少sql,直接通过接口的命名就自动映射拼接sql。有兴趣的同学可以去自学一下,这边也不多介绍了。
MP很好的继承了tk的通用接口(单表的增删改查),然后在此基础上有自己的条件构造器(类似jpa的地方),最后还有自己的代码生成器。这些在官网的guide里写的很清晰,建议结合guide一起看这篇文章。
先在pom中引入:
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
如果需要用到MP的代码生成还需要引入freemarker 模板引擎:
<!-- freemarker 模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
再来看MP的教程
看到这个用过tk的同学应该已经懂了,这个dao层有现成的写好的很多CRUD接口,我们只需要extends BaseMapper,直接点就能用。
实战
假如我们有一个Information表,我们怎么对其完成增删改查的restful接口呢?
目录如下:
InformationController
package com.jokerliu.manage.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.slf4j.Slf4j;
import com.jokerliu.enums.Result;
import com.jokerliu.enums.ResultStatusCode;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jokerliu.manage.service.IInformationService;
import com.jokerliu.manage.entity.Information;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 资讯表 前端控制器
* </p>
*
* @author JokerLiu
* @since 2019-03-18
*/
@Slf4j
@RestController
@RequestMapping("/manage/information")
public class InformationController {
@Resource
private IInformationService iInformationService;
/**
* 单个新增
* @param information 传递的实体
* @return Result
*/
@PostMapping("save")
public Result save(@RequestBody Information information){
//log.info(information.toString());
return new Result(ResultStatusCode.OK,iInformationService.save(information));
}
/**
* 单个删除
* @param information 传递的实体
* @return Result
*/
@PostMapping("remove")
public Result remove