MyBatis Plus(简称MP)是一个MyBatis的增强工具,旨在简化开发、提高效率。它提供了许多便捷的功能,其中之一就是IService
接口。IService
接口是MyBatis Plus提供的一个服务层接口,封装了常用的CRUD操作,使得开发者可以更加便捷地进行数据库操作。本文将详细讲解IService
接口,包括其基本概念、常用方法以及实际应用场景。
1. 基本概念
IService
接口是MyBatis Plus提供的一个服务层接口,定义了一系列常用的CRUD操作方法。通过实现IService
接口,可以快速构建服务层,简化开发流程。
1.1 接口定义
IService
接口定义如下:
public interface IService<T> {
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据实体(ID)删除
boolean removeById(T entity);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据 whereEntity 条件,更新记录
boolean update(T entity, Wrapper<T> updateWrapper);
// 根据 ID 查询
T getById(Serializable id);
// 查询(根据ID 批量查询)
List<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
List<T> listByMap(Map<String, Object> columnMap);
// 根据 entity 条件,查询一条记录
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
List<T> list(Wrapper<T> queryWrapper);
// 查询所有
List<T> list();
// 查询总记录数
int count();
// 查询总记录数
int count(Wrapper<T> queryWrapper);
// 查询所有列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);
}
1.2 实现类
为了使用IService
接口,通常需要创建一个实现类,继承ServiceImpl
类,并实现IService
接口。ServiceImpl
类是MyBatis Plus提供的一个默认实现类,封装了常用的CRUD操作。
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IService<User> {
// 自定义方法
}
在上述代码中,UserServiceImpl
继承了ServiceImpl
类,并实现了IService<User>
接口。ServiceImpl
类的构造函数需要传入Mapper接口和实体类。
2. 常用方法
2.1 插入操作
- save:插入一条记录(选择字段,策略插入)
- saveBatch:插入(批量)
User user = new User();
user.setName("John");
user.setAge(25);
userService.save(user);
List<User> userList = new ArrayList<>();
userList.add(new User("John", 25, "john@example.com"));
userList.add(new User("Jane", 30, "jane@example.com"));
userService.saveBatch(userList);
2.2 删除操作
- removeById:根据ID删除
- removeByMap:根据columnMap条件删除
- remove:根据entity条件删除
- removeByIds:根据ID批量删除
userService.removeById(1);
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("age", 25);
userService.removeByMap(columnMap);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25);
userService.remove(queryWrapper);
List<Integer> idList = Arrays.asList(1, 2, 3);
userService.removeByIds(idList);
2.3 更新操作
- updateById:根据ID更新
- update:根据whereEntity条件更新
User user = new User();
user.setId(1);
user.setName("John Doe");
user.setAge(26);
userService.updateById(user);
User user = new User();
user.setStatus(1);
QueryWrapper<User> updateWrapper = new QueryWrapper<>();
updateWrapper.eq("age", 25);
userService.update(user, updateWrapper);
2.4 查询操作
- getById:根据ID查询
- listByIds:根据ID批量查询
- listByMap:根据columnMap条件查询
- getOne:根据entity条件查询一条记录
- list:根据Wrapper条件查询全部记录
- list:查询所有
- count:查询总记录数
- page:无条件分页查询
- page:条件分页查询
User user = userService.getById(1);
List<Integer> idList = Arrays.asList(1, 2, 3);
List<User> userList = userService.listByIds(idList);
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("age", 25);
List<User> userList = userService.listByMap(columnMap);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25);
User user = userService.getOne(queryWrapper);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25);
List<User> userList = userService.list(queryWrapper);
List<User> userList = userService.list();
int count = userService.count();
Page<User> page = new Page<>(1, 10);
IPage<User> userPage = userService.page(page);
Page<User> page = new Page<>(1, 10);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25);
IPage<User> userPage = userService.page(page, queryWrapper);
3. 实际应用场景
3.1 用户管理
假设我们有一个用户管理系统,需要对用户进行增删改查操作。通过IService
接口,可以轻松实现这些功能。
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IService<User> {
// 自定义方法
public User getUserByName(String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name);
return getOne(queryWrapper);
}
}
在上述代码中,我们定义了一个自定义方法getUserByName
,根据用户名查询用户信息。
3.2 订单管理
假设我们有一个订单管理系统,需要对订单进行增删改查操作。通过IService
接口,可以轻松实现这些功能。
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IService<Order> {
// 自定义方法
public List<Order> getOrdersByUserId(int userId) {
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
return list(queryWrapper);
}
}
在上述代码中,我们定义了一个自定义方法getOrdersByUserId
,根据用户ID查询订单信息。
4. 总结
MyBatis Plus的IService
接口提供了一系列常用的CRUD操作方法,使得开发者可以更加便捷地进行数据库操作。通过实现IService
接口,并继承ServiceImpl
类,可以快速构建服务层,简化开发流程。在实际应用中,结合自定义方法,可以进一步提高开发效率和代码可维护性。
希望本文对您理解和使用MyBatis Plus的IService
接口有所帮助。如有任何疑问或建议,欢迎留言讨论。