💥 该系列属于【SpringBoot基础】专栏,如您需查看其他SpringBoot相关文章,请您点击左边的连接
目录
一、IService简介
MyBatisPlus 中提供了一个非常重要的接口 IService 以及其实现类 ServiceImpl,它们为业务层 service 的开发带来了许多便利。以下是 MyBatis-Plus 中 IService 的优势:
-
CRUD 接口封装:IService 提供了丰富的 CRUD 接口,开发者不需要再手动编写这些基础接口的实现,可以大大减少开发量。
-
批量操作:IService 支持批量插入、更新、删除等操作,简化了数据库的批量处理。
-
分页查询:内置了分页插件,通过简单的配置即可实现物理分页,避免了编写复杂分页逻辑。
二、项目准备
1. IService代码自动生成
(1)下载插件
(2)配置数据库
点击Config Database
dbUrl改成jdbc:mysql://localhost:3306/your_database_name?&serverTimezone=Asia/Shanghai,然后点击OK
(3)代码生成
点击Code Generator
继续点击Code Generator,生成的项目结构如下。
(4)项目结构
(5)初始文件
① pojo
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String username;
private String password;
private String phone;
private String info;
private Integer status;
private Integer balance;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
② controller
@RestController
@RequiredArgsConstructor
public class UserController {
private final IUserService userService; //将userService注入
}
③ service
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
④ mapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
2. 数据库准备
三、基本操作
1. 增加用户save
(1)controller
@RequestMapping("/saveUser")
public void saveUser() {
User user = new User();
user.setId(6L);
user.setUsername("Lucy");
user.setPassword("123");
user.setPhone("18688990011");
user.setBalance(200);
user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(LocalDateTime.now());
userService.save(user);
}
(2)测试
2. 根据id删除用户removeById
(1)controller
@RequestMapping("/deleteById")
public void deleteById() {
userService.removeById(6L);
}
(2)测试
3. 根据id查询用户getById
(1)controller
@RequestMapping("/getById")
public User getById() {
return userService.getById(6L);
}
(2)测试
4. 根据ids批量查询用户listByIds
(1)controller
@RequestMapping("/listByIds")
public List<User> listByIds() {
List<Long> ids = List.of(6L, 7L, 8L);
return userService.listByIds(ids);
}
(2)测试
数据库:
测试结果:
5. 根据id修改用户updateById
(1)controller
@RequestMapping("/updateById")
public void updateById() {
User user = new User();
user.setId(6L); // 假设我们要更新ID为6的用户
user.setUsername("LucyUpdated");
userService.updateById(user);
}
(2)测试
6. 条件查询list
数据库:
模糊查询名字带有c的,且balance大于100的user,只查询id,balance和update_time
(1)controller
可以使用queryWrapper,也可以用lambdaQueryWrapper,这里演示lambdaQueryWrapper。
@RequestMapping("/queryUsersWithCondition")
public List<User> queryUsersWithCondition() {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(User::getUsername, "c")
.gt(User::getBalance, 100)
.select(User::getId, User::getBalance, User::getUpdateTime);
return userService.list(queryWrapper);
}
(2)测试
7. 条件更新update
模糊查询名字带有c的,把他们的balance更新为2000
(1)controller
可以使用updateWrapper,也可以用lambdaUpdateWrapper,这里演示updateWrapper。
@RequestMapping("/updateWrapper")
public String updateWrapper() {
User user = new User();
user.setBalance(2000);
UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>()
.like("username", "c");
userService.update(user, updateWrapper);
return "OK";
}
(2)测试
8. 条件分页查询page
查询balance>1500的用户,查询第1页,每页5个结果
(1)分页查询配置文件MyBatisPlusConfig
记住一定要配置mybatisplus的分页查询插件,否则无法查询成功
@Configuration
public class MyBatisPlusConfig {
/**
* 配置分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 1. 创建分页插件
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
paginationInnerInterceptor.setMaxLimit(1000L); // 查询上限是1000
// 2. 添加分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
(2)controller
@RequestMapping("/page")
public HashMap<String, Object> page() {
Page<User> page = new Page<>(1, 5);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(User::getBalance, 1500);
Page<User> p = userService.page(page, queryWrapper);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("total", p.getTotal()); //总条数
hashMap.put("pages", p.getPages()); //总页数
hashMap.put("pageNumber", p.getCurrent());//当前页
hashMap.put("users", p.getRecords()); //查询到的记录
return hashMap;
}