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
;