不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2022-05-06 22:14:05  修改时间:2024-04-23 15:40:17  分类:Java框架/系统  编辑

【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);
}

 

 

摘自:https://jiannan.blog.csdn.net/article/details/92415413