0
点赞
收藏
分享

微信扫一扫

Mybatis-Plus查询投影详解

cnlinkchina 2023-03-17 阅读 80

投影查询介绍

  1. 投影查询的主要作用是提高数据库查询的效率,并且减少网络传输的数据量。在大型系统中,数据量很大,查询的效率和速度影响系统的性能和响应时间,因此只查询所需的字段可以减少数据库的工作量,提高查询效率。此外,只返回业务需要的字段,可以减少数据传输的数据量,从而加快数据传输的速度,提高系统响应速度。
  2. 另外,投影查询也可以提高代码的可读性和维护性。只查询需要的字段,可以使查询语句更加简洁,易于理解和维护。

以下是 select 和 selectPage 方法中查询投影的使用示例:

  • select
List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
        .select(User::getId, User::getName));
users.forEach(System.out::println);

查询结果: image.png

  • 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());

查询结果: image.png

使用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);
    }
}

测试结果 image.png

举报

相关推荐

0 条评论