投影查询介绍
- 投影查询的主要作用是
提高数据库查询的效率
,并且减少网络传输的数据量
。在大型系统中,数据量很大,查询的效率和速度影响系统的性能和响应时间,因此只查询所需的字段可以减少数据库的工作量,提高查询效率。此外,只返回业务需要的字段,可以减少数据传输的数据量,从而加快数据传输的速度,提高系统响应速度。 - 另外,投影查询也可以
提高代码的可读性和维护性
。只查询需要的字段,可以使查询语句更加简洁,易于理解和维护。
以下是 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);
}
}
测试结果