使用版本: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);
}
等......