一、条件构造器
MybatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求:
BaseMapper中的方法参数可以是一个条件构造器Wrapper,通过继承关系可以看出查询的条件构造器(QueryWrapper)和修改的条件构造器(UpdateWrapper)都继承自AbstractWrapper,在AbstractWrapper中有多个方法可以使用,如eq表示等于,ge表示大于等于等等,只要在where条件中用到的都可以在AbstractWrapper中对应的方法实现。
而QueryWrapper和UpdateWrapper处理继承父类AbstractWrapper的所有功能外,还拓展了自己的功能,QueryWrapper就是在父类的基础上拓展类select的功能,同理UpdateWrapper就是拓展了更新相关的功能,即setSql方法,通过字符串的形式把set的部分写出来,然后拼到sql语句中。
还有一个构造器是在构造条件时基于Lambda的语法实现上述功能的
1.1 基于QueryWrapper查询
@Test void testQueryWrapper() { //1.构建查询条件 QueryWrapper<User2> wrapper = new QueryWrapper<User2>() .select("id","username","password") .like("username","a"); //2.查询 List<User2> user2s = user2Mapper.selectList(wrapper); user2s.forEach(System.out::println); }
1.2 基于QueryWrapper修改
@Test void testUpdateByQueryWrapper() { //要更新的数据 User2 user2 = new User2(); user2.setPassword("000"); //更新的条件 QueryWrapper<User2> wrapper = new QueryWrapper<User2>() .eq("username","zhaoliu"); //执行更新 user2Mapper.update(user2,wrapper); }
1.3 基于UpdateWrapper修改
@Test void testUpdateWrapper() { UpdateWrapper<User2> wrapper = new UpdateWrapper<User2>() .setSql("password = '111'") .in("id",1,3,4); //执行更新 user2Mapper.update(null,wrapper); }
1.4 基于LambdaQueryWrapper查询
@Test void testLambdaQueryWrapper() { //1.构建查询条件 LambdaQueryWrapper<User2> wrapper = new LambdaQueryWrapper<User2>() .select(User2::getId,User2::getUsername,User2::getPassword) .like(User2::getUsername,"a"); //2.查询 List<User2> user2s = user2Mapper.selectList(wrapper); user2s.forEach(System.out::println); }
二、自定义SQL
- 我们可以利用MybatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩下的部分
2.1 基于Wrapper来构建where条件
@Test void testCustomSqlUpdate() { //更新条件 String password = "333"; //执行更新 QueryWrapper<User2> wrapper = new QueryWrapper<User2>().in("id",2,5,6); //调用自定义方法 user2Mapper.updatePwdByIds(wrapper,password); }
2.2 在mapper>方法参数中用Param注解声明wrapper变量名称,必须是ew
void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);
2.3 自定义SQL,并使用Wrapper条件
@Update("update tb_user2 set password = #{password} ${ew.customSqlSegment}") void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);
三、Service接口
3.1 Service接口基本用法
- 自定义Service接口继承IService接口
public interface IUserService extends IService<User2> { }
- 自定义Service实现类,实现自定义接口并继承Servicelmpl类
public class UserServiceImpl extends ServiceImpl<User2Mapper,User2> implements IUserService { }
- Service新增:
@Test void testSaveUser() { User2 user = new User2(); user.setId(7); user.setUsername("老七"); user.setPassword("777"); userService.save(user); }
- Service查询:
@Test void testQuery() { List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(3); ids.add(5); List<User2> user2s = userService.listByIds(ids); user2s.forEach(System.out::println); }