package org.hsweb.web.service.commons; import org.hsweb.ezorm.core.dsl.Update; import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.GenericPo; import org.hsweb.web.dao.UpdateMapper; import org.hsweb.web.service.InsertService; import org.hsweb.web.service.QueryService; import org.hsweb.web.service.UpdateService; import java.util.List; /** * @author zhouhao */ public interface SimpleUpdateService<Po extends GenericPo<Pk>, Pk> extends UpdateService<Po> { UpdateMapper<Po> getUpdateMapper(); void tryValidPo(Po po); @Override default int update(Po data) { tryValidPo(data); return createUpdate().fromBean(data).where(GenericPo.Property.id).exec(); } @Override default int update(List<Po> data) { int i = 0; for (Po po : data) { i += update(po); } return i; } @Override default int saveOrUpdate(Po po) { if (this instanceof QueryService) { Po old = ((QueryService<Po, Pk>) this).selectByPk(po.getId()); if (old != null) return update(po); else { if (this instanceof InsertService) ((InsertService) this).insert(po); } } else { throw new UnsupportedOperationException("不支持此操作"); } return 1; } /** * 创建dsl更新操作对象,默认使用map进行数据填充,调用此方法,需要通过{@link Update#set(String, Object)}进行属性赋值 * * @return {@link Update} * @see Update * @see UpdateService#createUpdate(UpdateMapper) */ default Update<Po, UpdateParam<Po>> createUpdate() { return UpdateService.createUpdate(getUpdateMapper()); } /** * 创建dsl更新操作对象,并指定要操作的数据 * * @return {@link Update} * @see Update * @see UpdateService#createUpdate(UpdateMapper) */ default Update<Po, UpdateParam<Po>> createUpdate(Po data) { return Update.build(getUpdateMapper()::update, new UpdateParam<>(data)); } }