JPA 获取某个表的所有字段名、判断某个表中某个字段是否存在、返回表中存在的字段名

1 获取某个表的所有字段名

    /**
     * 获取某个表的所有字段名
     *
     * @return
     * @throws SQLException
     */
    public List<String> getAllColumnNames(String tableName) {
        List<String> list = new ArrayList<String>();
        SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
        Session session = sessionFactory.openSession();
        if (session != null) {
            list = session.doReturningWork(
                    connection -> {
                        List<String> resultList = new ArrayList<>();
                        ResultSet rs;
                        try {
                            rs = connection.getMetaData().getColumns(connection.getCatalog(), null, tableName, null);
                            while (rs.next()) {
                                String column= rs.getObject(4).toString();
                                resultList.add(column);
                            }
                        } catch (SQLException e) {
                            //不存在
                            return resultList;
                        }
                        rs.close();
                        return resultList;
                    }
            );
            session.close();
        }
        return list;
    }

2 判断某个表中某个字段是否存在

    /**
     * 判断某个表中某个字段是否存在
     *
     * @return
     */
    public boolean checkColumnNameExist(String tableName,String columnName) {
        List<String> columnNameList=getAllColumnNames();
        if(columnNameList==null||columnNameList.size()<=0){
            return false;
        }
        return columnNameList.contains(columnName)?true:false;
    }

3 返回表中存在的字段名

    /**
     * 返回表中存在的字段名
     *
     * @return
     */
    public List<String> getExistColumnNameList(List<String> columnNameList) {
        List<String> allColumnNameList=getAllColumnNames();
        if(allColumnNameList==null||allColumnNameList.size()<=0){
            return new ArrayList<>();
        }
        return allColumnNameList.stream().filter(x->columnNameList.contains(x)).collect(Collectors.toList());
    }

猜你喜欢

转载自blog.csdn.net/qq_38974638/article/details/114693505