一、什么是MybatisPlus

二、入门案例

2.1 引入依赖

2.2 定义Mapper
BaseMapper提前封装了许多写好的sql语句


三、常见注解



四、常用配置

五、mybatisPlus使用流程

六、条件构造器

6.1 案例(基于QueryWrapper)的查询

@Test
void testQueryWrapper(){
//1.构建查询条件
QueryWrapper<User> wapper=new QueryWrapper<User>()
.select("id","username","info","balance")
.like("username","o")
.ge("balance",1000);
//2.查询
List<User> users = userMapper.selectList(wapper);
users.forEach(System.out::println);
}
//用lamda可以避免硬编码
@Test
void testLambdaQueryWrapper(){
//1.构建查询条件
LambdaQueryWrapper<User> wapper=new LambdaQueryWrapper<User>()
.select(User::getId,User::getUsername,User::getInfo,User::getBalance)
.like(User::getUsername,"o")
.ge(User::getBalance,1000);
//2.查询
List<User> users = userMapper.selectList(wapper);
users.forEach(System.out::println);
}
@Test
void testUpdateWrapper(){
//1.要更新的数据
User user = new User();
user.setBalance(2000);
//1.构建更新条件
QueryWrapper<User> wapper=new QueryWrapper<User>()
.eq("username","jack");
//2.更新
userMapper.update(user,wapper);
}

@Test
void testUpdateWrapper(){
//1.构建更新条件
// List<Long> ids=List.of(1L,2L,3L,4L);
List<Long> ids =new ArrayList<>();
ids.add(1L);
ids.add(2L);
ids.add(4L);
UpdateWrapper<User> wrapper=new UpdateWrapper<User>()
.setSql("balance=balance-200")
.in("id",ids);
//2.更新
userMapper.update(null,wrapper);
}

七、自定义sql



八、Service接口

Service接口继承IService Service接口的实现类继承IService的实现类(ServiceImpl)


九、案例(基于Restful风格实现下列接口)

9.1 Controller 层
ackage com.itheima.mp.Controller;
import cn.hutool.core.bean.BeanUtil;
import com.itheima.mp.domain.dto.UserFormDTO;
import com.itheima.mp.domain.po.User;
import com.itheima.mp.domain.vo.UserVO;
import com.itheima.mp.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "用户管理")
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {
private final IUserService userService;
@ApiOperation("新增用户接口")
@PostMapping
public void saveUser(@RequestBody UserFormDTO userDTO) {
//1.把DTO拷贝到PO
User user = new User();
BeanUtils.copyProperties(userDTO, user);
//2.新增
userService.save(user);
}
@ApiOperation("删除用户接口")
@DeleteMapping("{id}")
public void deleteUserById(@ApiParam("用户id") @PathVariable("id") Long id) {
userService.removeById(id);
}
@ApiOperation("根据id查询用户接口")
@GetMapping("{id}")
public UserVO QueryUserById(@ApiParam("用户id") @PathVariable("id") Long id) {
//1.根据id查询用户
User user = userService.getById(id);
//2.把PO拷贝到vo
return BeanUtil.copyProperties(user, UserVO.class);
}
@ApiOperation("根据id批量查询用户接口")
@GetMapping
public List<UserVO> QueryUserByIds(@ApiParam("用户id集合") @RequestParam("ids") List<Long> ids) {
//1.根据id查询用户
List<User> users = userService.listByIds(ids);
//2.把PO拷贝到vo
return BeanUtil.copyToList(users, UserVO.class);
}
@ApiOperation("根据id扣减余额")
@PutMapping("/{id}/deduction/{money}")
public void deductMoneyByid(
@ApiParam("用户id") @PathVariable("id") Long id,
@ApiParam("扣减金额") @PathVariable("money") Integer money) {
userService.deductBalance(id, money);
}
}
9.2 Service层
ackage com.itheima.mp.Controller;
import cn.hutool.core.bean.BeanUtil;
import com.itheima.mp.domain.dto.UserFormDTO;
import com.itheima.mp.domain.po.User;
import com.itheima.mp.domain.vo.UserVO;
import com.itheima.mp.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "用户管理")
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {
private final IUserService userService;
@ApiOperation("新增用户接口")
@PostMapping
public void saveUser(@RequestBody UserFormDTO userDTO) {
//1.把DTO拷贝到PO
User user = new User();
BeanUtils.copyProperties(userDTO, user);
//2.新增
userService.save(user);
}
@ApiOperation("删除用户接口")
@DeleteMapping("{id}")
public void deleteUserById(@ApiParam("用户id") @PathVariable("id") Long id) {
userService.removeById(id);
}
@ApiOperation("根据id查询用户接口")
@GetMapping("{id}")
public UserVO QueryUserById(@ApiParam("用户id") @PathVariable("id") Long id) {
//1.根据id查询用户
User user = userService.getById(id);
//2.把PO拷贝到vo
return BeanUtil.copyProperties(user, UserVO.class);
}
@ApiOperation("根据id批量查询用户接口")
@GetMapping
public List<UserVO> QueryUserByIds(@ApiParam("用户id集合") @RequestParam("ids") List<Long> ids) {
//1.根据id查询用户
List<User> users = userService.listByIds(ids);
//2.把PO拷贝到vo
return BeanUtil.copyToList(users, UserVO.class);
}
@ApiOperation("根据id扣减余额")
@PutMapping("/{id}/deduction/{money}")
public void deductMoneyByid(
@ApiParam("用户id") @PathVariable("id") Long id,
@ApiParam("扣减金额") @PathVariable("money") Integer money) {
userService.deductBalance(id, money);
}
}
十、案例 (IService的Lambda查询)

10.1 Controller
@ApiOperation("根据复杂条件查询用户接口")
@GetMapping("/list")
public List<UserVO> QueryUsers(UserQuery userQuery) {
//1.根据id查询用户
List<User> users = userService.queryUsers(userQuery.getName(),
userQuery.getStatus(),
userQuery.getMinBalance(),
userQuery.getMaxBalance());
//2.把PO拷贝到vo
return BeanUtil.copyToList(users, UserVO.class);
}
}
10.2 Service层
@Override
public List<User> queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance) {
return lambdaQuery()
.like(name!= null,User::getUsername, name)
.eq(status!= null,User::getStatus, status)
.gt(minBalance!= null,User::getBalance, minBalance)
.le(maxBalance!= null,User::getBalance, maxBalance)
.list();
}
十一、案例(IService的Lambda更新)

10.1 Service层
@Override
@Transactional
public void deductBalance(Long id, Integer money) {
//1.查询用户
User user = this.getById(id);
//2.校验用户状态
if (user == null || user.getStatus()==2) {
throw new RuntimeException("用户不存在或状态异常");
}
//3.校验余额是否充足
if (user.getBalance() < money) {
throw new RuntimeException("余额不足");
}
//4.扣减余额
int remainBalance = user.getBalance() - money;
lambdaUpdate()
.set(User::getBalance, remainBalance)
.set(remainBalance == 0,User::getStatus,2)
.eq(User::getId, id)
.eq(User::getBalance,user.getBalance())//乐观锁
.update();
}
十二、IService批量新增


十三、 扩展功能
13.1 代码生成




13.2 静态工具

13.3 逻辑删除


13.4 枚举处理器



13.5 JOSN处理器



13.6 分页插件


本文介绍了MybatisPlus的基本概念、入门案例,包括依赖引入、定义Mapper、常用注解、配置流程,以及如何使用QueryWrapper和Lambda表达式进行条件查询和更新。还展示了如何在Service接口中集成Restful风格的API操作和事务处理。
4万+

被折叠的 条评论
为什么被折叠?



