MybatisPlus
1.条件构造器
Wrapper

构造QueryWrapper进行查询
@Test
void testQueryWrapper() {
// 查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id", "username", "info", "balance")
.like("username", "o")
.ge("balance", 1000);
// 查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
构造QueryWrapper进行更新
@Test
void testUpdateQueryWrapper(){
// 更新数据
User user = new User();
user.setBalance(2000);
// 查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username", "jack");
// 更新
userMapper.update(user,wrapper);
}
构造UpdateWrapper进行更新
@Test
void testUpdateWrapper(){
List<Long> ids = List.of(1L, 2L, 4L);
UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
.setSql("balance=balance-200")
.in("id", ids);
userMapper.update(null,wrapper);
}
LambdaWrapper防止硬编码
@Test
void testLambdaQueryWrapper() {
// 查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
.select(User::getId, User::getUsername, User::getInfo, User::getBalance)
.like(User::getUsername, "o")
.ge(User::getBalance, 1000);
// 查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
2.自定义SQL
SQL语句where条件之外的东西,难实现时使用自定义sql

3.service接口(mpservice)
不使用mapper ,直接调用service的方法实现增删改查
* 继承 IService

接口需要继承 Iservice 实现类(impl)继承 serviceImpl
方法
增加
- save
@Test
void testSave(){
User user = new User();
//user.setId();
user.setUsername("LiLei");
user.setPassword("1231");
user.setPhone("186889900112");
user.setBalance(2001);
user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(LocalDateTime.now());
userService.save(user);
}
查询
- list
// 根据id查多条数据
@Test
void testQuery(){
List<User> users = userService.listByIds(List.of(1L, 2L, 3L, 4L));
users.forEach(System.out::println);
}
简单增删改查,可以直接在controller中写
private final IUserService userService;
@ApiOperation("新增用户")
@PostMapping
public void saveUser(@RequestBody UserFormDTO userDTO){
User user = BeanUtil.copyProperties(userDTO, User.class);
userService.save(user);
}
@ApiOperation("删除用户")
@DeleteMapping("/{id}")
public void DeleteUserById(@ApiParam("用户id") @PathVariable("id") Long id){
userService.removeById(id);
}
@ApiOperation("id查询用户")
@GetMapping("/{id}")
public UserVO findUserById(@ApiParam("用户id") @PathVariable("id") Long id){
User user = userService.getById(id);
return BeanUtil.copyProperties(user, UserVO.class);
}
@ApiOperation("id批量查询")
@GetMapping
public List<UserVO> findUsersByIds(@ApiParam("用户id列表") @RequestParam("ids") List<Long> ids){
List<User> users = userService.listByIds(ids);
return BeanUtil.copyToList(users, UserVO.class);
}
复杂的业务需要自定义service方法
Iservice 的 lambda
不需要写wrapper , 适合复杂条件查询
- like为模糊查询
- eq 判断
- gt 大于
- lt 小于
- ge 大于等于
- le 小于等于
- ne 不等于
- ····
、 // controller
@ApiOperation("根据复杂条件查询用户")
@PutMapping("/list")
public List<UserVO> queryUsers(UserQuery query){
List<User> users = userService.queryUsres(query.getName(), query.getStatus(), query.getMinBalance(), query.getMaxBalance());
return BeanUtil.copyToList(users, UserVO.class);
}
//service
@Override
public List<User> queryUsres(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)
.lt(maxBalance != null, User::getBalance, maxBalance)
.list();
}

Iservice批处理
MySQL的客户端连接参数中有这样的一个参数:rewriteBatchedStatements。顾名思义,就是重写批处理的 statement语句
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: MySQL123
主要功能更新完毕
下面还有扩展功能
- 代码生成
- DB静态工具
- 逻辑删除
- 枚举处理器
- json处理器
- 分页插件