mybatisplus修改某个字段_建议:支持只通过UpdateWrapper修改指定的列

本文讨论了在MyBatisPlus 3.0.4版本中如何使用UpdateWrapper修改特定字段,并对比了与自定义SQL及Hibernate的便捷性。作者提出希望MyBatisPlus能提供类似Hibernate的泛型基类,减少重复代码。同时,介绍了目前MyBatisPlus通过PageMapperMethod进行动态SQL的实现,并提出了关于泛型在类和方法级别应用的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用版本:3.0.4

使用场景:

UpdateWrapper updateWrapper = new UpdateWrapper();

updateWrapper.eq("ID", 0);

updateWrapper.set("SESSION_KEY", "abc");

baseMapper.update(null, updateWrapper);

当然可以通过 @update和mapper sql实现相同功能

@update("UPDATE USER_ACCOUNT SET SESSION_KEY=#{sessionKey} WHERE ID=#{id}")

void updateSessionKey(@param("id") long id, @param("sessionKey") String sessionKey);

但比较麻烦,肯定最上面的代码最方便

另外,在hibernate中,我可以定义一个baseDao,其他实体dao/mapper可以不写任何到代码(通过泛型),就能实现常用简单的CURD(同理也可以处理掉service层代码)

如果我一个模块比较简单,有6个表,我只需要创建表和实体即可,使用BaseCommonDao “对象”即可。plus中能否提供者这类操作。

虽然plus中有BaseMapper,但我还是要去创建额外的mapper类,哪怕是空的(plus中继承BaseMapper来获取获取操作db的能力,hibernate中可封装成共用一个dao实体)。

源码中发现plus通过代理自动为mapper添加实现,代理实现在PageMapperMethod下。 所以理论上是否也能实现次功能。

个人感觉是泛型写在类上和现在方法上处理逻辑不一样。

(由于项目需要接触mybatis plus没多久,之前一直用的hibernate,所以有很多使用方式上的疑问,若有理解不对,请忽略。)

如下:

common dao 代码

public class BaseDAOImpl implements BaseDAO {

public Serializable save(T o) {

return getCurrentSession().save(o);

}

public void delete(T o) {

getCurrentSession().delete(o);

}

public void update(T o) {

getCurrentSession().update(o);

}

public void saveOrUpdate(T o) {

getCurrentSession().saveOrUpdate(o);

}

common service 代码

@Resource

protected BaseDAO baseDAO;

@Override

public Serializable save(T user) {

return baseDAO.save(user);

}

@Override

public void delete(T o) {

baseDAO.delete(o);

}

等......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值