通用sql语句!根据表名查数据,并对表字段值为null的设置为/

这里用的mybatis-flex框架+达梦数据库
需求为,做个通用语句,只传入任意表名称,就能把该表所有数据返回,并且把值为null的处理成/
注意!每个表字段都不一样,我只知道表名,不知道该表有哪些字段的情况!

 
    @GetMapping("test2")
    public List<Row> test2() {
        //如果只知道表名 不知道字段名。需求又是把null字段的设置成/或者'' 可以这样做
        //达梦数据库
        String tableName = "CODE_AUDIT_RESULTS";//用这个表做为案例
        //只传入一个表名 查询该表的所有字段名称
        String sqlTableName = "select DISTINCT(COLUMN_NAME) from all_tab_columns where owner='DYKJ_DREMIS_CODE' and Table_Name='" + tableName + "'";
        List<Row> columnsName = Db.selectListBySql(sqlTableName);
        //拼接字段名并且对每个字段名进行处理
        StringBuilder str = new StringBuilder();
        int i = 0;
        if (CollectionUtil.isNotEmpty(columnsName)) {
            for (Row row : columnsName) {
                String resultsTableNameColumn=row.get("columnName").toString();
                if(i>0){//除了第一次都需要拼接,
                    str.append(",");
                }
                str.append("IFNULL(").append(resultsTableNameColumn).append(",'/') ").append(resultsTableNameColumn);
                i++;
            }
        }
        //进行查询获取最终结果
        String sql = "select " + str + " from DYKJ_DREMIS_CODE." + tableName;
        if (str.indexOf("DISPLAY") != -1) {//判断StringBuilder中是否包含 如果包含就执行拼接sql条件
            sql += " where display!=0";//display为1是代表可使用  为0代表不可使用
        }
        List<Row> columns = Db.selectListBySql(sql);
        //----start  以下是题外的小知识 转换另一个实体对象
        //方式1 stream流
            List<Dict> dicts = columns.stream().map(column -> {
            Dict dict = column.toEntity(Dict.class);
            return dict;
        }).collect(Collectors.toList());
        //方式2 mybatis-flex自带的工具类(点赞!工具类好用)
        List<Dict> dicts1 = RowUtil.toEntityList(columns, Dict.class);
        //----end
        return columns;
    }

案例表
最终
最终效果,把数据库中字段为null的设置成/。但并没有真正的改变数据库中值null变为/。只是返回集合中是/的效果。如果想改变数据库的话,可以循环遍历做修改操作,这里就不演示了。如果对您有帮助,请点赞。

第二种方案也很简单,需要设置配置文件
配置

   @GetMapping("test")
    public List test() {
        String tableName = "CODE_AUDIT_RESULTS";//用这个表做为案例
        //根据表名查询该表的数据
        String sql = "select * from DYKJ_DREMIS_CODE."+tableName;
        List<Row> columns = Db.selectListBySql(sql);
        List<Map<String, Object>> rowList = new ArrayList<>();
        for (Row row : columns) {
            Map<String, Object> columnMap = new HashMap<>();
            for (String key : row.keySet()) {
                // 获取字段名称和对应的值
                Object value = row.get(key);
                // 在这里处理字段名称和对应的值  如果为null的就给设置成/
                columnMap.put(key, Objects.isNull(value) ? "/" : value);
            }
            rowList.add(columnMap);//把处理后的进行保存到该集合
        }
        return rowList;
    }

效果
code数据库表字段都一样 既然都一样那么就用通用code实体类Dict


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dict {
    private String tableName;
    /**
     * 编号
     */
    private String code;
    /**
     * 名称
     */
    private String nameC;
    /**
     * 拼音码
     */
    private String spell;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 是否可见
     */
    private String display;
    private String aliasName;
    private String codegb;
    private String nameCgb;
    /**
     * 父类编码
     */
    private String fcode;

}

最后记住以下达梦数据库查询sql,很有用

//查询该模式下  所有的表名
select TABLE_NAME  from dba_tables  where owner='模式名'
//根据模式名和表名 查该表的字段信息
select * from all_tab_columns where owner='模式名' and Table_Name='表名'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值