MyBatis-Plus 邏輯表實現

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
 ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章