Mysql SQLServer查询在SQLServer中运行良好,但同一查询不适用于JDBI
为什么我可以在Sql Server中很好地执行以下查询Mysql SQLServer查询在SQLServer中运行良好,但同一查询不适用于JDBI,mysql,sql-server,intellij-idea,jdbi,Mysql,Sql Server,Intellij Idea,Jdbi,为什么我可以在Sql Server中很好地执行以下查询 SELECT notificationMessage FROM NotificationMessages WHERE timesUsed < 2 编辑2 @兹洛斯特:我不会说这是你链接的帖子的完全复制品。因为他们的问题是将一个列表绑定到一个查询,所以我可以很好地使用我的解决方案。我的问题是,我无法理解为什么我不能对我的查询进行简单的低于操作,例如WHERE 1
SELECT notificationMessage FROM NotificationMessages WHERE timesUsed < 2
编辑2
@兹洛斯特:我不会说这是你链接的帖子的完全复制品。因为他们的问题是将一个列表绑定到一个查询,所以我可以很好地使用我的解决方案。我的问题是,我无法理解为什么我不能对我的查询进行简单的低于操作,例如WHERE 1<2。我没有意识到,<是StringTemplate保留的字符。但是是的,你给出的链接有解决我问题的方法“…括号<像这样\<…”,但我不同意说它本身的问题是重复的 所以他们的问题是“如何将列表绑定到语句中的sql查询?” 我的问题是“为什么比较运算符在JDBISQL中不起作用”
这当然是因为我使用注释
@UseStringTemplate3StatementLocator
使我的列表映射到语句中的。我有工作,他们没有。但我不能让我的工作低于或高于任何形式的运作 我找到了查询问题的解决方案,在搜索JDBI的另一个主题时,我偶然发现了这个问题
我特别注意到这句话
还请注意,对于此注释,您不能使用“为什么要使用StringTemplate和JDBI?”?我对该主题的探索表明,它们非常相似,对于JDBI,您不需要StringTemplate,因为它们基本上使用相同的方法来建模SQL查询执行(从应用程序代码的角度)。@zloster,因为我有一些查询在(…)中使用
语句,并且为了能够在
语句中的中绑定我的组,我需要注释来使@BindIn
工作。请参阅上面我链接到的帖子。我选择在类级别上做,也许我可以在方法级别上做,但我还没有尝试过。因为谢谢你的解释。我错过了JDBI requeiresStringTemplate
中的解决方案。这提醒我在即将发布的JDBI3中检查如何处理这一问题。我在这里发现了非常类似的问题:在那里查看链接文章。它来自JDBI的原始作者。这里描述了两种方法:数据库特定的方法和另一种使用StringTemplate
的方法。可能重复@zloster,我不会说它与您链接的帖子完全相同。因为他们的问题是将一个列表绑定到一个查询,所以我可以很好地使用我的解决方案。我的问题是,我不明白为什么我不能对我的查询执行一个简单的低于
的操作,例如WHERE 1<2
。我没有意识到
@SqlQuery("SELECT notificationMessage FROM NotificationMessages WHERE timesUsed < 2")
List<String> getNotificationMessages();
public interface NotificationDAO {
@SqlQuery("SELECT id, notificationMessage, timesUsed, messageType, messageDays FROM NotificationMessages WHERE messageType = 'REMINDER'")
List<NotificationMessage> getReminderNotificationMessages();
}
public class NotificationResource {
...
private NotificationMessage pickNotificationMessage(){
List<NotificationMessage> notificationMessages = notificationDAO.getReminderNotificationMessages();
// Extract the number of times a message has been sent out to users, store in Integer list.
List<Integer> timesUsedList = notificationMessages.stream().map(nm -> nm.getTimesUsed()).collect(Collectors.toList());
// Remove all those messages which have been used once more than others. //TODO maybe another type of removal of messages
List<NotificationMessage> notificationMessagesTruncated = notificationMessages.stream().filter(nm -> nm.getTimesUsed() <= Collections.max(timesUsedList)-1).collect(Collectors.toList());
...
}
...
}