您的位置:

优化Spring JPA项目——LambdaQueryWrapper和QueryMapper

一、LambdaQueryWrapper小标题

LambdaQueryWrapper是mybatis-plus提供的一个查询构造器,通过它可以封装查询条件,使得查询更加简单方便,尤其在复杂查询时特别有用,下面我们来详细介绍LambdaQueryWrapper的使用方法。

1、LambdaQueryWrapper的创建

LambdaQueryWrapper的创建非常简单,只需要用到静态方法lambdaQueryWrapper方法即可:


LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();

上述代码表示定义了一个用于UserEntity的LambdaQueryWrapper对象。LambdaQueryWrapper<>表示泛型,用于指定查询的实体类。

2、LambdaQueryWrapper的基本使用

通过LambdaQueryWrapper对象可以构建SQL查询条件:


wrapper.eq(UserEntity::getName, "admin")
       .like(UserEntity::getEmail, "example");

上述代码依次表示设置查询条件为:name等于admin,且email包含example。eq方法表示等于,like方法表示包含。括号中的参数是Lambda表达式,表示实体类的属性和对应的取值。

更多LambdaQueryWrapper的操作请查阅官方文档。

二、QueryMapper小标题

QueryMapper是一种自定义的SQL查询方法,通过它可以在接口中定义SQL查询方法。下面我们来详细介绍QueryMapper的使用方法。

1、QueryMapper的创建

QueryMapper的创建非常简单,只需要定义一个接口,并在接口方法上使用@Query注解即可:


public interface UserMapper extends BaseMapper<UserEntity> {
    @Query("select * from user where name like #{name}")
    List<UserEntity> selectByName(@Param("name") String name);
}

上述代码表示定义了一个返回UserEntity列表的selectByName方法,查询条件为name包含指定参数。@Query注解的参数为自定义的SQL查询语句,其中#{name}表示查询条件中的name参数,@Param("name")表示方法参数中的name参数,两者对应。

2、QueryMapper的使用

使用QueryMapper查询非常简单,只需要通过MapperFactoryBean获取对应的Mapper对象,并调用定义的查询方法即可:

@Autowired
private UserMapper userMapper;

public void testSelectByName() {
    List<UserEntity> users = userMapper.selectByName("admin");
    Assert.assertEquals(1, users.size());
}

上述代码表示通过userMapper的selectByName方法查询名字为admin的用户,断言查询结果数量为1。

三、LambdaQueryWrapper和QueryMapper联合使用小标题

在实际开发中,我们往往需要使用LambdaQueryWrapper和QueryMapper联合查询数据库,下面以查询用户列表为例,演示使用LambdaQueryWrapper和QueryMapper的联合使用方法:


public interface UserMapper extends BaseMapper<UserEntity> {
    @Query("select * from user where 1=1")
    List<UserEntity> selectListWrapper(@Param(Constants.WRAPPER) Wrapper<UserEntity> wrapper);
}

上述代码中,方法名为selectListWrapper,该方法使用了QueryMapper定义的方法,同时传入了一个Wrapper参数。Wrapper<UserEntity>表示LambdaQueryWrapper,Constants.WRAPPER表示Wrapper的标识,这样就实现了LambdaQueryWrapper和QueryMapper的联合使用。

调用示例代码:


LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getName, "admin")
       .like(UserEntity::getEmail, "example");
List<UserEntity> users = userMapper.selectListWrapper(wrapper);

上述代码表示定义了一个LambdaQueryWrapper,设置查询条件为:name等于admin,且email包含example。然后通过userMapper的selectListWrapper方法查询用户列表。

四、总结

LambdaQueryWrapper和QueryMapper是mybatis-plus提供的两个强大的工具,联合使用可以实现更为灵活和便捷的查询操作。它们的使用方法非常简单,但是在实际开发中却非常实用和方便。