实现目的:
这个SQL命令中心,是因为老项目就有这个页面,主要的功能是根据写出的SQL语句查询数据,并且在查出的数据基础上直接修改更新,还有新增和删除的功能,这么一说跟plsql就一样一样的了;这页面本来是给运维的同事来用,而且他们还会用plsql和Navicat等SQL语言操作工具,领导要求新老版本尽量保持一致,所以只能照猫画虎,把一些功能在jeesite中重写一遍,不过这也算是重新理解一下原生的SQL语言查询的原理,就当是温故知新了!
我写的这版属于简化版,目前版本只有查询一项,可以实现简单和比较复杂的SQL语言查询功能,具体效果如下。
实现效果:
简单SQL版:单表查询。
复杂SQL版:多表联查,字段有重复时。
以上查询结果用的jeesite自带的dataGrid,带分页,可以上下页展示。
实现思路:
1. 首先是对照了老项目的页面展示,老项目的代码写的非常全面但是比较老,不能直接复制到开源框架中使用,所以决定直接手写类似的功能,把老项目当原型。
2. 目前经常使用Navicat工具,所以也对照着Navicat查询结果展示的样子,来进行实现。
3. 由于操作语句的不确定性,所以在jeesite中没有具体的实体类可以使用,只能使用jdbc方法进行SQL语句的操作,同时在后端整理字头字段,在前端通过循环展示。
可以参考之前写的: jeesite前后端不分离页面横表转纵表数据展示。
实现原理和代码:
1. 先创建功能所需的文件夹,手写补全所有文件,可以参考代码生成器生成的代码层级结构。
2. 后端代码实现,将一个整页面拆分为,一个主页面mainPage和多个页签页面tabPage,在主页面只保留查询条件,在页签页面只展示数据和其他操作;后端代码就会分成三部分,第一部分是总页面,第二部分是页签页面,第三部分是页签页面返回数据。
第一部分:
/**
* @return String
* @author FredHe
* @date 2024/6/13 9:22
* @description SQL命令中心展示页面
*/
@RequestMapping("/commandCenterMain")
public String sqlCommandCenterMain(SQLCommandCenter sqlCommandCenter, Model model) {
model.addAttribute("sqlCommandCenter", sqlCommandCenter);
return "modules/sqlcenter/sqlcommandcenter/sqlCommandCenterMain";
}
第二部分:
/**
* @return String
* @author FredHe
* @date 2024/7/4 16:57
* @description 分页清单页签
*/
@RequestMapping("/commandCenterPageList")
public String commandCenterPageList(SQLCommandCenter sqlCommandCenter, Model model) {
String jsonArrayString = "''";
// 将数据保存到list中 使用键值对形式保存 并将结果展示到页面
List<Map<String, Object>> columnList = new ArrayList<>();
String sql = sqlCommandCenter.getSql();
if (StringUtils.isNotBlank(sql)) {
// 查出数据
try {
// 加载数据库驱动
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
//throw new Exception("加载数据库驱动有误,请联系管理员!" + e.getMessage());
return renderResult(Global.FALSE, "加载数据库驱动有误,请联系管理员!" + e.getMessage());
}
// 声明数据库连接、预编译语句资源对象
try {
Connection connection = DriverManager.getConnection(url, user, password);
if (sqlCommandCenter.getPageSize() != null) {
sql += " and rownum <= ?"