目录
- 一、概述
- 二、基本使用
- 三、进阶使用
-
- 3.1 lambdaQuery
- 3.2 lambdaUpdate
一、概述
MyBatisPlus中的IService接口提供了一种更加简洁、灵活和可扩展的方式来定义数据库操作方法,如果不使用MyBatisPlus不使用IService接口,Mapper层只继承BaseMapper可能会导致代码量增加、可维护性降低、可扩展性和灵活性下降等问题。
二、基本使用
import com.baomidou.mybatisplus.extension.service.IService; import com.ming.entity.User; public interface IUserService extends IService<User> { }
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); }); }
public interface IUserService extends IService<User> { /** * 根据复杂条件查询用户信息 * @param user * @return */ List<User> queryVegueByUser(User user); }
@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); }
public interface IUserService extends IService<User> { /** * 根据复杂条件修改用户信息 * * @param user */ void updateUserById(User user); }
@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 = ?)