Mybatis-Plus中如何实现详细查询投影操作?

2026-05-20 22:561阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计778个文字,预计阅读时间需要4分钟。

Mybatis-Plus中如何实现详细查询投影操作?

查询投影的作用是在查询数据库时仅返回所需的字段,而非全部字段。这样做可以实现以下效果:+ 减少网络传输数据量:只返回所需的字段,可以减少数据传输量,提高查询效率。+ 减少从数据库服务器获取数据的时间:只获取需要的字段,可以减少数据库服务器的负担,提高查询速度。

查询投影的作用是在查询数据库时只返回所需的字段,而不是返回全部的字段。这样可以实现以下几个方面的作用:

Mybatis-Plus中如何实现详细查询投影操作?

  • 减少网络传输数据量:只返回需要的字段,可以减少从数据库服务器到客户端的网络传输数据量,从而提高查询效率和速度。

  • 提高查询效率:只返回需要的字段,可以减少数据库的工作量,从而提高查询效率和速度。

  • 提高代码的可读性和维护性:只查询需要的字段,可以使查询语句更加简洁,易于理解和维护。

  • 隐藏敏感信息:在某些情况下,可能需要隐藏某些字段的信息,例如密码等敏感信息。通过查询投影,可以选择性地隐藏这些字段,保护敏感信息的安全性。

以下是 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); } }

测试结果

本文共计778个文字,预计阅读时间需要4分钟。

Mybatis-Plus中如何实现详细查询投影操作?

查询投影的作用是在查询数据库时仅返回所需的字段,而非全部字段。这样做可以实现以下效果:+ 减少网络传输数据量:只返回所需的字段,可以减少数据传输量,提高查询效率。+ 减少从数据库服务器获取数据的时间:只获取需要的字段,可以减少数据库服务器的负担,提高查询速度。

查询投影的作用是在查询数据库时只返回所需的字段,而不是返回全部的字段。这样可以实现以下几个方面的作用:

Mybatis-Plus中如何实现详细查询投影操作?

  • 减少网络传输数据量:只返回需要的字段,可以减少从数据库服务器到客户端的网络传输数据量,从而提高查询效率和速度。

  • 提高查询效率:只返回需要的字段,可以减少数据库的工作量,从而提高查询效率和速度。

  • 提高代码的可读性和维护性:只查询需要的字段,可以使查询语句更加简洁,易于理解和维护。

  • 隐藏敏感信息:在某些情况下,可能需要隐藏某些字段的信息,例如密码等敏感信息。通过查询投影,可以选择性地隐藏这些字段,保护敏感信息的安全性。

以下是 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); } }

测试结果