MyBatis-Plus 实战教程二 核心功能(一)https://developer.aliyun.com/article/1391859
修改:
- updateById:根据id修改
- update(Wrapper):根据UpdateWrapper修改,Wrapper中包含set和where部分
- update(T,Wrapper):按照T内的数据修改与Wrapper匹配到的数据
- updateBatchById:根据id批量修改
Get:
- getById:根据id查询1条数据
- getOne(Wrapper):根据Wrapper查询1条数据
- getBaseMapper:获取Service内的BaseMapper实现,某些时候需要直接调用Mapper内的自定义SQL时可以用这个方法获取到Mapper
List:
- listByIds:根据id批量查询
- list(Wrapper):根据Wrapper条件查询多条数据
- list():查询所有
Count:
- count():统计所有数量
- count(Wrapper):统计符合Wrapper条件的数据数量
getBaseMapper:
当我们在service中要调用Mapper中自定义SQL时,就必须获取service对应的Mapper.
基本用法
由于Service中经常需要定义与业务有关的自定义方法,因此我们不能直接使用IService,而是自定义Service接口,然后继承IService以拓展方法。同时,让自定义的Service实现类继承ServiceImpl,这样就不用自己实现IService中的接口了。
首先,定义IUserService,继承IService:
package com.onenewcode.mpdemo.service; import com.baomidou.mybatisplus.extension.service.IService; import com.onenewcode.mpdemo.domain.po.User; public interface UserService extends IService<User> { // 拓展自定义方法 }
然后,编写UserServiceImpl类,继承ServiceImpl,实现
UserService:
package com.onenewcode.mpdemo.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.onenewcode.mpdemo.domain.po.User; import com.onenewcode.mpdemo.domain.po.service.UserService; import com.onenewcode.mpdemo.mapper.UserMapper; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
接下来,我们快速实现下面4个接口:
编号 | 接口 | 请求方式 | 请求路径 | 请求参数 | 返回值 |
1 | 新增用户 | POST | /users | 用户表单实体 | 无 |
2 | 删除用户 | DELETE | /users/{id} | 用户id | 无 |
3 | 根据id查询用户 | GET | /users/{id} | 用户id | 用户VO |
4 | 根据id批量查询 | GET | /users | 用户id集合 | 用户VO集合 |
首先,我们在项目中引入几个依赖:
<!--swagger--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>4.1.0</version> </dependency> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
然后需要配置swagger信息:
knife4j: enable: true openapi: title: 用户管理接口文档 description: "用户管理接口文档" email: lspneverstudy@gmail.com concat: onenewcode url: https://www.onenewcode.cn version: v1.0.0 group: default: group-name: default api-rule: package api-rule-resources: - com.onenewcode.mpdemo.controller
然后,接口需要两个实体:
- UserFormDTO:代表新增时的用户表单
- UserVO:代表查询的返回结果
首先是UserFormDTO:
package com.onenewcode.mpdemo.domain.dto; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(description = "用户表单实体") public class UserFormDTO { @ApiModelProperty("id") private Long id; @ApiModelProperty("用户名") private String username; @ApiModelProperty("密码") private String password; @ApiModelProperty("注册手机号") private String phone; @ApiModelProperty("详细信息,JSON风格") private String info; @ApiModelProperty("账户余额") private Integer balance; }
然后是UserVO:
package com.onenewcode.mpdemo.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(description = "用户VO实体") public class UserVO { @ApiModelProperty("用户id") private Long id; @ApiModelProperty("用户名") private String username; @ApiModelProperty("详细信息") private String info; @ApiModelProperty("使用状态(1正常 2冻结)") private Integer status; @ApiModelProperty("账户余额") private Integer balance; }
最后,按照Restful风格编写Controller接口方法:
package com.onenewcode.mpdemo.controller; import cn.hutool.core.bean.BeanUtil; import com.onenewcode.mpdemo.domain.dto.UserFormDTO; import com.onenewcode.mpdemo.domain.po.User; import com.onenewcode.mpdemo.domain.vo.UserVO; import com.onenewcode.mpdemo.service.IUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; @Api(tags = "用户管理接口") @RequiredArgsConstructor @RestController @RequestMapping("users") public class UserController { private final IUserService userService; @PostMapping @ApiOperation("新增用户") public void saveUser(@RequestBody UserFormDTO userFormDTO){ // 1.转换DTO为PO User user = BeanUtil.copyProperties(userFormDTO, User.class); // 2.新增 userService.save(user); } @DeleteMapping("/{id}") @ApiOperation("删除用户") public void removeUserById(@PathVariable("id") Long userId){ userService.removeById(userId); } @GetMapping("/{id}") @ApiOperation("根据id查询用户") public UserVO queryUserById(@PathVariable("id") Long userId){ // 1.查询用户 User user = userService.getById(userId); // 2.处理vo return BeanUtil.copyProperties(user, UserVO.class); } @GetMapping @ApiOperation("根据id集合查询用户") public List<UserVO> queryUserByIds(@RequestParam("ids") List<Long> ids){ // 1.查询用户 List<User> users = userService.listByIds(ids); // 2.处理vo return BeanUtil.copyToList(users, UserVO.class); } }
MyBatis-Plus 实战教程二 核心功能(三)https://developer.aliyun.com/article/1391861