查询投影的作用是在查询数据库时只返回所需的字段,而不是返回全部的字段。这样可以实现以下几个方面的作用: 减少网络传输数据量:只返回需要的字段,可以减少从数据库服务器
查询投影的作用是在查询数据库时只返回所需的字段,而不是返回全部的字段。这样可以实现以下几个方面的作用:
-
减少网络传输数据量:只返回需要的字段,可以减少从数据库服务器到客户端的网络传输数据量,从而提高查询效率和速度。
-
提高查询效率:只返回需要的字段,可以减少数据库的工作量,从而提高查询效率和速度。
-
提高代码的可读性和维护性:只查询需要的字段,可以使查询语句更加简洁,易于理解和维护。
-
隐藏敏感信息:在某些情况下,可能需要隐藏某些字段的信息,例如密码等敏感信息。通过查询投影,可以选择性地隐藏这些字段,保护敏感信息的安全性。
以下是 select 和 selectPage 方法中查询投影的使用示例:
- select
查询结果:
- selectPage
查询结果:
使用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); } }测试结果