mybatis-plus这个插件现在用的开发还是很多的,这里就讲一个其中我们常用到的点.
很多时候我们要查某个字段的数据,其他无关的数据我们不需要,很多同学可能刚开始的时候使用这个插件用的依然还是将所有都查出来,然后这样再取想要的数据.而且数据库索引很多时候就用不到了,导致的问题可能会有全表扫描这样的问题.
其实我们是可以使用这个插件自带的功能来实现选取所需的字段的.
下面举一个简单的例子:
实体类
@Data
public class User {
/**
* 用户id
*/
private Integer id;
/**
* 用户姓名
*/
private String name;
/**
* 用户年龄
*/
private Integer age;
/**
* 性别
*/
private String sex;
/**
* 创建时间
*/
private Timestamp createTime;
/**
* 更新时间
*/
private Timestamp updateTime;
}
DTO
public class UserDTO {
/**
* 用户id
*/
private Integer id;
/**
* 用户姓名
*/
private String name;
/**
* 用户年龄
*/
private Integer age;
/**
* 性别
*/
private String sex;
}
实现部分
@Override
public UserDTO getUserDTO(Integer userId) {
//这里就是我们用其自带的功能点实现先取指定的字段.
User user = getOne(Wrappers.lambdaQuery(User.class).
//筛选条件
eq(User::getId, userId)
//所要选取的字段
.select(User::getId, User::getName, User::getAge, User::getSex));
UserDTO dto = new UserDTO();
BeanUtils.copyProperties(user, dto);
return dto;
}
看一下执行的sql
==> Preparing: SELECT id,name,age,sex FROM user WHERE (id = ?)
==> Parameters: 10(Integer)
<== Columns: id, name, age, sex
<== Row: 10, test1, 10, F
<== Total: 1
- 上面选取的字段都是我们指定的字段.而不是实体类的所有字段.(createTime,updateTime)没有出现在sql中.
网友评论