查询投影的作用是在查询数据库时只返回所需的字段,而不是返回全部的字段。这样可以实现以下几个方面的作用:
-
减少网络传输数据量
:只返回需要的字段,可以减少从数据库服务器到客户端的网络传输数据量,从而提高查询效率和速度。 -
提高查询效率
:只返回需要的字段,可以减少数据库的工作量,从而提高查询效率和速度。 -
提高代码的可读性和维护性
:只查询需要的字段,可以使查询语句更加简洁,易于理解和维护。 -
隐藏敏感信息
:在某些情况下,可能需要隐藏某些字段的信息,例如密码等敏感信息。通过查询投影,可以选择性地隐藏这些字段,保护敏感信息的安全性。
以下是 select 和 selectPage 方法中查询投影的使用示例:
- select
List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
.select(User::getId, User::getName));
users.forEach(System.out::println);
查询结果:
- selectPage
// 这里的 Page(1, 2) 是指从第一页开始查询,查询两条记录
Page<User> page = userMapper.selectPage(new Page<>(1, 2),
new LambdaQueryWrapper<User>().select(User::getId,User::getName));
System.out.println("page.getCurrent() = " + page.getCurrent());
System.out.println("page.getSize() = " + page.getSize());
System.out.println("page.getPages() = " + page.getPages());
System.out.println("page.getTotal() = " + page.getTotal());
System.out.println("page.getRecords() = " + page.getRecords());
查询结果:
使用Mybatis-Plus查询投影和GROUP BY统计个数
表结构
CREATE TABLE t_user (
id VARCHAR2(19) NOT NULL,
name VARCHAR2(50) NOT NULL,
age NUMBER(3) NOT NULL,
CONSTRAINT pk_t_user_id PRIMARY KEY (id)
);
插入记录
INSERT INTO t_user ( id, name, age ) VALUES ( 1, 'tom', 19 );
INSERT INTO t_user ( id, name, age ) VALUES ( 2, 'jack', 20 );
INSERT INTO t_user ( id, name, age ) VALUES ( 3, 'lily', 21 );
INSERT INTO t_user ( id, name, age ) VALUES ( 4, 'scott', 19 );
INSERT INTO t_user ( id, name, age ) VALUES ( 5, 'smith', 20 );
domain类
@TableName(value ="T_USER")
@Data
public class User implements Serializable {
/**
* 主键
*/
@TableId
private String id;
/**
* 用户名
*/
private String name;
/**
* 用户年龄
*/
private Integer age;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
mapper类
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
测试代码
@SpringBootTest
class MybatisplusQuickstartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testSelect() {
QueryWrapper<User> userQueryWrapper = new QueryWrapper<User>()
.groupBy("age")
.select("age, count(*) as count")
.orderByAsc("age")
.orderByDesc("count");
List<Map<String, Object>> list = userMapper.selectMaps(userQueryWrapper);
System.out.println("list = " + list);
}
}
测试结果