El back-end java une dinámicamente los datos de la tabla de consulta sql, y la ventana emergente front-end elementui muestra dinámicamente

El front-end de elementui el-table selecciona dinámicamente el nombre de la tabla para mostrar los datos de la tabla

elementui muestra la base de datos de consultas todos los datos de la tabla

Escenas:

     El front-end pasa el nombre de la tabla y las condiciones de consulta al back-end. El backend se empalma en sql para consulta. Luego regrese al extremo frontal para la visualización.

  por ejemplo: Tres parámetros front-end, tableName="t_test", columnName="userName", columnValue="Zhang San"

  Debe empalmarse en un campo específico seleccionado de t_test donde nombre de usuario = 'Zhang San'

 Código de fondo:

 Ejemplo de datos devueltos al front-end:

 [{"NAME_name":"Zhang San","AGE_age":"18"},{"NAME_name":"Li Si","AGE_age":"19"}]

 @GetMapping("/info")
    public R info(@RequestParam("tableName") String tableName,
                  @RequestParam(value = "columnName",required = false) String columnName,
                  @RequestParam(value = "columnValue",required = false) String columnValue){
        //1、先根据tableName查询出该表的字段和字段注释
        /**
         * TableInfo :字段(columnName ,columnComment)
         * sql:
         *    select column_name,column_comment from information_schema.columns where table_name='表名' and table_schema='数据库名'
         */
        List<TableInfo> list = service.getColumnInfo(tableName);
        
        // 2、拼接查询的sql
        String sqlColumn = getSqlColumn(list);
        String sql = "select "+sqlColumn+" from "+tableName;
        
        if(StringUtils.isNotBlank(columnName) && StringUtils.isNotBlank(columnValue) ){
            sql= sql + " where " +columnName+"="+columnValue;
        }
        // 执行sql 查询
        /**
         * xml
         * <select id="runSql" parameterType="java.lang.String" resultType="java.util.Map">
         *  ${sqlStr,jdbcType=VARCHAR}    
         * </select>
         * 
         * dao
         * List <Map> runSql(String sqlStr)
         * 
         */
        List<Map> mapList = service.runSql(sql);

        return R.ok(mapList) ;
    }

    private  String getSqlColumn(List<TableInfo> list){
        StringBuilder sqlColumn = new StringBuilder();
        for(TableInfo tableInfo : list){
            String desc = tableInfo.getColumnComment();
            //避免有括号内的注释 去掉括号内容
            if(desc.indexOf("(")!=-1){
                desc = desc.substring(0,desc.indexOf("("));
            }
            //别名拼接 eg:NAME as NAME_姓名
            sqlColumn.append(tableInfo.getColumnName()+" as "+tableInfo.getColumnName()+"_"+desc+",");
        }
        // 去掉最后一个逗号
        return sqlColumn.toString().substring(0,sqlColumn.toString().length()-1);
    }

Código de front-end:

  El siguiente es el código del subcomponente de la ventana emergente. Seleccione el nombre de la tabla y la condición (nombre del campo y valor del campo) a través de la página de inicio, haga clic en Consulta para abrir la ventana y mostrar la página después de la consulta. el-table-column ciclo dinámico mostrar datos de tabla

  Nota: Al cerrar la ventana emergente o inicializar la ventana emergente, la asignación de campo en los datos debe borrarse para evitar el almacenamiento en caché.

   <el-table :data="dataList">
      <div v-for="(item,index) in cols" :key="index">
        <el-table-column :prop="item.prop" :label="item.label" header-align="center">
            <!-- 日期字段格式化 使用过滤器方法中的 formatDate -->
             <template slot-scope="scope">
                  <span v-if="item.label.indexOf('日期')!=-1">{
   
   {scope.row[item.prop] | formatDate}}</span>
                  <span v-else >{
   
   {scope.row[item.prop]}}</span >
             </template>
        </el-table-column>
      </div>
    </el-table>
 
//data 定义
dataList:[],
cols:[],
tableMap:{},
data:{}//查询的参数 对象 有:tableName columnName columnValue

//方法

async queryTableInfo(){
    var param = this.data;
    // 后端接口调用
    const{ code ,message,data} = await getTableInfo()
    
    if(code=='1000'){
        for(let i=0;i<data.length;i++){
            let obj = data[i];
            var newObj = new Object();
            //循环对象
            for (let key in obj){
                var descKey = key.substring(key.lastIndexOf('_')+1);//这个是中文:姓名  
                var newKey = key.substring(0,key.lastIndexOf('_'));//key的英文:NAME
                this.tableMap(newKey] = descKey ;//{'NAME':'姓名','AGE':'年龄'}

                var val = obj [key];
                newObj[newKey] = val;//新的对象变为:{'NAME':'张三','AGE':'18'}
            }
           this.dataList.push(newObj);

        }
         // cols:[{"label":"姓名","prop":"NAME"},{"label":"年龄","prop":"AGE"}]
         for (let key in this.tableMap){
            var colObj = {label:this.tableMap[key],prop:key};
            this.cols.push(colObj)
         }
        
    }
    
}

Supongo que te gusta

Origin blog.csdn.net/ss_Tina/article/details/131470761
Recomendado
Clasificación