All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.qdbp.jdbc.stream.CrudOnAfterEntityStream Maven / Gradle / Ivy

package com.gitee.qdbp.jdbc.stream;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import com.gitee.qdbp.able.enums.LogicType;
import com.gitee.qdbp.able.exception.ServiceException;
import com.gitee.qdbp.able.jdbc.condition.DbWhere;
import com.gitee.qdbp.able.jdbc.condition.DbWhereForFieldCore;
import com.gitee.qdbp.able.jdbc.condition.DbWhereForOnFieldless;
import com.gitee.qdbp.able.jdbc.condition.DbWhereForStartCore;
import com.gitee.qdbp.able.jdbc.condition.SkipType;
import com.gitee.qdbp.jdbc.api.CrudDao;
import com.gitee.qdbp.jdbc.exception.DbErrorCode;
import com.gitee.qdbp.jdbc.model.SimpleFieldColumn;
import com.gitee.qdbp.jdbc.model.ValidStrategy;
import com.gitee.qdbp.jdbc.utils.ParseTools;
import com.gitee.qdbp.tools.utils.VerifyTools;

/**
 * 实体对象后续操作: insert / update / where
 *
 * @author zhaohuihua
 * @version 20210530
 */
public class CrudOnAfterEntityStream {

    protected final CrudDao dao;
    private final T entityObject;
    private final Map entityMap;

    CrudOnAfterEntityStream(CrudDao dao, T entityObject) {
        this.dao = dao;
        this.entityObject = entityObject;
        this.entityMap = null;
    }

    CrudOnAfterEntityStream(CrudDao dao, Map entityMap) {
        this.dao = dao;
        this.entityMap = entityMap;
        this.entityObject = null;
    }

    /**
     * 保存实体对象
*
    Serializable id = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .insert();
     * 
* * @return 返回主键编号 * @throws ServiceException 操作失败 */ public String insert() throws ServiceException { if (entityObject != null) { return dao.insert(entityObject); } else { return dao.insert(entityMap); } } /** * 保存实体对象
*
    Serializable id = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .insert();
     * 
* * @param fillCreateParams 是否自动填充创建参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 */ public String insert(boolean fillCreateParams) throws ServiceException { if (entityObject != null) { return dao.insert(entityObject, fillCreateParams); } else { return dao.insert(entityMap, fillCreateParams); } } /** * 保存实体对象
*
    Serializable id = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .insert(ValidStrategy.TRANSFORM);
     * 
* * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 返回主键编号 * @throws ServiceException 操作失败 */ public String insert(ValidStrategy validStrategy) throws ServiceException { if (entityObject != null) { return dao.insert(entityObject, validStrategy); } else { return dao.insert(entityMap, validStrategy); } } /** * 保存实体对象
*
    Serializable id = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .insert(ValidStrategy.TRANSFORM, true);
     * 
* * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillCreateParams 是否自动填充创建参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 */ public String insert(ValidStrategy validStrategy, boolean fillCreateParams) throws ServiceException { if (entityObject != null) { return dao.insert(entityObject, validStrategy, fillCreateParams); } else { return dao.insert(entityMap, validStrategy, fillCreateParams); } } /** * 根据条件更新实体对象
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .update();
     * 
* * @return 受影响行数 * @throws ServiceException 操作失败 */ public int update() throws ServiceException { if (entityObject != null) { return dao.update(entityObject); } else { return dao.update(entityMap); } } /** * 根据条件更新实体对象
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .where("userId").equals("U0000001")
            .and("userState").in(UserState.NORMAL, UserState.LOCKED)
            .end()
        .update(true, true); // 自动填充更新参数, 受影响行数为0时抛异常
     * 
* * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 */ public int update(boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException { if (entityObject != null) { return dao.update(entityObject, fillUpdateParams, errorOnUnaffected); } else { return dao.update(entityMap, fillUpdateParams, errorOnUnaffected); } } /** * 根据条件更新实体对象
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .update(ValidStrategy.TRANSFORM);
     * 
* * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 受影响行数 * @throws ServiceException 操作失败 */ public int update(ValidStrategy validStrategy) throws ServiceException { if (entityObject != null) { return dao.update(entityObject, validStrategy); } else { return dao.update(entityMap, validStrategy); } } /** * 根据条件更新实体对象
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .where("userId").equals("U0000001")
            .and("userState").in(UserState.NORMAL, UserState.LOCKED)
            .end()
        .update(ValidStrategy.TRANSFORM, true, true); // 超长时截断, 自动填充更新参数, 受影响行数为0时抛异常
     * 
* * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 */ public int update(ValidStrategy validStrategy, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException { if (entityObject != null) { return dao.update(entityObject, validStrategy, fillUpdateParams, errorOnUnaffected); } else { return dao.update(entityMap, validStrategy, fillUpdateParams, errorOnUnaffected); } } /** * Where条件
*
 int rows = qdbcBoot.crudStream(SysUser.class) .entity(user) .where("userId").equals("U0000001")
     * .and("userState").in(UserState.NORMAL, UserState.LOCKED) .end() .update();
     * 
     * @param fieldName 字段名称
     * @return 返回后续流式操作对象
     */
    public DbWhereForFieldCore> where(String fieldName) {
        DbWhere where = DbWhere.newEmptiableWhere();
        CrudOnEntityWhereByStream next;
        if (entityObject != null) {
            next = new CrudOnEntityWhereByStream<>(dao, entityObject, where);
        } else {
            next = new CrudOnEntityWhereByStream<>(dao, entityMap, where);
        }
        DbWhereForStartCore> start = new DbWhereForStartCore<>(next, where);
        return new DbWhereForFieldCore<>(start, SkipType.NONE, LogicType.AND, fieldName);
    }

    /**
     * 查询条件
*
 int rows = qdbcBoot.crudStream(SysUser.class) .entity(user) .where("userId").equals("U0000001")
     * .and("userState").in(UserState.NORMAL, UserState.LOCKED) .end() .update();
     * 
     * @return 返回后续流式操作对象
     */
    public DbWhereForOnFieldless> where() {
        DbWhere where = DbWhere.newEmptiableWhere();
        CrudOnEntityWhereByStream next;
        if (entityObject != null) {
            next = new CrudOnEntityWhereByStream<>(dao, entityObject, where);
        } else {
            next = new CrudOnEntityWhereByStream<>(dao, entityMap, where);
        }
        DbWhereForStartCore> start = new DbWhereForStartCore<>(next, where);
        return new DbWhereForOnFieldless<>(start, SkipType.NONE);
    }

    /**
     * 设置Where条件
     * 
     * @param where Where条件
     * @return 返回后续流式操作对象
     */
    public CrudOnEntityWhereByStream whereBy(DbWhere where) {
        if (entityObject != null) {
            return new CrudOnEntityWhereByStream<>(dao, entityObject, where);
        } else {
            return new CrudOnEntityWhereByStream<>(dao, entityMap, where);
        }
    }

    /**
     * 从实体类构建Where对象
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .whereBy(user)
        .update();
     * 
* * @param entity 实体类 * @return 返回后续流式操作对象 * @see ParseTools#parseBeanToDbWhere(Object) */ public CrudOnEntityWhereByStream whereBy(T entity) { DbWhere where = dao.plugins().parseTools().parseBeanToDbWhere(entity); if (entityObject != null) { return new CrudOnEntityWhereByStream<>(dao, entityObject, where); } else { return new CrudOnEntityWhereByStream<>(dao, entityMap, where); } } /** * 从Map构建Where对象
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .whereBy(map)
        .update();
     * 

* 只会包含clazz注解中通过@Column指定的字段名
* 应注意, 此时参数由前端传入, 条件不可控, 也有可能条件为空, 需要仔细检查条件内容, 防止越权操作
     * 转换规则:
        fieldName$Equals(=), fieldName$NotEquals(!=), 
        fieldName$LessThen(<), fieldName$LessEqualsThen(<=), 
        fieldName$GreaterThen(>), fieldName$GreaterEqualsThen(>=), 
        fieldName$IsNull, fieldName$IsNotNull, 
        fieldName$Like, fieldName$NotLike, fieldName$Starts, fieldName$Ends, 
        fieldName$In, fieldName$NotIn, fieldName$Between
     * 
* * @param map Map参数 * @return 返回后续流式操作对象 * @see ParseTools#parseBeanToDbWhere(Object) */ public CrudOnEntityWhereByStream whereBy(Map map) { DbWhere where = dao.plugins().parseTools().parseBeanToDbWhere(map); if (entityObject != null) { return new CrudOnEntityWhereByStream<>(dao, entityObject, where); } else { return new CrudOnEntityWhereByStream<>(dao, entityMap, where); } } /** * 以ID作为条件更新
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .whereById("U0000001")
        .update();
     * 
* * @param id 实体主键 * @return 返回后续流式操作对象 */ public CrudOnEntityWhereByStream whereById(Serializable id) { VerifyTools.requireNotBlank(id, "id"); SimpleFieldColumn pk = dao.sqlHelper().fragment().getPrimaryKey(); if (pk == null) { // 没有找到主键字段 String details = "UnsupportedWhereById, class=" + dao.getBeanClass().getName(); throw new ServiceException(DbErrorCode.DB_PRIMARY_KEY_FIELD_IS_UNRESOLVED).setDetails(details); } String primaryField = pk.getFieldName(); DbWhere where = DbWhere.newEmptiableWhere().on(primaryField).equals(id).end(); if (entityObject != null) { return new CrudOnEntityWhereByStream<>(dao, entityObject, where); } else { return new CrudOnEntityWhereByStream<>(dao, entityMap, where); } } /** * 按ID列表查询
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .entity(user)
        .whereByIds("U0000001", "U0000002", ...)
        .update();
     * 
* * @param ids 主键列表 * @return 返回后续流式操作对象 */ public CrudOnEntityWhereByStream whereByIds(String... ids) { VerifyTools.requireNotBlank(ids, "ids"); return doWhereByIds(Arrays.asList(ids)); } /** * 以ID列表作为条件更新
*
    int rows = qdbcBoot.crudStream(SysUser.class)
        .updateSet("userName").to("zhaohuihua") // 用户名修改为指定值
            .set("memberScore").add(+100) // 会员积分增加100
            .set("memberScore").add(-100) // 会员积分减少100
            .set("userState").toNull() // 用户状态修改为空
            .end()
        .whereByIds("U0000001", "U0000002", ...)
        .update();
     * 
* * @param ids 主键列表 * @return 返回后续流式操作对象 */ public CrudOnEntityWhereByStream whereByIds(Collection ids) { VerifyTools.requireNotBlank(ids, "ids"); return doWhereByIds(ids); } protected CrudOnEntityWhereByStream doWhereByIds(Collection ids) { SimpleFieldColumn pk = dao.sqlHelper().fragment().getPrimaryKey(); if (pk == null) { // 没有找到主键字段 String details = "UnsupportedWhereByIds, class=" + dao.getBeanClass().getName(); throw new ServiceException(DbErrorCode.DB_PRIMARY_KEY_FIELD_IS_UNRESOLVED).setDetails(details); } String primaryField = pk.getFieldName(); DbWhere where = DbWhere.newEmptiableWhere().on(primaryField).in(ids).end(); if (entityObject != null) { return new CrudOnEntityWhereByStream<>(dao, entityObject, where); } else { return new CrudOnEntityWhereByStream<>(dao, entityMap, where); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy