查询数据库和 Returns 结果的通用 Java 方法 Json 格式

General Java Method that Queries DB and Returns Results in Json Format

我要找的东西对我来说似乎很简单,但我的谷歌搜索失败了。

我想要一种允许我运行任何查询并以json格式获得结果的方法。

诀窍是我希望结果需要java对象作为过程的一部分(DTO、VO等)。

有什么 quick/easy/clean 方法可以做到这一点吗?

杰克逊有一些很好的方法来做到这一点。 this answer 中的一些示例应该对您有用。

或者,如果 Jackson 不适合您,您可以查看 this

我通常与同事一起这样做的方式是我们创建线束或控制器 class,通常指向 SQL 连接。线束的工作是将您的信息从 SQL 数据库提取到您的 json 文件中。但是,您需要创建一个存储过程,并且需要在 SQL 连接 class 中调用该存储过程。

我想你有两个选择:

  1. 您可以使用更通用的数据结构在 java 中呈现您的 JSON 有效负载。类似于 Map 实例。
  2. 您可以创建一个 class 来为您的结果集建模并创建模型的实例来存储负载。

非常有趣的问题。我不确定是否有任何库直接执行此操作。但是我们有几个选择。

  1. 通过hibernate和Jackson库我们可以生成输出 JSON 数据。
  2. 我们可以从 SQL 生成实体,我们可以 转换成 JSON 对象。

我们可以让 DataAccessLayer 可以通用地获取数据。为了将实体转换为 Json 对象,我们需要在特定实体中提供逻辑 class(Separate JSON generation class).

我接受了 DominicEU 的回答,因为它为我提供了让事情正常进行所需的一切。 Pheonix 在 link 中的回答很好,但仍然缺少一些细节。下面显示了 pom 和一个工作示例...(您可能想要重新处理连接内容以实现实际实现):

Java代码:

import com.google.gson.Gson;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class DBUtil {

    public String resultSetToJson(String query) {
        Connection connection = null;
        List<Map<String, Object>> listOfMaps = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://server:3306/databasename?user=username&password=password");
        } catch (Exception ex) {
            System.err.println("***exception trying to connect***");
            ex.printStackTrace();
        }

        try {
            QueryRunner queryRunner = new QueryRunner();
            listOfMaps = queryRunner.query(connection, query, new MapListHandler());
        } catch (SQLException se) {
            throw new RuntimeException("Couldn't query the database.", se);
        } finally {
            DbUtils.closeQuietly(connection);
        }
        return new Gson().toJson(listOfMaps);
    }
}

Maven pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>dbgeneric</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>

</project>