java - 将 sql 中的多个列映射到 java 对象

标签 java mysql spring

我正在尝试从 JIRA 检索和处理代码,不幸的是,信息片段(位于元数据插件中)保存在列中,而不是行中。 Picture of JIRA-MySQL-Database

目标是将其保存在具有以下属性的对象中:

public class DesiredObject {
    private String Object_Key;
    private String Aze.kunde.name;
    private Long Aze.kunde.schluessel;
    private String Aze.projekt.name;
    private Long Aze.projekt.schluessel
    //getters and setters here
}

我的工作台是STS,它是一个Spring-Boot-应用程序。 我可以使用 JRJC 获取对象键列表:

JiraController jiraconnect = new JiraController();
List<JiraProject> jiraprojects = new ArrayList<JiraProject>();
jiraprojects = jiraconnect.findJiraProjects();

这是完美的工作,而且 USER_KEY 和 USER_VALUE 也很容易检索,但我希望有一个比执行更好的方法 每个项目进行三个 SQL 搜索,然后以某种方式从所有这些列表中构建一个对象。

我从

开始
for (JiraProject jp : jiraprojects) {
            String SQL = "select * from jira_metadata where ENRICHED_OBJECT_KEY = ?";
            List<DesiredObject> do = jdbcTemplateObject.query(SQL, new Object[] { "com.atlassian.jira.project.Project:" + jp.getProjectkey() }, XXX);
        }

获取每个对象的列表,但我陷入困境,因为我无法找出能够将其写入对象的 ObjectMapper (XXX)。

通常我会一起去

object.setter(rs.getString("SQL-Column"));

但这不起作用,因为我的所有专栏都被称为相同的。 (USER_KEY 和 USER_VALUE)

数据库是由 JIRA 自动创建的,所以我无法“修复”它。 Object_Keys 是唯一的,这就是为什么我尝试使用它们来收集 SQL 表中的所有数据。

我希望您所需要的一切都在这篇文章中,如果没有,请随时询问更多!

编辑:不要担心是否有一些“项目”和“项目”,那是因为我给我的大部分类(class)提供了德语名称和描述。

最佳答案

我使用 Objectkey 和括号中的唯一标记创建了一个 HashMap ,例如:“(1)JIRA”。

String SQL = "select * from ao_cc6aeb_jira_metadata";
List<JiraImportObjekt> jioList = jdbcTemplateObject.query(SQL, new JiraImportObjektMapper());
    HashMap<String, String> hmap = new HashMap<String, String>();
    Integer unique = 1;
    for (JiraImportObjekt jio : jioList) {

        hmap.put("(" + unique.toString() + ")" + jio.getEnriched_Object_Key(),
                jio.getUser_Key() + "(" + jio.getUser_Value() + ")");
        unique++;
    }

我将其更改为 TreeMap

Map<String, String> tmap = new TreeMap<String, String>(hmap);

然后我通过该树形图迭代

String aktuProj = new String();
for (String s : tmap.keySet()) {
        if (aktuProj.equals(s.replaceAll("\\([^\\(]*\\)", ""))) {

        } else { //Add Element to list and start new Element }
//a lot of other stuff
}

我所做的是将所有数据按正确的顺序排列,按照我想要的方式迭代和处理所有内容。

Object hinfo = hmap.get(s);
        if (hinfo.toString().replaceAll("\\([^\\(]*\\)", "").equals("aze.kunde.schluessel")) {
            Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(hinfo.toString());
            while (m.find()) {
                jmo[obj].setAzeKundeSchluessel(Long.parseLong(m.group(1), 10));
                // logger.info("AzeKundeSchluessel: " +
                // jmo[obj].getAzeKundeSchluessel());
            }
        } else ...

循环之后我需要添加最后一个元素。 现在我有一个包含元素的列表,它易于使用并准备好执行进一步的步骤。

我删掉了很多代码,因为其中大部分都是针对我的问题定制的。不过路线图应该足以解决它。

祝你好运!

关于java - 将 sql 中的多个列映射到 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33737637/

相关文章:

java - grails过滤器和 hibernate grails过滤器插件有什么区别

mysql - 多对多匹配多重优化

php - 从 PHP SQL 检查列为 NULL

java - 如何在 Spring 中实现异步非并发调度程序?

java - 由于临时文件创建,使用 Ajc 的 Gradle 构建失败

java - 如何调整 Barbecue API 生成的文本的大小?

Mysql - 从分组数据中获取n个结果

spring - 在多个项目中显示tag.properties

c# - 无法在 Windows Phone 8.1 中集成 Dropbox

java - 使用 DOM 解析器从 XML 中读取注释