大家好,欢迎来到IT知识分享网。
建立Service层
建立Service接口
public interface UserService extends IService<UserEntity> {}
建立Service接口实现类ServiceImpl
@Slf4j @Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService {}
Service Interface接口内容说明
IService 是 MyBatis-Plus 提供的一个通用 Service 层接口,它封装了常见的 CRUD 操作,包括插入、删除、查询和分页等。通过继承 IService 接口,可以快速实现对数据库的基本操作,同时保持代码的简洁性和可维护性。
IService 接口中的方法命名遵循了一定的规范,如 get 用于查询单行,remove 用于删除,list 用于查询集合,page 用于分页查询,这样可以避免与 Mapper 层的方法混淆。
提示
- 泛型
T为任意实体对象- 建议如果存在自定义通用 Service 方法的可能,请创建自己的
IBaseService继承Mybatis-Plus提供的IService基类- 对象
Wrapper为 条件构造器
插入功能save
// 插入一条记录(选择字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
功能描述:插入记录,根据实体对象的字段进行策略性插入。
返回值: boolean,表示插入操作是否成功。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| T | entity | 实体对象 |
| Collection<T> | entityList | 实体对象集合 |
| int | batchSize | 插入批次数量 |
示例
// 假设有一个 User 实体对象 User user = new User(); user.setName("John Doe"); user.setEmail(""); boolean result = userService.save(user); // 调用 save 方法 if (result) { System.out.println("User saved successfully."); } else { System.out.println("Failed to save user."); }
生成的 SQL:
INSERT INTO user (name, email) VALUES ('John Doe', '')
如果存在就更新不存在就新增 saveOrUpdate
功能描述: 根据实体对象的主键 ID 进行判断,存在则更新记录,否则插入记录。
返回值: boolean,表示插入或更新操作是否成功。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| T | entity | 实体对象 |
| Wrapper<T> | updateWrapper | 实体对象封装操作类 UpdateWrapper |
| Collection<T> | entityList | 实体对象集合 |
| int | batchSize | 插入批次数量 |
// TableId 注解属性值存在则更新记录,否插入一条记录 boolean saveOrUpdate(T entity); // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
示例
// 假设有一个 User 实体对象,其中 id 是 TableId 注解的属性 User user = new User(); user.setId(1); user.setName("John Doe"); user.setEmail(""); boolean result = userService.saveOrUpdate(user); // 调用 saveOrUpdate 方法 if (result) { System.out.println("User updated or saved successfully."); } else { System.out.println("Failed to update or save user."); }
生成的 SQL(假设 id 为 1 的记录已存在):
UPDATE user SET name = 'John Doe', email = '' WHERE id = 1
生成的 SQL(假设 id 为 1 的记录不存在):
INSERT INTO user (id, name, email) VALUES (1, 'John Doe', '')
删除功能remove
// 根据 queryWrapper 设置的条件,删除记录 boolean remove(Wrapper<T> queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map<String, Object> columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection<? extends Serializable> idList);
功能描述: 通过指定条件删除符合条件的记录。
返回值: boolean,表示删除操作是否成功。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | queryWrapper | 实体包装类 QueryWrapper |
| Serializable | id | 主键 ID |
| Map<String, Object> | columnMap | 表字段 map 对象 |
| Collection<? extends Serializable> | idList | 主键 ID 列表 |
示例:
删除
// 假设有一个 QueryWrapper 对象,设置删除条件为 name = 'John Doe' QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "John Doe"); boolean result = userService.remove(queryWrapper); // 调用 remove 方法 if (result) { System.out.println("Record deleted successfully."); } else { System.out.println("Failed to delete record."); }
生成的 SQL:
DELETE FROM user WHERE name = 'John Doe'
根据ID删除
// 假设要删除 ID 为 1 的用户 boolean result = userService.removeById(1); // 调用 removeById 方法 if (result) { System.out.println("User deleted successfully."); } else { System.out.println("Failed to delete user."); }
生成的 SQL:
DELETE FROM user WHERE id = 1
批量删除
// 假设有一组 ID 列表,批量删除用户 List<Integer> ids = Arrays.asList(1, 2, 3); boolean result = userService.removeByIds(ids); // 调用 removeByIds 方法 if (result) { System.out.println("Users deleted successfully."); } else { System.out.println("Failed to delete users."); }
生成的 SQL:
DELETE FROM user WHERE id IN (1, 2, 3)
更新功能update
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update(Wrapper<T> updateWrapper); // 根据 whereWrapper 条件,更新记录 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
功能描述: 通过指定条件更新符合条件的记录。
返回值: boolean,表示更新操作是否成功。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | updateWrapper | 实体对象封装操作类 UpdateWrapper |
| T | entity | 实体对象 |
| Collection<T> | entityList | 实体对象集合 |
| int | batchSize | 更新批次数量 |
根据元素进行更新
// 假设有一个 UpdateWrapper 对象,设置更新条件为 name = 'John Doe',更新字段为 email UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("name", "John Doe").set("email", ""); boolean result = userService.update(updateWrapper); // 调用 update 方法 if (result) { System.out.println("Record updated successfully."); } else { System.out.println("Failed to update record."); }
生成的 SQL:
UPDATE user SET email = '' WHERE name = 'John Doe'
根据ID进行更新
// 假设有一个 User 实体对象,设置更新字段为 email,根据 ID 更新 User updateEntity = new User(); updateEntity.setId(1); updateEntity.setEmail(""); boolean result = userService.updateById(updateEntity); // 调用 updateById 方法 if (result) { System.out.println("Record updated successfully."); } else { System.out.println("Failed to update record."); }
生成的 SQL:
UPDATE user SET email = '' WHERE id = 1
查询功能get
// 根据 ID 查询 T getById(Serializable id); // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1") T getOne(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 T getOne(Wrapper<T> queryWrapper, boolean throwEx); // 根据 Wrapper,查询一条记录 Map<String, Object> getMap(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
功能描述: 根据指定条件查询符合条件的记录。
返回值: 查询结果,可能是实体对象、Map 对象或其他类型。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| Serializable | id | 主键 ID |
| Wrapper<T> | queryWrapper | 实体对象封装操作类 QueryWrapper |
| boolean | throwEx | 有多个 result 是否抛出异常 |
| T | entity | 实体对象 |
| Function<? super Object, V> | mapper | 转换函数 |
根据id进行查询
// 假设要查询 ID 为 1 的用户 User user = userService.getById(1); // 调用 getById 方法 if (user != null) { System.out.println("User found: " + user); } else { System.out.println("User not found."); }
生成的 SQL:
SELECT * FROM user WHERE id = 1
根据对象进行查询
// 假设有一个 QueryWrapper 对象,设置查询条件为 name = 'John Doe' QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "John Doe"); User user = userService.getOne(queryWrapper); // 调用 getOne 方法 if (user != null) { System.out.println("User found: " + user); } else { System.out.println("User not found."); }
生成的SQL:
SELECT * FROM user WHERE name = 'John Doe' LIMIT 1
查询记录功能list
// 查询所有 List<T> list(); // 查询列表 List<T> list(Wrapper<T> queryWrapper); // 查询(根据ID 批量查询) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查询(根据 columnMap 条件) Collection<T> listByMap(Map<String, Object> columnMap); // 查询所有列表 List<Map<String, Object>> listMaps(); // 查询列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查询全部记录 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);
功能描述: 查询符合条件的记录。
返回值: 查询结果,可能是实体对象、Map 对象或其他类型。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | queryWrapper | 实体对象封装操作类 QueryWrapper |
| Collection<? extends Serializable> | idList | 主键 ID 列表 |
| Map<String, Object> | columnMap | 表字段 map 对象 |
| Function<? super Object, V> | mapper | 转换函数 |
示例:
查询全部
// 查询所有用户 List<User> users = userService.list(); // 调用 list 方法 for (User user : users) { System.out.println("User: " + user); }
生成的SQL:
SELECT * FROM user
根据实体进行查询
// 假设有一个 QueryWrapper 对象,设置查询条件为 age > 25 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); List<User> users = userService.list(queryWrapper); // 调用 list 方法 for (User user : users) { System.out.println("User: " + user); }
生成的SQL:
SELECT * FROM user WHERE age > 25
批量查询用户
// 假设有一组 ID 列表,批量查询用户 List<Integer> ids = Arrays.asList(1, 2, 3); Collection<User> users = userService.listByIds(ids); // 调用 listByIds 方法 for (User user : users) { System.out.println("User: " + user); }
生成的SQL:
SELECT * FROM user WHERE id IN (1, 2, 3)
分页查询
// 无条件分页查询 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);
功能描述: 分页查询符合条件的记录。
返回值: 分页查询结果,包含记录列表和总记录数。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| IPage<T> | page | 翻页对象 |
| Wrapper<T> | queryWrapper | 实体对象封装操作类 QueryWrapper |
示例
分页查询
// 假设要进行无条件的分页查询,每页显示10条记录,查询第1页 IPage<User> page = new Page<>(1, 10); IPage<User> userPage = userService.page(page); // 调用 page 方法 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); System.out.println("Total users: " + total); for (User user : userList) { System.out.println("User: " + user); }
生成的SQL:
SELECT * FROM user LIMIT 10 OFFSET 0
根据实体对象进行分页
// 假设有一个 QueryWrapper 对象,设置查询条件为 age > 25,进行有条件的分页查询 IPage<User> page = new Page<>(1, 10); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); IPage<User> userPage = userService.page(page, queryWrapper); // 调用 page 方法 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); System.out.println("Total users (age > 25): " + total); for (User user : userList) { System.out.println("User: " + user); }
生成的SQL:
SELECT * FROM user WHERE age > 25 LIMIT 10 OFFSET 0
查询总记录数
// 查询总记录数 int count(); // 根据 Wrapper 条件,查询总记录数 int count(Wrapper<T> queryWrapper); //自3.4.3.2开始,返回值修改为long // 查询总记录数 long count(); // 根据 Wrapper 条件,查询总记录数 long count(Wrapper<T> queryWrapper);
功能描述: 查询符合条件的记录总数。
返回值: 符合条件的记录总数。
参数说明:
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | queryWrapper | 实体对象封装操作类 QueryWrapper |
示例
// 查询用户表中的总记录数 int totalUsers = userService.count(); // 调用 count 方法 System.out.println("Total users: " + totalUsers);
生成的SQL:
SELECT COUNT(*) FROM user
根据对象进行查询:
// 假设有一个 QueryWrapper 对象,设置查询条件为 age > 25,查询满足条件的用户总数 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); int totalUsers = userService.count(queryWrapper); // 调用 count 方法 System.out.println("Total users (age > 25): " + totalUsers);
生成的SQL:
SELECT COUNT(*) FROM user WHERE age > 25
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119077.html