MyBatis-Plus 逻辑表实现
首先设计Entity对象
/**
* 此Entity对象,专门设计为找到 user 比 user_temp 表多的数据
* @TableName 参数里面的可以为一张物理表,也可以是一个逻辑表
*/
@Data
@TableName(" (select u1.* from user u1 where not exists (select 1 from user_temp b where u1.id = b.user_id)) u ")
public class SelectUserEntity {
@TableId(value = "u.id")
private Integer id;
//查询出用户名称
@TableField(value = "u.name")
private String userName;
//查询user表的手机号码
@TableField(value = "u.phone")
private String phone;
//查询user表的创建时间字段
@TableField(value = "u.create_time")
private Date createTime;
//查询user表的更新时间字段
@TableField(value = "u.update_time")
private Date updateTime;
//设置一个默认值
@TableField(value = "0")
private Integer status;
}
再创建一个MyBatis-Plus 的Mapper实现接口:(也可以使用Service接口)
@Mapper
public interface SelectUserDao extends BaseMapper<SelectUserEntity> {
}
数据查询展示:
@Slf4j
@Service
public class UserService {
@Autowired
private SelectUserDao suDao;
@Override
public void execute() {
QueryWrapper<SelectUserEntity> queryWrapper = new QueryWrapper<>();
//根据查询的结果集中id排序
queryWrapper.orderByAsc("u.id");
//queryWrapper.eq("u.name","张三");
//查询表中缺少的所有数据
List<SelectUserEntity> users = suDao.selectList(queryWrapper);
//将差别数据,全部插入到会员生日表
for (SelectUserEntity user : users) {
log.info("数据:"+user.toString());
}
}
Springboot启动代码
@Service
@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
@Autowired
private UserService uService;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("通过实现ApplicationRunner接口,在spring boot项目启动后打印参数");
//测试调试
uService.execute();
}
}
最后:
解释Entity类,最后通过MyBatis-Plus传递给数据库时,最终的sql语句。
@TableName(" (select u1.* from user u1 where not exists (select 1 from user_temp b where u1.id = b.user_id)) u ")
public class SelectUserEntity {
@TableId(value = "u.id")
private Integer id;
//查询出用户名称
@TableField(value = "u.name")
private String userName;
//设置一个默认值
@TableField(value = "0")
private Integer status;
..........
和
public class UserService {
@Autowired
private SelectUserDao suDao;
@Override
public void execute() {
QueryWrapper<SelectUserEntity> queryWrapper = new QueryWrapper<>();
//根据查询的结果集中id排序
queryWrapper.orderByAsc("u.id");
queryWrapper.eq("u.name","张三");
..........
传递给数据库时,使用了select 字段1,字段2,… from 表名参数 where 条件1 and 条件2 …;
查询的字段1为u.id ,字段2 为 u.name 。(查询的字段,都是定义在Entity类中)
表名参数为 (select u1.* from user u1 where not exists (select 1 from user_temp b where u1.id = b.user_id)) u
查询条件为 u.name = “张三”
排序条件为 u.id asc
分组条件没有
最后得到SQL语句为:
select u.id,u.name,0,.......
from
(select u1.* from user u1 where not exists (select 1 from user_temp b where u1.id = b.user_id)) u
where
u.name = "张三"
order by u.id asc
;