英文:
How to add multiline Strings in Java?
问题
如何使长查询更易读?
例如,我有以下这个查询:
String query = "SELECT CASE WHEN EXISTS (SELECT * FROM users WHERE username = 'username' AND user_password = crypt('password', user_password)) THEN 'match' ELSE 'differ' END";
这个查询完全无法阅读,有没有什么方法可以使其更加美观?
英文:
How to make long queries more readable?
For example I have this one:
String query = "SELECT CASE WHEN EXISTS (SELECT * FROM users WHERE username = 'username' AND user_password = crypt('password', user_password)) THEN 'match' ELSE 'differ' END";
And it's completely unreadable, are there any ways to beautify it?
答案1
得分: 3
自 Java 15 版本开始,你可以使用文本块:
String query = """
SELECT CASE
WHEN
EXISTS (
SELECT *
FROM users
WHERE
username = 'username'
AND user_password = crypt('password', user_password)
)
THEN 'match'
ELSE 'differ'
END
""";
英文:
Since Java 15, you can use text blocks:
String query = """
SELECT CASE
WHEN
EXISTS (
SELECT *
FROM users
WHERE
username = 'username'
AND user_password = crypt('password', user_password)
)
THEN 'match'
ELSE 'differ'
END
""";
答案2
得分: 2
-
在不希望将SQL和JAVA混合在一起的情况下,您可以将SQL查询放入一个
.sql
文件中。在需要时获取此文本。public class QueryUtil { static public String getQuery(String fileName) throws IOException { Path path = Paths.get("src/test/resources/" + fileName + ".sql"); return Files.readAllLines(path).get(0); } }
-
如果您可以混合使用SQL和JAVA,从JDK 15开始,您可以使用文本块来实现此目的。
-
此外,您可以使用JOOQ从数据库中生成Java代码,它提供了许多优势。
英文:
-
In cases when you don't wont to blend SQL and JAVA you can put SQL queries in an
.sql
file. And get this text when needed.public class QueryUtil { static public String getQuery(String fileName) throws IOException { Path path = Paths.get("src/test/resources//" + fileName + ".sql"); return Files.readAllLines(path).get(0); } }
-
If you can mix SQL and JAVA then starting from JDK15 you can use text blocks for this.
-
Also you can generates Java code from your database by using JOOQ, it gives many benefits.
答案3
得分: 1
假设您无法升级到比8更新的Java版本(即使可以升级),目前最好的解决方案是使用对象关系映射(ORM)。对于Java而言,主要可以选择Hibernate或jOOQ。jOOQ(可能也包括Hibernate,但我没有使用过,很抱歉)允许您使用流畅的编程接口,这与现有的Java代码风格和模式非常一致。
使用ORM的另一个具体优势是,您可以非常轻松地更改所使用的数据库引擎,而无需更改您编写的Java代码,只需要在设置函数中更改SQL方言。请参阅https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html。
英文:
Assuming that you can't move to a newer-than-8 version of Java (or even if you can), by far the best solution is to use an ORM. For Java it pretty much comes down to Hibernate, or jOOQ. jOOQ (and possibly Hibernate, I haven't used it so can't say, sorry) allows you to use a fluent programming interface, which is very much in keeping with existing Java code style and patterns.
Another specific advantage of using an ORM is that you can very easily change which DB engine you use without having to change the Java code that you've written beyond changing the SQL dialect in your setup functions. See https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html.
答案4
得分: 1
你可以使用JOOQ,并获得诸如类型安全、自动完成、简便映射和出色支持等多个其他好处。
迄今为止,我已在几个项目中使用它,并且还尝试过像Kotlin Exposed之类的竞争对手,但始终回到了JOOQ。
英文:
You can use JOOQ and get multiple other benefits like type safety, auto-complete, easy mapping and great support.
Have used it for several projects so far and also competition like Kotlin Exposed but always came back to JOOQ.
答案5
得分: 0
移至Java 13+。有文本块可供使用。
或者使用一些ORM库。
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论