欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于mybatis-plus邏輯刪除自動(dòng)填充更新時(shí)間的問(wèn)題

 更新時(shí)間:2022年07月01日 15:27:34   作者:用戶1875908598375  
mybatis-plus是對(duì)mybatis的增強(qiáng),mybatis-plus更像是面向?qū)ο缶幊蹋瑪?shù)據(jù)庫(kù)基本CRUD的操作可以不用手動(dòng)編寫SQL語(yǔ)句,大大提高了開(kāi)發(fā)的效率,這篇文章主要介紹了mybatis-plus邏輯刪除自動(dòng)填充更新時(shí)間問(wèn)題,需要的朋友可以參考下

前言

mybatis-plus是對(duì)mybatis的增強(qiáng),mybatis-plus更像是面向?qū)ο缶幊?,?shù)據(jù)庫(kù)基本CRUD的操作可以不用手動(dòng)編寫SQL語(yǔ)句,大大提高了開(kāi)發(fā)的效率。

mybatis-plus有一個(gè)擴(kuò)展功能:自動(dòng)填充。此功能常見(jiàn)的應(yīng)用場(chǎng)景為,插入數(shù)據(jù)的時(shí)候自動(dòng)添加創(chuàng)建時(shí)間、創(chuàng)建人、修改時(shí)間、修改人、刪除標(biāo)記。通過(guò)實(shí)現(xiàn)MetaObjectHandler接口,重寫insertFill、updateFill方法,當(dāng)我們插入和修改數(shù)據(jù)的時(shí)候可以自動(dòng)添加指定字段的值。

mybatis-plus還有另一個(gè)擴(kuò)展功能:邏輯刪除。當(dāng)我刪除某條數(shù)據(jù)時(shí),其實(shí)是通過(guò)一條update語(yǔ)句修改數(shù)據(jù)的刪除標(biāo)記字段。

問(wèn)題發(fā)現(xiàn)

當(dāng)配置了自動(dòng)填充,然后通過(guò)mapperdeleteById方法可以實(shí)現(xiàn)修改刪除標(biāo)記,但是無(wú)法自動(dòng)填充修改時(shí)間字段,即修改了數(shù)據(jù),但是更新時(shí)間沒(méi)有被修改為當(dāng)前時(shí)間。

刪除前數(shù)據(jù)狀態(tài),刪除標(biāo)記為0,更新時(shí)間為:2022-06-30 14:56:16。如圖:

調(diào)用接口進(jìn)行刪除,刪除標(biāo)記為1,因?yàn)楦聲r(shí)間字段設(shè)置了如果為空的時(shí)候利用數(shù)據(jù)庫(kù)生成的默認(rèn)時(shí)間,系統(tǒng)未設(shè)置更新時(shí)間,所以更新時(shí)間為:2022-06-30 09:15:59。如圖:

@Transactional(rollbackFor = Exception.class)
public boolean removeById(Long id) {
    int count = orderInfoMapper.deleteById(id);// 邏輯刪除不能自動(dòng)填充更新時(shí)間
    if (count > 0) {
        return true;
    }
    return false;
}

應(yīng)用系統(tǒng)的打印的SQL語(yǔ)句沒(méi)有設(shè)置時(shí)間。如圖:

因?yàn)閿?shù)據(jù)庫(kù)沒(méi)有調(diào)整時(shí)區(qū),所以數(shù)據(jù)庫(kù)默認(rèn)的時(shí)間看起來(lái)有點(diǎn)不太正常,請(qǐng)忽略。至少能看出來(lái)更新時(shí)間是數(shù)據(jù)庫(kù)生成的時(shí)間,并不是因?yàn)閼?yīng)用系統(tǒng)設(shè)置的時(shí)間。

以下的寫法也不能自動(dòng)填充更新時(shí)間。

@Transactional(rollbackFor = Exception.class)
public boolean removeById(Long id) {
    LambdaQueryWrapper<OrderInfo> queryWrapper = new QueryWrapper<OrderInfo>().lambda();
    queryWrapper.eq(OrderInfo::getId,id);
    nt count = orderInfoMapper.delete(queryWrapper); // 邏輯刪除不能自動(dòng)填充更新時(shí)間

    if (count > 0) {
        return true;
    }
    return false;
}

尋找原因

查看官網(wǎng)關(guān)于邏輯刪除的章節(jié)描述。查看常見(jiàn)問(wèn)題小節(jié)。如圖:

官方也有說(shuō)刪除接口自動(dòng)填充功能失效。

官方的使用說(shuō)明也有說(shuō)明邏輯刪除的使用方法:

解決方法

方法一

根據(jù)官方的提示1. 使用 update 方法并: UpdateWrapper.set(column, value)(推薦)。

代碼實(shí)踐如下:

@Transactional(rollbackFor = Exception.class)
public boolean removeById(Long id) {
    LambdaUpdateWrapper<OrderInfo> updateWrapper = new UpdateWrapper<OrderInfo>().lambda();
    
    updateWrapper.eq(OrderInfo::getId, id).set(OrderInfo::getDeleteFlag, 1);
    int count = orderInfoMapper.update(new OrderInfo(), updateWrapper);
    
    if (count > 0) {
        return true;
    }
    return false;
}

執(zhí)行SQL語(yǔ)句:

數(shù)據(jù)結(jié)果:

方法二

根據(jù)官方的提示1. 使用Sql注入器注入com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill并使用(推薦)。查看LogicDeleteByIdWithFill類。

發(fā)現(xiàn)已經(jīng)被表示為過(guò)時(shí)了,但是根據(jù)注釋發(fā)現(xiàn),邏輯刪除的時(shí)候,可以通過(guò)傳入entity參數(shù),這樣就會(huì)有可能進(jìn)行字段字段填充。

代碼如下:

@Transactional(rollbackFor = Exception.class)
public boolean removeById(Long id) {
    OrderInfo orderInfo = new OrderInfo();
    int count = orderInfoMapper.deleteById(orderInfo.setId(id));
    if (count > 0) {
        return true;
    }
    return false;
}

SQL語(yǔ)句中的確自動(dòng)填填充了修改時(shí)間字段的值,數(shù)據(jù)中也的確更新了修改時(shí)間。

補(bǔ)充寫法

@Transactional(rollbackFor = Exception.class)
public boolean removeById(Long id) {
    LambdaUpdateWrapper<OrderInfo> updateWrapper = new UpdateWrapper<OrderInfo>().lambda();
    updateWrapper.eq(OrderInfo::getId,id);
    OrderInfo orderInfo = new OrderInfo();
    orderInfo.setDeleteFlag(true);
    int count = orderInfoMapper.update(orderInfo, updateWrapper);
    // updateWrapper.eq(OrderInfo::getId, id).set(OrderInfo::getDeleteFlag, 1);
    // int count = orderInfoMapper.update(new OrderInfo(), updateWrapper);
    if (count > 0) {
        return true;
    }
    return false;
}
@Transactional(rollbackFor = Exception.class)
public boolean removeById(Long id) {
    LambdaUpdateWrapper<OrderInfo> updateWrapper = new UpdateWrapper<OrderInfo>().lambda();
    updateWrapper.eq(OrderInfo::getId, id).set(OrderInfo::getDeleteFlag, 1);
    int count = orderInfoMapper.update(new OrderInfo(), updateWrapper);
    if (count > 0) {
        return true;
    }
    return false;
}

到此這篇關(guān)于mybatis-plus邏輯刪除自動(dòng)填充更新時(shí)間的文章就介紹到這了,更多相關(guān)mybatis-plus邏輯刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論