LlewynDav 2024-04-17 21:32 采纳率: 82.4%
浏览 2
已结题

纵横向表头都是字段怎么返给前端

如果前端需要返回的表单数据中,纵向和横向表头都是数据库表中的两个字段,其中每行代表name,每列代表等级为1、2、3的数据,合起来这个表单代表的意思就是每行展示某个name下level=1、2、3有多少count,这样该怎么写比较效率高呢

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-17 21:32
    关注

    引自免费微信小程序:皆我百晓生

    为了实现这个功能,你需要在Java后端进行一些处理,然后将结果以JSON格式返回给前端。这里我将提供一个基本的Java方法示例,用于从数据库获取数据并将其转换成所需格式。

    首先,确保你已经连接到数据库,并且有一个包含namelevel字段的表。假设这个表名为your_table

    import java.sql.*;
    import java.util.*;
    
    public class ReportGenerator {
    
        private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";
        private static final String USER = "username";
        private static final String PASS = "password";
    
        public static void main(String[] args) {
            try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS)) {
                List<String> names = getUniqueNames(conn);
                Map<String, Map<Integer, Integer>> result = new HashMap<>();
                for (String name : names) {
                    Map<Integer, Integer> levelCounts = getLevelCountsForName(conn, name);
                    result.put(name, levelCounts);
                }
    
                // Convert the map to JSON and return it to frontend
                ObjectMapper mapper = new ObjectMapper();
                String json = mapper.writeValueAsString(result);
                System.out.println(json);  // Replace this with sending JSON to frontend
            } catch (SQLException | IOException e) {
                e.printStackTrace();
            }
        }
    
        private static List<String> getUniqueNames(Connection conn) throws SQLException {
            List<String> names = new ArrayList<>();
            String query = "SELECT DISTINCT name FROM your_table";
            try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query)) {
                while (rs.next()) {
                    names.add(rs.getString("name"));
                }
            }
            return names;
        }
    
        private static Map<Integer, Integer> getLevelCountsForName(Connection conn, String name) throws SQLException {
            Map<Integer, Integer> levelCounts = new HashMap<>();
            String query = "SELECT level, COUNT(*) as count FROM your_table WHERE name = ? GROUP BY level";
            try (PreparedStatement pstmt = conn.prepareStatement(query)) {
                pstmt.setString(1, name);
                try (ResultSet rs = pstmt.executeQuery()) {
                    while (rs.next()) {
                        int level = rs.getInt("level");
                        int count = rs.getInt("count");
                        levelCounts.put(level, count);
                    }
                }
            }
            return levelCounts;
        }
    }
    

    这段代码首先从数据库获取所有唯一的名字(即纵轴),然后对于每个名字,查询其不同等级(横轴)的数量。最后将结果转换为JSON格式。

    要发送JSON到前端,你需要根据你的应用框架(例如Spring Boot、Jersey等)来决定具体的方法。如果你使用的是Spring Boot,可以创建一个REST API控制器来处理这个任务。

    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @RestController
    public class ReportController {
    
        @GetMapping("/report")
        public ResponseEntity<String> generateReport() {
            try {
                // 调用之前生成报告的方法
                String reportJson = ReportGenerator.generateReport();
    
                // 返回JSON响应
                return ResponseEntity.ok().body(reportJson);
            } catch (Exception e) {
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
            }
        }
    }
    

    这只是一个基础示例,实际应用可能需要考虑更复杂的情况,比如分页、错误处理、性能优化等。此外,如果你正在使用ORM框架(如Hibernate),你可能会想调整这些方法以便更好地利用它们的功能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 已采纳回答 8月5日
  • 创建了问题 4月17日