【MyBatis-Plus】分页分批处理数据 、Mybatis-Plus-Join示例
参考代码(1):
User one = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getAge, 31), false); //【注意】如果有多条记录的话,虽然接口只返回一条记录,但是底层SQL并没有自动追加 limit 1 User one = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getAge, 31).last("limit 1")); //【推荐】 // 查询 User user = userService.lambdaQuery().eq(User::getId, 2).last("limit 1").one(); //【注意】需要设置.last("limit 1"),不然有多条记录时,报错 List<User> list = userService.lambdaQuery().eq(User::getAge, 18).list(); //【注意】返回的是ArrayList实例 Page<User> pageList = userService.lambdaQuery().eq(User::getAge, 18).page(new Page<User>(1, 10)); //【注意】返回的是Page分页实例 // 修改 boolean update = userService.lambdaUpdate().set(User::getAge, 31).eq(User::getAge, 18).update(); // 删除 boolean remove = userService.lambdaUpdate().eq(User::getAge, 18).remove();
参考代码(2):有if判断的动态SQL 及 分页示例
/** * <p> * 邮件发送账号 服务实现类 * </p> * * @author Albert * @since 2022-06-09 */ @Service public class EmailSenderServiceImpl extends ServiceImpl<EmailSenderMapper, EmailSender> implements IEmailSenderService { @Override public Page<EmailSender> getPageListByUserId(int userId, SenderAdminForm senderAdminForm, Page<EmailSender> page) { if (userId <= 0) { return EmptyHelper.emptyPage(); } //LambdaQueryWrapper<EmailSender> lambdaQueryWrapper = Wrappers.lambdaQuery(EmailSender.class) // 或 LambdaQueryWrapper<EmailSender> lambdaQueryWrapper = Wrappers.<EmailSender>lambdaQuery() .eq(EmailSender::getUserId, userId) .orderByDesc(EmailSender::getId); if (StrUtil.isNotEmpty(senderAdminForm.getEmail())) { lambdaQueryWrapper.like(EmailSender::getEmail, senderAdminForm.getEmail()); } return this.page(page, lambdaQueryWrapper); } }
一、引言
MP除了通用的Mapper还有通用的Service层,这也减少了相对应的代码工作量,把通用的接口提取到公共。其实按照MP的这种思想,可以自己也实现一些通用的Controller。
二、IService使用
service层需要继承IService,当然实现层也要继承对应的实现类。
/** * 用户 服务类 */ public interface UserService extends IService<User> { }
/** * 用户 服务实现类 */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
这里小编基本的增删改查就不一一演示了,演示几个特殊一点的方法。
getOne():这个是方法返回结果不止一条则会抛出异常,如果想默认取第一条结果,可以给这方法传第二个参数为false。
Wrappers.<User>lambdaQuery().eq(User::getAge, 31)
@Test public void getOne() { User one = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getAge, 31), false); System.out.println(one); }
saveOrUpdateBatch(),批量新增或者修改方法,判断ID是否存在,如果ID不存在执行新增,如果ID存在先执行查询语句,查询结果为空新增,否则修改。
@Test public void saveOrUpdateBatch() { User user1 = new User(); user1.setName("兔子"); user1.setAge(18); User user2 = new User(); user2.setId(1088250446457389060L); user2.setName("乌龟"); user2.setAge(18); List<User> users = Arrays.asList(user1, user2); boolean b = userService.saveOrUpdateBatch(users); System.out.println(b); }
接下来说一下基于lambda的相关操作
/** * lambda查询 */ @Test public void lambdaQuery(){ List<User> list = userService.lambdaQuery().eq(User::getAge, 18).list(); list.forEach(System.out::println); } /** * lambda修改 */ @Test public void lambdaUpdate(){ boolean update = userService.lambdaUpdate().eq(User::getAge, 18).set(User::getAge, 31).update(); System.out.println(update); } /** * lambda删除 */ @Test public void lambdaRemoce(){ boolean remove = userService.lambdaUpdate().eq(User::getAge, 18).remove(); System.out.println(remove); }