全网泛微ecology二次开发最具体教程(后端+ecode前端,纯二开,不使用建模 ...

打印 上一主题 下一主题

主题 1803|帖子 1803|积分 5409

1.后端环境搭建

一、IDEA环境设置

  1.1 打开idea,创建一个新的Java项目File->New->roject

1.2 选择Java项目

1.3 下一步:编辑好项目名称,点击Finish

1.4 项目创建文件完成之后需要进行项目设置File-Project Structure,点击project,分别选择Project SDK为1.8、、Project language level为SDK default 8

1.5 由于创建项目后会自带一个src的文件夹,我们后续的代码开发在src文件下,src文件夹下的目次布局最好与泛微e9的目次布局一致;如:src.com.api.xxx; src.com.engine.xxx等;如果不存在src,可以在当前界面新加一个src文件夹,并指定为Sources;

1.6 指定代码编辑后的输出目次,注意这里的Output path:应该是为小伙伴你们自己下载下来,或者已有的ecology代码文件夹下,并且要指定输出到classbean文件下,那么后续我们代码编译后会主动输出到对应的ecology项目下。
1.7 引入依赖,我们这里需要引入三个特定的依赖,(我这里原有的泛微项目在D盘的Weaver文件夹下)分别是你原有的的泛微项目下的classbean文件夹,这里我们需要做一个操纵,就是需要把这个classbean文件夹压缩成一个压缩包,然后将压缩包的后缀改成.jar,然后将这个classbean.jar直接引入即可;第二个依赖是小伙伴自己项目内里Resin文件夹下的lib文件夹进行引入;第三个依赖是小伙伴自己项目下ecology内里的WEB-INF/lib的文件夹进行引入即可。

1.8 设置项目标sdks,必须使用jdk1.8版本,最好用泛微提供的jdk1.8的版本,自己项目文件夹下一样平常都会有泛微提供的jdk包。

1.9 最后点击apply按钮即可完成我们环境的设置。
二、Resin的设置

 注意:如果小伙伴们想在idea中想设置Resin进行项目标启动,那目前只能使用2019版本及以下的idea,2020以上版本不支持Resin。

添加之后,设置项目自己所带的端口即可。然后就能正常启动啦!包括你dubug或者是run都是没问题的。

以上就是泛微后端环境的搭建的全部流程,希望能资助到小伙伴们!
2.前端ecode的基本使用

      一、创建页面组件

      由于博主已经含有了泛微的项目,所以没有下载具体的ecode到本地,而是直接使用ecode进行代码编写;而且本地和线上也有一些差异,所以直接就在项目标ecode平台上进行 编码了。所以这里都是讲的在线上的ecode平台进行编码,线上和本地只是一些组件引入的差异,其他并无差异,可放心查阅。另外就是前端是需要申请允许的,这个大家自行找泛微的人申请即可。
2.1 进入ecode平台,后端将项目启动之后,http://localhost:8081/ecode,在你的ip:端口背面拼接/ecode即可进入。

2.2 进入页面之后,我们二开的话一样平常都是建立新的文件夹,然后进行开发,那么第一步就是新建一个根目次的文件夹,然后在我们新建好的分类下面新建一个文件夹即可。

文件夹创建成功后,就会主动出现一些设置文件夹,小伙伴们可按需引入。

后续就是新建页面、新建store、新建主页面等等。博主这里新建coms文件夹来存放页面组件,新建store文件夹来存放页面操纵方法等;最紧张的就是建立注册文件和主入口组件,分别建立register.js文件和index.js文件。这里注册组件写法基本一致,可查看泛微的ecode开发文档。
  1. //注册文件 registe.js
  2. //注册和绑定新页面前端实现接口
  3. ecodeSDK.rewriteRouteQueue.push({
  4.   fn:(params)=>{
  5.     const {Com,Route,nextState} = params;
  6.     const cpParams = {
  7.       path:'main/cs/app', //路由地址
  8.       appId:'${appId}',
  9.       name:'testBank', //具体页面应用id
  10.       node:'app', //渲染的路由节点,这里渲染的是app这个节点
  11.       Route,
  12.       nextState
  13.     }
  14.     if(ecodeSDK.checkPath(cpParams)) {
  15.       const acParams = {
  16.         appId:cpParams.appId,
  17.         name:cpParams.name, //模块名称
  18.         props:params, //参数
  19.         isPage:true, //是否是路由页面
  20.         noCss:true //是否禁止单独加载css,通常为了减少css数量,css默认前置加载
  21.       }
  22.       //异步加载模块${appId}下的子模块testBank
  23.       return ecodeSDK.getAsyncCom(acParams);
  24.     }
  25.     return null;
  26.   },
  27.   order:10,
  28.   desc:'testBank'
  29. });
  30. /*
  31. 版本要求:kb1906以上
  32. 门户后台配置路由地址:
  33. /main/cs/app/9a9808af4ce54bb6a1688880a4dc96407_testBank
  34. 浏览器访问地址:
  35. /wui/index.html#/main/cs/app/9a9808af4ce54888888c96407_testBank
  36. */
复制代码
  1. //主入口页面组件 index.js
  2. const { Provider } = mobxReact;
  3. const TestTable = ecodeSDK.imp(TestTable);
  4. const TestStore = ecodeSDK.imp(TestStore);
  5. //实例化store,并通过provider注入所有组件中
  6. const allTestBanks = {
  7.   testStore:new TestStore()
  8. }
  9. class testBankRoot extends React.Component {
  10.   render() {
  11.     return (
  12.       <Provider {...alltTestBanks}>
  13.       <TestTable {...this.props}/>
  14.       </Provider>
  15.     )
  16.   }
  17. }
  18. //发布模块
  19. ecodeSDK.setCom('${appId}','testBank',testBankRoot);
复制代码
然后是 coms文件下的页面组件,这个文件夹下面的就是我们的页面展示
  1. const { inject, observer } = mobxReact;
  2. const { Button, Row, Col } = antd;
  3. const { WeaTable, WeaInput, WeaDialog, WeaNewScroll, WeaSearchGroup, WeaInputSearch, WeaFormItem ,WeaError} = ecCom;
  4. @inject("testStore") // 注入store
  5. @observer // 观察状态的变化
  6. class TestTable extends React.Component {
  7.   constructor(props){
  8.     super(props);
  9.     this.state = {
  10.     scrollHeight: 850, // 默认高度为850
  11.   };
  12.   }
  13.   
  14.   componentDidMount() {
  15.     // 初始化时设置滚动条的高度
  16.     this.setScrollHeight();
  17.     // 监听窗口大小变化
  18.     window.addEventListener("resize", this.setScrollHeight);
  19.   }
  20.   componentWillUnmount() {
  21.     // 清理 resize 事件监听器
  22.     window.removeEventListener("resize", this.setScrollHeight);
  23.   }
  24.   setScrollHeight = () => {
  25.     const windowHeight = window.innerHeight;
  26.     const calculatedHeight = windowHeight - 60; // 你可以根据需要调整减去的值
  27.     this.setState({ scrollHeight: calculatedHeight });
  28.   };
  29.   render() {
  30.     const { testStore } = this.props;
  31.     const { scrollHeight } = this.state;
  32.     const columns = [
  33.       { title: "测试1", dataIndex: "test1" },
  34.       { title: "测试2", dataIndex: "test2" },
  35.       {
  36.         title: "操作",
  37.         dataIndex: "actions",
  38.         render: (text, record) => {
  39.           return (
  40.             <>
  41.               <Button type="primary" onClick={() => testStore.showModal(record)}>编辑</Button>
  42.               &nbsp;&nbsp;
  43.               <Button onClick={() => testStore.deleteData(record.id)}>删除</Button>
  44.             </>
  45.           );
  46.         },
  47.       },
  48.     ];
  49.     return (
  50.       <WeaNewScroll toTop height={scrollHeight}>
  51.         {/* 查询区域 */}
  52.         <WeaSearchGroup
  53.           showGroup
  54.           items={[
  55.             {
  56.               com: (
  57.                 <WeaFormItem label="测试查询" labelCol={{ span: 3 }} wrapperCol={{ span: 6 }}>
  58.                   <WeaInputSearch
  59.                     value={testStore.searchTitle}
  60.                     placeholder="请输入测试查询"
  61.                     onSearch={(value) => {
  62.                       testStore.searchTitle = value;
  63.                       testStore.fetchData();
  64.                     }}
  65.                   />
  66.                 </WeaFormItem>
  67.               ),
  68.             },
  69.           ]}
  70.         />
  71.         {/* 表格 */}
  72.         <WeaTable
  73.           dataSource={testStore.dataSource}
  74.           columns={columns}
  75.           loading={testStore.loading}
  76.           pagination={{
  77.             current: testStore.current,
  78.             pageSize: testStore.pageSize,
  79.             showSizeChanger: true,
  80.             total: testStore.total,
  81.             showTotal: (total) => `共${total} 条`,
  82.             onShowSizeChange(current, pageSize) {
  83.               testStore.current = current;
  84.               testStore.pageSize = pageSize;
  85.               testStore.fetchData();
  86.             },
  87.             onChange: (page) => {
  88.               testStore.current = page;
  89.               testStore.fetchData();
  90.             },
  91.           }}
  92.         />
  93.         {/* 新增/编辑弹窗 */}
  94.         <WeaDialog
  95.           style={{ width: 400, height: 200 }}
  96.           title={testStore.formData.id ? "编辑测试" : "新增测试"}
  97.           visible={testStore.modalVisible}
  98.           onCancel={testStore.handleCancel}
  99.         >
  100.           <WeaNewScroll>
  101.             <div style={{ textAlign: "center" }}>
  102.               <WeaFormItem
  103.                 label="测试"
  104.                 labelCol={{ span: 4 }}
  105.                 wrapperCol={{ span: 16 }}
  106.                 viewAttr="3"
  107.               >
  108.                 <WeaInput
  109.                   viewAttr="3"
  110.                   value={testStore.formData.test1}
  111.                   onChange={(value) => testStore.updateFormData("test1", value)}
  112.                 />
  113.               </WeaFormItem>
  114.             </div>
  115.           </WeaNewScroll>
  116.           {/* 弹框底部按钮 */}
  117.           <div style={{ textAlign: "center", marginTop: 40 }}>
  118.             <Button key="cancel" onClick={testStore.handleCancel}>
  119.               取消
  120.             </Button>
  121.             <Button
  122.               key="submit"
  123.               type="primary"
  124.               onClick={() => testStore.handleSubmit(testStore.formData)} // 提交表单时校验
  125.               style={{ marginLeft: 8 }}
  126.             >
  127.               保存
  128.             </Button>
  129.           </div>
  130.         </WeaDialog>
  131.       </WeaNewScroll>
  132.     );
  133.   }
  134. }
  135. ecodeSDK.exp(TestTable);
复制代码
然后是store的文件
  1. const { observable, action } = mobx;
  2. const { WeaTools } = ecCom;
  3. const { message } = antd;
  4. class TestStore {
  5.   @observable dataSource = [];
  6.   @observable loading = false;
  7.   @observable total = 0;
  8.   @observable pageSize = 10;
  9.   @observable current = 1;
  10.   @observable searchTitle = ""; // 搜索字段
  11.   @observable modalVisible = false;
  12.   @observable formData = { test1: "", test2: "", test3: "" }; // 用于新增/编辑表单
  13.   
  14.   constructor() {
  15.     this.fetchData();
  16.   }
  17.   // 获取数据
  18.   @action.bound
  19.   async fetchData() {
  20.     this.loading = true;
  21.     try {
  22.       const res = await WeaTools.callApi("/api/testBank/list", "POST", {
  23.         page: this.current,
  24.         pageSize: this.pageSize,
  25.         test1: this.searchTitle.trim(), // 传递搜索参数
  26.       });
  27.       if (res.code == "1") {
  28.         this.dataSource = res.data;
  29.         this.total = res.total;
  30.         message.success(res.message);
  31.       } else {
  32.         message.error(res.message);
  33.       }
  34.     } finally {
  35.       this.loading = false;
  36.     }
  37.   }
  38.     // 获取数据
  39.   @action.bound
  40.   async fetchDataDialog() {
  41.     this.loading = true;
  42.     try {
  43.       const res = await WeaTools.callApi("/api/testBank/list", "POST", {
  44.         page: this.current,
  45.         pageSize: this.pageSize,
  46.         test1: this.searchTitle.trim(), // 传递搜索参数
  47.       });
  48.       if (res.code == "1") {
  49.         this.dataSource = res.data;
  50.         this.total = res.total;
  51.       } else {
  52.         message.error(res.message);
  53.       }
  54.     } finally {
  55.       this.loading = false;
  56.     }
  57.   }
  58.   // 保存数据
  59.   @action.bound
  60.   async saveData(values) {
  61.     const res = await WeaTools.callApi("/api/testBank/submit", "POST", values);
  62.     if (res.code == "1") {
  63.       this.modalVisible = false;
  64.       message.success(res.message);
  65.       this.fetchDataDialog(); // 获取最新数据,重新加载数据源
  66.     } else {
  67.       this.modalVisible = false;
  68.       message.error(res.message);
  69.     }
  70.   }
  71.   // 删除数据
  72.   @action.bound
  73.   async deleteData(id) {
  74.     const res = await WeaTools.callApi("/api/testBank/delete", "POST", {"id": id});
  75.     if (res.code == "1") {
  76.       message.success(res.message);
  77.       this.fetchDataDialog();
  78.     } else {
  79.       message.error(res.message);
  80.     }
  81.   }
  82.   // 显示弹窗
  83.   @action.bound
  84.   showModal(record) {
  85.     this.formData = record || {}; // 默认值
  86.     this.modalVisible = true; // 显示弹窗
  87.   }
  88.   // 关闭弹窗
  89.   @action.bound
  90.   handleCancel() {
  91.     console.log("取消弹窗!")
  92.     this.modalVisible = false;
  93.     this.formData = {}; // 清空表单数据
  94.   }
  95.   // 提交操作:保存表单数据
  96.   @action.bound
  97.   handleSubmit(formData) {
  98.     this.saveData(formData);
  99.   }
  100.   // 更新表单字段
  101.   @action.bound
  102.   updateFormData(field, value) {
  103.     this.formData[field] = value;
  104.   }
  105. }
  106. ecodeSDK.exp(TestStore);
复制代码
    博主这里改了部分代码,主要是是表格数据列的展示,可能导致代码不能直接运用, 小伙伴们注意分辨即可,但是其他的代码基本都是如许的模式,博主这里提供的只是一个最基本的增编削查界面,查询用表格展示,编辑和新增都使用弹窗。这里提供泛微组件库的地址:Ecology 9;这内里的组件基本都可以使用,只是需要注意一下组件的引入方式,这里提供几个注意的,WeaForm组件官方文档比较抽象,可以自行确定使用,线上的ecode需要如许引入const { WeaForm } = comsMobx;否则会报错,然后就是博主在引入过程中发现引入泛微提供的组件文档之外,我去引入官方antd的组件的时间无法引入,引入会报错,目前不知道具体是引入限制照旧怎样?有知道的小伙伴可以在批评区留言告知。上述基本就是ecode开发的具体操纵咯,主要就是注意下引入即可。
   二、发布页面

   将我们编写好的组件进行发布,右键点击文件,然后点击发布即可,然后在页面上面找到发布清单复制他的id主键,


他的主键id一样平常是9a9808af4ce54bb6a1688880a4dc96407类似一串数字,然后右键点击你的register.js文件,将他设为前置加载,而后的你可以在门户菜单内里设置菜单,/main/cs/app/9a9808af4ce54bb6a1688880a4dc96407_testBank就是你自界说的URL。
/*
版本要求:kb1906以上
门户后台设置路由地址:
/main/cs/app/9a9808af4ce54bb6a1688880a4dc96407_testBank
浏览器访问地址:
/wui/index.html#/main/cs/app/9a9808af4ce54888888c96407_testBank
*/
3. 后端代码的编写

    博主这里使用的是 Weaverboot-E9(beta),Weaverboot-E9 提供一套完备的 IOC + AOP 的解决方案,可以很快速的署理全部的接口,同时提供类似与spring 的依赖注入的写法方便快速编码:在上述我也讲过了,建立src下com文件夹、com下建立api和engine两个文件夹,其实只建立一个也是可以的。博主这里依照泛微规范照旧建立了两个文件夹,需要注意的是泛微后端没有用到类似spring内里的controller,他这里用action更换了。
  3.1 com.api下的action

  1. package com.api.test.testdemo.web;
  2. import javax.ws.rs.Path;
  3. @Path("/testBank")
  4. public class TestBankAction extends com.engine.test.testdemo.web.TestBankAction {
  5. }
复制代码
3.2 com.engine下的action

  1. package com.engine.test.testdemo.web;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.engine.common.util.ParamUtil;
  4. import com.engine.test.testdemo.service.TestBankService;
  5. import com.weaverboot.frame.ioc.anno.fieldAnno.WeaAutowired;
  6. import lombok.extern.slf4j.Slf4j;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.ws.rs.POST;
  10. import javax.ws.rs.Path;
  11. import javax.ws.rs.Produces;
  12. import javax.ws.rs.core.Context;
  13. import javax.ws.rs.core.MediaType;
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. @Slf4j
  17. public class TestBankAction {
  18.     @WeaAutowired
  19.     private TestBankService testBankService;
  20.     /**
  21.      * 测试信息获取接口
  22.      */
  23.     @Path("/list")
  24.     @POST
  25.     @Produces(MediaType.APPLICATION_JSON)
  26.     public String getQuestionBankList(@Context HttpServletRequest request, @Context HttpServletResponse response){
  27.         try {
  28.             Map<String, Object> stringObjectMap = ParamUtil.request2Map(request);
  29.             log.info("获取测试数据入参:"+stringObjectMap);
  30.             return testBankService.getQuestionBankList(stringObjectMap);
  31.         }catch (Exception e) {
  32.             Map<String,Object> resultMap =new HashMap<>();
  33.             resultMap.put("code","0");
  34.             resultMap.put("message","查询失败!");
  35.             return JSONObject.toJSONString(resultMap);
  36.         }
  37.     }
  38.     /**
  39.      * 测试信息获取接口
  40.      */
  41.     @Path("/getQuestion")
  42.     @POST
  43.     @Produces(MediaType.APPLICATION_JSON)
  44.     public String getQuestionBank(@Context HttpServletRequest request, @Context HttpServletResponse response){
  45.         try{
  46.             Map<String, Object> stringObjectMap = ParamUtil.request2Map(request);
  47.             log.info("获取测试数据入参:"+stringObjectMap);
  48.             return testBankService.getQuestionBank(stringObjectMap);
  49.         }catch (Exception e) {
  50.             Map<String,Object> resultMap =new HashMap<>();
  51.             resultMap.put("code","0");
  52.             resultMap.put("message","查询失败!");
  53.             return JSONObject.toJSONString(resultMap);
  54.         }
  55.     }
  56.     @Path("/submit")
  57.     @POST
  58.     @Produces(MediaType.APPLICATION_JSON)
  59.     public String addQuestionBank(@Context HttpServletRequest request, @Context HttpServletResponse response){
  60.         try {
  61.             Map<String, Object> stringObjectMap = ParamUtil.request2Map(request);
  62.             log.info("获取测试数据入参:" + stringObjectMap);
  63.             return testBankService.submitQuestion(stringObjectMap);
  64.         }catch (Exception e) {
  65.             Map<String,Object> resultMap =new HashMap<>();
  66.             resultMap.put("code","0");
  67.             resultMap.put("message","新增失败!");
  68.             return JSONObject.toJSONString(resultMap);
  69.         }
  70.     }
  71.     @Path("/delete")
  72.     @POST
  73.     @Produces(MediaType.APPLICATION_JSON)
  74.     public String deleteQuestion(@Context HttpServletRequest request, @Context HttpServletResponse response){
  75.         try {
  76.             Map<String, Object> stringObjectMap = ParamUtil.request2Map(request);
  77.             log.info("获取测试数据入参:" + stringObjectMap);
  78.             return testBankService.deleteQuestion(stringObjectMap);
  79.         }catch (Exception e) {
  80.             Map<String,Object> resultMap =new HashMap<>();
  81.             resultMap.put("code","0");
  82.             resultMap.put("message","删除失败!");
  83.             return JSONObject.toJSONString(resultMap);
  84.         }
  85.     }
  86. }
复制代码
3.3 com.engine下的service

  1. package com.engine.test.testdemo.service;
  2. import java.sql.SQLException;
  3. import java.util.Map;
  4. public interface TestBankService {
  5.     String getTestBankList(Map<String, Object> stringObjectMap) throws SQLException;
  6.     String getTestBank(Map<String, Object> stringObjectMap) throws SQLException;
  7.     String submitTest(Map<String, Object> stringObjectMap) throws SQLException;
  8.     String deleteTest(Map<String, Object> stringObjectMap) throws SQLException;
  9.    
  10. }
复制代码
3.4 com.engine下的serviceimpl
  1. package com.engine.test.testdemo.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.engine.test.testdemo.entity.TestBank;
  4. import com.engine.test.testdemo.service.TestBankService;
  5. import com.weaverboot.frame.ioc.anno.classAnno.WeaIocService;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.lang3.ObjectUtils;
  8. import weaver.general.StaticObj;
  9. import weaver.general.StringUtil;
  10. import java.sql.PreparedStatement;
  11. import java.sql.ResultSet;
  12. import java.sql.SQLException;
  13. import java.util.*;
  14. @Slf4j
  15. @WeaIocService
  16. public class TestBankServiceImpl extends com.engine.core.impl.Service implements TestBankService {
  17.     @Override
  18.     public String getTestBankList(Map<String, Object> stringObjectMap) throws SQLException {
  19.         Map<String, Object> resultMap = new HashMap<>();
  20.         java.sql.Connection conn = null;
  21.         PreparedStatement s = null;
  22.         ResultSet rs = null;
  23.         PreparedStatement countStmt = null;
  24.         ResultSet countRs = null;
  25.         try {
  26.             int pageSize = Integer.parseInt(String.valueOf(stringObjectMap.get("pageSize")));
  27.             int page =Integer.parseInt(String.valueOf( stringObjectMap.get("page")));
  28.             int offset = (page - 1) * pageSize;
  29.             String title = String.valueOf(stringObjectMap.get("title"));
  30.             weaver.interfaces.datasource.DataSource ds = (weaver.interfaces.datasource.DataSource) StaticObj.getServiceByFullname(("datasource.test"), weaver.interfaces.datasource.DataSource.class);
  31.             conn = ds.getConnection();
  32.             String sql = "select * FROM el_repo LIMIT ? OFFSET ?";
  33.             if (!StringUtil.isEmpty(title)){
  34.                 sql = "select * FROM el_repo where title like ? LIMIT ? OFFSET ?";
  35.             }
  36.             s = conn.prepareStatement(sql);
  37.             s.setInt(1, pageSize);
  38.             s.setInt(2, offset);
  39.             if (!StringUtil.isEmpty(title)){
  40.                 s.setString(1,"%"+title+"%");
  41.                 s.setInt(2, pageSize);
  42.                 s.setInt(3, offset);
  43.             }
  44.             rs = s.executeQuery();
  45.             List<TestBank> testBankList = new ArrayList<>();
  46.             while (rs.next()) {
  47.                 TestBank testBank = new TestBank();
  48.                 testBank.setId(rs.getInt("id"));
  49.                 testBank.setCode(rs.getString("code"));
  50.                 testBank.setTitle(rs.getString("title"));
  51.                 testBank.setRemark(rs.getString("remark"));
  52.                 testBank.setUpdateTime(rs.getDate("update_time"));
  53.                 testBank.setCreateTime(rs.getDate("create_time"));
  54.                 testBankList.add(testBank);
  55.             }
  56.             resultMap.put("data", testBankList);
  57.             // 获取总数
  58.             String countSql = "SELECT COUNT(*) FROM el_repo where title like ?";
  59.             if (StringUtil.isEmpty(title)){
  60.                 countSql = "SELECT COUNT(*) FROM el_repo";
  61.             }
  62.              countStmt = conn.prepareStatement(countSql);
  63.             if (!StringUtil.isEmpty(title)){
  64.                 countStmt.setString(1,"%"+title+"%");
  65.             }
  66.              countRs = countStmt.executeQuery();
  67.             if (countRs.next()) {
  68.                 int totalCount = countRs.getInt(1);
  69.                 resultMap.put("total", totalCount);
  70.             }
  71.             resultMap.put("code", "1");
  72.             resultMap.put("message", "查询成功!");
  73.             return JSONObject.toJSONString(resultMap);
  74.         } catch (Exception e) {
  75.             e.printStackTrace();
  76.             resultMap.put("code", "0");
  77.             resultMap.put("message", "查询失败!");
  78.             return JSONObject.toJSONString(resultMap);
  79.         }finally {
  80.             if (conn!=null){
  81.                 conn.close();
  82.             }
  83.             if (s!= null){
  84.                 s.close();
  85.             }
  86.             if (rs!=null){
  87.                 rs.close();
  88.             }
  89.             if (countStmt!=null){
  90.                 countStmt.close();
  91.             }
  92.             if (countRs!=null){
  93.                 countRs.close();
  94.             }
  95.         }
  96.     }
  97.     @Override
  98.     public String getTestBank(Map<String, Object> stringObjectMap) throws SQLException {
  99.         Map<String, Object> resultMap = new HashMap<>();
  100.         java.sql.Connection conn = null;
  101.         PreparedStatement s = null;
  102.         ResultSet rs = null;
  103.         PreparedStatement countStmt = null;
  104.         ResultSet countRs = null;
  105.         try {
  106.             int pageSize = Integer.parseInt(String.valueOf(stringObjectMap.get("pageSize")));
  107.             int currentPage =Integer.parseInt(String.valueOf( stringObjectMap.get("page")));
  108.             int offset = (currentPage - 1) * pageSize;
  109.             String id = stringObjectMap.get("id").toString();
  110.             weaver.interfaces.datasource.DataSource ds = (weaver.interfaces.datasource.DataSource) StaticObj.getServiceByFullname(("datasource.test"), weaver.interfaces.datasource.DataSource.class);
  111.             conn = ds.getConnection();
  112.             s = conn.prepareStatement("select * FROM el_repo where id = ? LIMIT ? OFFSET ?");
  113.             s.setString(1,id);
  114.             s.setInt(2, pageSize);
  115.             s.setInt(3, offset);
  116.             rs = s.executeQuery();
  117.             List<TestBank> testBankList = new ArrayList<>();
  118.             while (rs.next()) {
  119.                 TestBank testBank = new TestBank();
  120.                 testBank.setId(rs.getInt("id"));
  121.                 testBank.setCode(rs.getString("code"));
  122.                 testBank.setTitle(rs.getString("title"));
  123.                 testBank.setRemark(rs.getString("remark"));
  124.                 testBank.setUpdateTime(rs.getDate("update_time"));
  125.                 testBank.setCreateTime(rs.getDate("create_time"));
  126.                 testBankList.add(testBank);
  127.             }
  128.             resultMap.put("data", testBankList);
  129.             // 获取总数
  130.             String countSql = "SELECT COUNT(*) FROM el_repo where title = ?";
  131.             countStmt = conn.prepareStatement(countSql);
  132.             countStmt.setString(1,id);
  133.             countRs = countStmt.executeQuery();
  134.             if (countRs.next()) {
  135.                 int totalCount = countRs.getInt(1);
  136.                 resultMap.put("total", totalCount);
  137.             }
  138.             resultMap.put("code", "1");
  139.             resultMap.put("message", "查询成功!");
  140.             return JSONObject.toJSONString(resultMap);
  141.         } catch (
  142.                 Exception e) {
  143.             e.printStackTrace();
  144.             resultMap.put("code", "0");
  145.             resultMap.put("message", "查询失败!");
  146.             return JSONObject.toJSONString(resultMap);
  147.         }finally {
  148.             if (conn!=null){
  149.                 conn.close();
  150.             }
  151.             if (s!= null){
  152.                 s.close();
  153.             }
  154.             if (rs!=null){
  155.                 rs.close();
  156.             }
  157.             if (countStmt!=null){
  158.                 countStmt.close();
  159.             }
  160.             if (countRs!=null){
  161.                 countRs.close();
  162.             }
  163.         }
  164.     }
  165.     @Override
  166.     public String submitTest(Map<String, Object> stringObjectMap) throws SQLException {
  167.         weaver.interfaces.datasource.DataSource ds = (weaver.interfaces.datasource.DataSource) StaticObj.getServiceByFullname(("datasource.test"), weaver.interfaces.datasource.DataSource.class);
  168.         java.sql.Connection conn = ds.getConnection();
  169.         conn.setAutoCommit(false);
  170.         PreparedStatement s = null;
  171.         try {
  172.             String id = "";
  173.             if (!ObjectUtils.isEmpty(stringObjectMap.get("id"))){
  174.                 id = String.valueOf(stringObjectMap.get("id"));
  175.             }
  176.             String sql = "INSERT INTO el_repo (code, title, remark, create_time, update_time) VALUES (?, ?, ?, ?, ?)";
  177.             if (!StringUtil.isEmpty(id)){
  178.                 sql = "update el_repo set code =?,title = ?, remark = ?,update_time = ? WHERE id = ?";
  179.             }
  180.             s = conn.prepareStatement(sql);
  181.             // 设置参数
  182.             if (!StringUtil.isEmpty(id)){
  183.                 s.setString(1, (String) stringObjectMap.get("code"));
  184.                 s.setString(2, (String) stringObjectMap.get("title"));
  185.                 s.setString(3, (String) stringObjectMap.get("remark"));
  186.                 s.setObject(4, new Date()); // 设置当前时间为更新时间
  187.                 s.setString(5,id);
  188.             }else {
  189.                 s.setString(1, (String) stringObjectMap.get("code"));
  190.                 s.setString(2, (String) stringObjectMap.get("title"));
  191.                 s.setString(3, (String) stringObjectMap.get("remark"));
  192.                 s.setObject(4, new Date()); // 设置当前时间为创建时间
  193.                 s.setObject(5, new Date()); // 设置当前时间为更新时间
  194.             }
  195.             int rowsAffected = s.executeUpdate();
  196.             if (rowsAffected > 0) {
  197.                 conn.commit();
  198.                 Map<String, Object> resultMap = new HashMap<>();
  199.                 resultMap.put("code", "1");
  200.                 resultMap.put("message", "测试保存成功");
  201.                 return JSONObject.toJSONString(resultMap);
  202.             } else {
  203.                 conn.commit();
  204.                 Map<String, Object> resultMap = new HashMap<>();
  205.                 resultMap.put("code", "0");
  206.                 resultMap.put("message", "测试保存失败");
  207.                 return JSONObject.toJSONString(resultMap);
  208.             }
  209.         } catch (Exception e) {
  210.             conn.rollback();
  211.             log.error("测试保存失败", e);
  212.             Map<String, Object> resultMap = new HashMap<>();
  213.             resultMap.put("code", "0");
  214.             resultMap.put("message", "测试保存失败: " + e.getMessage());
  215.             return JSONObject.toJSONString(resultMap);
  216.         } finally {
  217.             if (s != null) {
  218.                 s.close();
  219.             }
  220.             if (conn != null) {
  221.                 conn.setAutoCommit(true);
  222.                 conn.close();
  223.             }
  224.         }
  225.     }
  226.     @Override
  227.     public String deleteTest(Map<String, Object> stringObjectMap) throws SQLException {
  228.         weaver.interfaces.datasource.DataSource ds = (weaver.interfaces.datasource.DataSource) StaticObj.getServiceByFullname(("datasource.test"), weaver.interfaces.datasource.DataSource.class);
  229.         java.sql.Connection conn = ds.getConnection();
  230.         conn.setAutoCommit(false);
  231.         PreparedStatement s = null;
  232.         Map<String, Object> resultMap = new HashMap<>();
  233.         try {
  234.             String getTestSql = "select COUNT(*) from el_qu_repo where repo_id = ? ";
  235.             PreparedStatement stat = conn.prepareStatement(getTestSql);
  236.             stat.setString(1,(String) stringObjectMap.get("id"));
  237.             ResultSet resultSet = stat.executeQuery();
  238.             int total = 0;
  239.             if (resultSet.next()){
  240.                 total = resultSet.getInt(1);
  241.             }
  242.             if (total>0){
  243.                 resultMap.put("code", "0");
  244.                 resultMap.put("message", "测试删除失败!当前测试下还存在某些信息!");
  245.                 return  JSONObject.toJSONString(resultMap);
  246.             }
  247.             String sql = "DELETE FROM el_repo WHERE id = ?";
  248.             s = conn.prepareStatement(sql);
  249.             // 设置参数
  250.             s.setString(1, (String) stringObjectMap.get("id"));
  251.             int rowsAffected = s.executeUpdate();
  252.             if (rowsAffected > 0) {
  253.                 conn.commit();
  254.                 resultMap.put("code", "1");
  255.                 resultMap.put("message", "测试删除成功");
  256.                 return JSONObject.toJSONString(resultMap);
  257.             } else {
  258.                 conn.commit();
  259.                 resultMap = new HashMap<>();
  260.                 resultMap.put("code", "0");
  261.                 resultMap.put("message", "测试删除失败");
  262.                 return JSONObject.toJSONString(resultMap);
  263.             }
  264.         } catch (Exception e) {
  265.             conn.rollback();
  266.             log.error("测试删除失败", e);
  267.             resultMap = new HashMap<>();
  268.             resultMap.put("code", "0");
  269.             resultMap.put("message", "测试删除失败: " + e.getMessage());
  270.             return JSONObject.toJSONString(resultMap);
  271.         } finally {
  272.             if (s != null) {
  273.                 s.close();
  274.             }
  275.             if (conn != null) {
  276.                 conn.setAutoCommit(true);
  277.                 conn.close();
  278.             }
  279.         }
  280.     }
  281. }
复制代码
3.4 com.engine下的entity

  1. package com.engine.test.testdemo.entity;
  2. import lombok.Data;
  3. import java.util.Date;
  4. @Data
  5. public class TestBank {
  6.     private static final long serialVersionUID = 1L;
  7.    
  8.     private Integer id;
  9.    
  10.     private String code;
  11.    
  12.     private String title;
  13.     private String remark;
  14.    
  15.     private Date createTime;
  16.     private Date updateTime;
  17. }
复制代码
3.5 注意事项

    博主这里提供的代码都是修改之后的,具体返回的数据和前端是对不上的,具体的小伙伴们自己将数据修改对应即可,但是基本的增编削查都是如许来实现的,博主这里是毗连的第三方数据库,这个数据库在后端应该中心的集成管理的数据源管理内里设置即可。如果要使用oa本地的数据库,则使用以下方式,使用RecordSet来实现。
  1. //查询人员id和名称
  2. String userSql = "select id,lastname from hrmresource order by id asc";
  3. RecordSet userRs =  new RecordSet();
  4. userRs.execute(userSql);
  5. List<User> userList = new ArrayList<>();
  6. while (userRs.next()){
  7.    User user = new User();
  8.    user.setUid(userRs.getInt("id"));
  9.    user.setLastname(userRs.getString("lastname"));
  10.    userList.add(user);
  11. }
复制代码
  如果是毗连的外部数据库或者第三方数据库,则使用博主上面提供的方法,主要是weaver.interfaces.datasource.DataSource ds = (weaver.interfaces.datasource.DataSource) StaticObj.getServiceByFullname(("datasource.第三方数据库名称"), weaver.interfaces.datasource.DataSource.class);
  java.sql.Connection  conn = ds.getConnection();实现数据库的毗连,背面通过PreparedStatement实验sql,ResultSet接收返回值即可。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表