MyBatisPlus-IService接口

本文介绍了MyBatisPlus中的IService接口如何简化数据库操作,包括基本使用(自定义Service和Mapper接口)以及进阶使用中的lambdaQuery和lambdaUpdate功能,展示了如何在CRUD操作中运用动态SQL进行复杂条件查询和更新。
摘要由CSDN通过智能技术生成


一、概述

MyBatisPlus中的IService接口提供了一种更加简洁、灵活和可扩展的方式来定义数据库操作方法,如果不使用MyBatisPlus不使用IService接口,Mapper层只继承BaseMapper可能会导致代码量增加、可维护性降低、可扩展性和灵活性下降等问题。

二、基本使用

自定义Service接口,继承IService接口,并指定泛型:

import com.baomidou.mybatisplus.extension.service.IService;
import com.ming.entity.User;

public interface IUserService extends IService<User> {
}

自定义Service的实现类,实现自定义接口,并且继承ServiceImpl类,第一个参数是对应的Mapper接口,第二个参数是对应的泛型:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ming.Service.IUserService;
import com.ming.entity.User;
import com.ming.mapper.UserMapper;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}

单元测试:

import com.ming.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@Slf4j
@SpringBootTest
class IUserServiceTest {

    @Autowired
    private IUserService userService;

    /**
     * 插入数据
     */
    @Test
    public void testSaveUser() {
        User user = User.builder().name("汤姆").age(1000).gender(1).phone("18000000000").build();

        userService.save(user);
    }

    /**
     * 枚举【in】查询
     */
    @Test
    public void testQuery() {
        List<User> users = userService.listByIds(List.of(1L, 2L, 3L));
        log.info("查询结果:{}", users);
    }
}

注意:这里使用的时候不是在调用Mapper层去查询数据,而是调用继承了IService接口的自定义接口查询

三、进阶使用

在ServiceImpl实现类中完成对数据库表的CRUD操作,可以用于编写动态SQL

3.1 lambdaQuery

测试类

@Test
void testLambdaQuery() {
    User user = new User();
    user.setUsername("十");
    user.setBalance(10000);
    List<User> userList = userService.queryVegueByUser(user);
    userList.forEach(u->{
        System.out.println(u);
    });
}

Service接口

public interface IUserService extends IService<User> {

    /**
     * 根据复杂条件查询用户信息
     * @param user
     * @return
     */
    List<User> queryVegueByUser(User user);
}

ServiceImpl实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    /**
     * 根据复杂条件查询用户信息
     *
     * @param user
     * @return
     */
    @Override
    public List<User> queryVegueByUser(User user) {
        List<User> userList = lambdaQuery().like(user.getUsername() != null, User::getUsername, user.getUsername())
                .eq(user.getBalance() != null, User::getBalance, user.getBalance()).list();
        return userList;
    }
}

3.2 lambdaUpdate

测试类

@Test
void testLambdaUpdate() {
    User user = User.builder().id(1).username("张三").balance(100).build();
    userService.updateUserById(user);
}

Service接口

public interface IUserService extends IService<User> {
    /**
     * 根据复杂条件修改用户信息
     *
     * @param user
     */
    void updateUserById(User user);
}

ServiceImpl实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    /**
     * 根据复杂条件修改用户信息
     *
     * @param user
     */
    @Override
    public void updateUserById(User user) {
        lambdaUpdate()
                .set(user.getUsername() != null, User::getUsername, user.getUsername())
                .set(user.getBalance() != null, User::getBalance, user.getBalance())
                .eq(User::getId, user.getId())
                .update();
    }
}

注意:执行修改语句的时候,最后一定要增加update()修改的方法才会执行。
上面的语句相当于:UPDATE user SET username=?,balance=? WHERE (id = ?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值