# ecology9-plug **Repository Path**: Blithe0306/ecology9-plug ## Basic Information - **Project Name**: ecology9-plug - **Description**: 泛微OA ecology9开发插件、ORM插件 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2025-04-02 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 泛微OA/Ecology9/E9插件、简易ORM插件 ### 介绍 * 根据实体,自动封装sql语句:查询、更新、删除等相关操作。 * 支持泛微E9标准模块、建模、移动、流程等全部数据库操作。 * 让操作泛微E9数据库变的更简单。 * 更多支持计划:动态发布接口(免重启)、自定义token鉴权认证(接口分权)、动态加载action接口等. * 使用中遇到可以问题与本人联系WX: moment_2025 ### 使用 ##### 如果自己编译,需要有E9的开发环境,或也可以直接将编译好的JAR(/lib/E9-Plug.jar)放到项目中。 * 1、将本插件编译的(E9-Plug.jar)JAR包,放到ecology/WEB-INF/lib/目录下 * 2、创建实体对象,使用 @TableName("数据库表名") 注解 * 3、创建DAO继承BaseDao<2创建的实体类> * 4、使用3创建的DAO,已包含CURD操作,可直接使用。 ### demo实例 #### 1、创建实体对象类型 实体对象可选是否继承BaseMode, BaseMode内包含已包含建模通用字段 如id/formmodeid/创建人/修改人/时间等..免去再次申明。 ```java package demo.entity; import com.jesse.eclgy.plug.annotations.TableField; import com.jesse.eclgy.plug.annotations.TableName; import com.jesse.eclgy.plug.entity.BaseMode; import com.jesse.eclgy.plug.enums.FieldType; import lombok.*; @Data @TableName("uf_doorinfo") public class DemoEntity extends BaseMode { /** * 是否主键,父类也有,会被此类替换,删除,更新,自动为条件 */ @TableField(isKey = true) private Integer id; /** * 字段数据库 name 别名,实体 和 数据库 不一致 定义。 * fieldType 字段类型 默认ALL,此定义为 查询、插入、更新时 使用此字段 */ @TableField(fieldType = {FieldType.QUERY, FieldType.INSERT, FieldType.UPDATE}, name = "modedatamodifydatetime") private String updateTime; /** * 因fieldType 默认为 FieldType.ALL,此字段数据库没有 需要定义空数组 */ @TableField(fieldType = {}) private String openType; /** * int类型 需要定义为 Integer 为null时 不更新数据。 */ private Integer userId; } ``` #### 2、创建DoorDao 继承 BaseDao<实体> ,继承后就可以使用 BaseDao的 方法。 ```java package demo.dao; import cn.hutool.core.util.StrUtil; import com.jesse.eclgy.plug.dao.BaseDao; import demo.entity.DemoEntity; public class DemoDao extends BaseDao { public DemoDao() { /** * 可选成功回调 , 执行成功后执行 打印 语句和参数 */ super.getRsp().setOnSuccess((sql, params) -> { System.out.println(StrUtil.format("执行SQL:{},参数:{}", sql, params)); }); /** * 可选失败回调 执行出错时执行 打印 语句和参数 */ super.getRsp().setOnError((ex, sql, params) -> { System.out.println(StrUtil.format("执行SQL:{},参数:{},错误内容:{}", sql, params, ex.getMessage())); }); } } ``` #### 3、简单调用实例,BaseDao 内置常用操作方法,供参考。 ```java public class Test{ DoorInfo demoEntity = new DoorInfo(); demoEntity.setDoorNo("2022011213242636"); DoorDao dao = new DoorDao(); /** * 根据提示条件查询 */ List list = dao.queryByEntity(demoEntity); /** * 根据主键查询 */ list = dao.queryById(1); /** * 根据MAP条件查询 */ list = dao.queryByMap(new LinkedHashMap<>()); /** * 新增 实体到数据库 */ dao.save(demoEntity); /** * 更新实体非空字段 主键为条件 */ dao.update(demoEntity); /** * 1 更新列的MAP * 2、条件MAP */ dao.updateMap(new LinkedHashMap<>(), new LinkedHashMap<>()); /** * 1 更新的实体 * 2、条件MAP */ dao.updateByMap(demoEntity, new LinkedHashMap<>()); /** * 也可以 根据包装器执行 */ IWrapper query = QueryWrapper.builder().tableName("hrmresource") //可选 列 无时 为* 全部 .column("id,lastname") //可选 条件 .conditionEQ("workcode", "0565") //可选 条件 MAP // .conditionMap(new LinkedHashMap<>()) ; //单个执行 可执行 查询 和更新 dao.executeWrapper(query); //查询 后 直接获取 实体结果集 List list1 = dao.convertToEntity(); //也可以 获取MAO 结果集,。 Map<行号, Map<字段, 值>> Map> map = dao.convertToMap(); List wrapperList = new ArrayList<>(); //删除 自定义条件要有,没有就是全部.如果根据实体主键 更新 可用 DeleteWrapper.builder().inject(demoEntity) wrapperList.add(DeleteWrapper.builder().tableName("hrmresource").conditionEQ("ID", -2)); //更新 自定义 如果根据实体主键 更新 可用 UpdateWrapper.builder().inject(demoEntity) wrapperList.add(UpdateWrapper.builder().tableName("hrmresource").set("lastname", "newName").set("email", "123" + "@qq.com").conditionEQ("ID", -2)); // 根据实体 写入 wrapperList.add(InsertWrapper.builder().inject(demoEntity)); // 批量执行 更新 也可单个 dao.executeWrapper(wrapper); dao.batchExecuteWrapper(wrapperList); // 执行出错 获取错误 dao.getRsp().getException(); WorkFlowDao workFlowDao = new WorkFlowDao(); //获取 流程主表Map<字段,值> final Map mainMap = this.workFlowDao.queryByRequestInfo(requestInfo); //主表ID mainMap.get("id"); //主表申请人字段 mainMap.get("sqr"); //查询明细表 Map<行号,Map<字段,值>> final Map> detailMap = this.workFlowDao.queryDetailByRequestInfo(requestInfo); // 参数 requestInfo, 1 (明细表序号1、2、3) , true 结果集 是否转Map ,如果false 不转 自己可以 this.workFlowDao.getRsp().next() 遍历获取,this.workFlowDao.getRsp() 为带事务的泛微RecordSet类 //queryDetailByRequestInfo(requestInfo,1,true) // 写入主表 // this.workFlowDao.updateByRequestId(String tableName, String field, Object value, Object requestId) // this.workFlowDao.updateByRequestId(String tableName, Map updateFieldMap, Object requestId) } ```