泛微的E10二开低代码平台我们已经介绍了一些内容了,本文介绍下如何在泛微E10低代码平台上进行二开的时候,如何操作数据库。
使用正常的spring cloud微服务体系的时候,我们操作数据库大多都是通过mybatis来操作数据库的,但是在泛微E10低代码平台上进行开发的时候,是不允许使用mybatis,这就导致了操作数据库的时候需要人为手动的在代码里面编写sql,然后进行操作,有点类似使用传统的jdbcutils的方式。但是即使我们理解他是类似jdbcutils的方式操作数据库,但是也和我们传统使用jdbcutils的方式不一样,下面来演示一下。
1、获取groupid
在泛微E10低代码平台进行二开的时候,操作数据库需要有一个非常重要的理解,就是groupid,这个groupid在官方文档上没有说明的很清楚,所以直接参照官方的文档来操作数据库的时候还是有一些坑需要踩。这里的groupid其实可以看作是泛微E10平台里面的各种微服务名称,如下图:
上图就是我们通过泛微E10的sdk获取到的相关的groupid,这些name值是不是很像我们在做微服务里面根据每个业务划分的每一个微服务子模块。然后这些id他就是每一个微服务的serviceid,在操作数据库的时候,我们这里在传入groupid的时候就把对应的serviceid给传入进去即可。
在泛微E10的微服务web环境和泛微E10的运维平台上,我目前没有看到所有的groupid,所以在使用之前,我们需要手写代码,通过对应的sdk方法来获取所有的groupid,所以这里我们测试一下,示例代码如下:
@Autowired DataSetService dataSetService; @GetMapping("/test") public WeaResult<List<Map<String, Object>>> test(@RequestParam("msg") String msg) { GroupQuery groupQuery = new GroupQuery(); groupQuery.setSourceType(SourceType.LOGIC); groupQuery.setShowSqlDataset(true); List<Map<String, Object>> dataGroups = dataSetService.getDataGroups(groupQuery); return WeaResult.success(dataGroups); }
然后我们把他打成二开的jar报上传到泛微E10平台上去,然后进行访问,访问结果示例图如下:
这样子就获取到了所有的groupid了。
二、操作数据库查询之无动态参数形式查询
接下来我们就演示下如何操作这里的数据库查询了,比如我们要查询employee这张表的所有数据,那么我们的执行代码示例如下:
@Autowired SecondevDataSetUtil secondevDataSetUtil; @GetMapping("/test1") public WeaResult<Map<String, Object>> test1() { String sql = "select * from employee"; Map<String, Object> stringObjectMap = secondevDataSetUtil.executeSql(SourceType.LOGIC, "weaver-hrm-service", sql, null); return WeaResult.success(stringObjectMap); }
备注:
1、这里employee表属于内部表,即这些表是建立在泛微E10低代码平台安装的时候初始化的数据库里面的,所以我们需要使用SourceType.LOGIC的方式进行查询。
2、这里的groupid我们使用的是weaver-hrm-service这个serviceid,这些id是根据上面第一步来获取的,但是这里有个坑,我现在也没明白,查询哪些表到底使用哪个groupid(对应哪个serviceid),一般来说反正做二开的话,操作数据库主要使用的serviceid主要有:流程服务,人事服务和common服务,如果在开发过程中通过这三个服务查询不到数据的话,到时候可以咨询下泛微相关的开发支持人员。由于写本文的我也属于踩坑接触阶段,后续我再进行这部分的补充说明。
最后我们还是一样,把这个二开包打包上传到泛微E10平台上去,运行访问下:
这样子就查询出来所有的数据了,这就是在泛微E10二开低代码平台上操作无参数数据库查询的相关案例。
三、操作数据库查询之有动态参数形式查询
在实际开发中,我们经常还会涉及到各种动态传参进来的方式,这时候需要避免出现sql注入,所以需要使用预编译的方式来进行。在泛微E10这个二开里面如果是需要动态传参的话,总体比使用传统jdbc或者mybatis框架等要麻烦,需要自己构建list,把参数放入到list里面再一起作为参数进行传递进去,下面来演示一下:
@Autowired SecondevDataSetUtil secondevDataSetUtil; @GetMapping("/test2") public WeaResult<Map<String, Object>> test2() { String sql = "select * from employee where PINYIN = ?"; //进行预编译参数设置 List<SqlParamEntity> logicSqlParams = new ArrayList<>(); SqlParamEntity sqlParam1 = new SqlParamEntity(); sqlParam1.setParamType(SqlParamType.VARCHAR); sqlParam1.setValue("sysadmin"); logicSqlParams.add(sqlParam1); Map<String, Object> stringObjectMap = secondevDataSetUtil.executeSql(SourceType.LOGIC, "weaver-hrm-service", sql, logicSqlParams); return WeaResult.success(stringObjectMap); }
这里如果有多个参数的话,就按顺序添加到listsqlparams里面去即可。开发完了打包上去运行测试下,看看效果:
可以看到只查询出来一条数据了。
备注:
1、在泛微E10开发平台里面操作mysql的时候需要注意下,他返回的结果里面会出现内嵌套数据结构的方式,所以这个map不是纯的sql 查询结果,同时从这里也可以看到,整个泛微E10这边查询数据库的时候,其实他是调用的接口进行查询的,这个接口在外层包装了code,msg,data这些数据结构。
还没有评论,来说两句吧...