gpt4 book ai didi

java - 从 Object[] 映射到自定义对象。使用 findBy SQL 查询

转载 作者:行者123 更新时间:2023-12-02 02:58:31 25 4
gpt4 key购买 nike

有一个简单的 SQL 表,例如:

NOTIFICATION (ID, NAME, NOTIF_DATE, ...)
<小时/>

我正在使用如下代码从后端应用程序执行 SQL 查询:

this.findBySQL(MY_SQL_QUERY, params...);
<小时/>

SQL SELECT QUERY 正确执行并返回预期的行。我面临的问题是返回的行被包装到Object[],但在此查询之后,我想使用Java过滤结果8 流和过滤功能

我希望将结果映射到我的自定义对象通知,如下所示:

通知 { 长 id, 字符串名称, 日期 notif_date, ... }

我可以创建自己的映射器,从查询中获得的对象获取结果值,例如:

Notification not = new Notification();
not.setName(obj[1]);
...

但我认为这种方法不是一个好的实现,因为它取决于返回列的顺序,并且我必须为要设置的每个属性编写代码。

有没有办法从这个对象[]映射到我的通知

提前致谢,并对糟糕的代码表示歉意,但我没有更好的方法来解决这个问题。

最佳答案

如果您的 Notification 类有一个接受数据库字段的构造函数(或者您可以添加这样的构造函数),则最简单:

    List<Object[]> rows = this.findBySQL(MY_SQL_QUERY, params);
List<Notification> notifs = rows.stream()
.map(r -> new Notification((Long) r[0], (String) r[1], (Date) r[2]))
.filter(n -> n.getName().startsWith("m"))
.collect(Collectors.toList());

您还没有告诉我们 findBySQL() 的确切返回类型,所以我猜测了一下。我希望您能够根据您的具体情况定制代码。

我只是为了示例而在流中放入了一个相当无意义的 filter() 。我发现在创建 Notification 对象后进行过滤会更方便。如果您愿意,也可以之前进行过滤。我不太明白你为什么不在 SQL 中进行过滤。

如果你不能为此目的添加一个好的构造函数,它会有点长,但实际上并没有复杂得多:

    List<Notification> notifs = rows.stream()
.map(r -> {
Notification notif = new Notification();
notif.setId((Long) r[0]);
notif.setName((String) r[1]);
notif.setNotif_date((Date) r[2]);
return notif;
})
.filter(n -> n.getName().startsWith("m"))
.collect(Collectors.toList());

关于java - 从 Object[] 映射到自定义对象。使用 findBy SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com