当前位置: 首页 > 知识库问答 >
问题:

用于NativeQuery的Spring JPA长SQL字符串

丌官霖
2023-03-14

在我的Spring JPA项目中,我有这样一个repo文件:

@Repository
public interface StudentRepository extends JpaRepository<Student, Integer>{

@Query(value = "select * from students", nativeQuery = true)
public List<Student> findStudents(
        @Param("keyword") String keyword
        );
}

这样,我仍然可以复制粘贴SQL并在我的DB软件中运行。

但是当遇到这样的大型查询时:

    @Query(value = "SELECT\n" + 
        "*\n" + 
        "FROM\n" + 
        "students\n" + 
        "WHERE\n" + 
        "(\n" + 
        "`id` LIKE CONCAT('%', :keyword, '%') OR\n" + 
        "`name` LIKE  CONCAT('%', :keyword, '%') OR\n" + 
        "`desc` LIKE  CONCAT('%', :keyword, '%') OR\n" + 
        "`sex` LIKE  CONCAT('%', :keyword, '%')\n" + 
        ")", nativeQuery = true)
public List<Student> findStudents(
        @Param("keyword") String keyword
        );

我不能真的直接复制粘贴和运行在DB软件,我必须删除“+”“\n”字符。我试过Java的“”“sql_query_string”“”但它不允许这样做。

字符串文字没有正确地用双引号封闭

共有1个答案

路金鑫
2023-03-14

JEP355引入了多行字符串。您可以利用它们简单地复制-粘贴SQL:

@Query(value = 
"""
    select * 
    from students
    ...
""", nativeQuery = true)

注意,它是作为预览版在Java13中引入的。因此您需要至少升级到Java13并启用预览功能来利用它。

如果不是,可以通过将换行符替换为空格来提高可读性:

@Query(value = "SELECT " + 
    "FROM " + 
    "students " + 
    ...
 类似资料:
  • 问题内容: 我在SQL数据库中有一个字符串,表示一个URL。有些网址很短,有些很长。我真的不知道这是我可能遇到的最长的URL,所以为了安全起见,我会采用较大的值,例如256或512。 当我定义最大字符串长度时(例如,使用SQLAlchemy): 即使实际的字符串较短,这是否也会占用每一行的空间(存储空间)? 我假设这与实现细节有关。我正在使用postgreSQL,但对sqlite和mysql也很感

  • 假设我有一个有2列的表:name和number。Name是一个字符串,可以有一个或多个单词,我想要一个新的查询选择名称编号,但在Name列,它只有最长的词,原来的表。 SQL中是否有一个函数只从字符串中提取最长的单词?

  • 问题内容: 我正在尝试在列数据类型为的表中插入数据。理想情况下,它应该存储8000个以上的字符,但就我而言,它将其减少到8000个字符。 我正在过程中的运行时进行插入查询。下面是该程序正在执行的示例查询。 A,B,C等是示例数据,实际数据将在运行时被标识,实际内容跨越8000个字符。同样,用于存储值的变量也定义为’ ‘ 但是,当我尝试以下查询时,它的确在表中插入了超过8000个字符 我想在尝试用“

  • 大家好。我必须制作这个程序,输入一个文本,输出有多少个单词,以及有多少个长度为1、2等的单词。我已经完成了计算单词数的程序,但对于第二部分我不知道。非常感谢任何能帮忙的人。

  • 可能已经有某种apache或guava实用程序类满足我的要求: 我想始终创建相同长度的字符串。缺少的字符应使用固定字符向左或向右填充。像这样: 你明白了,可能它已经在那里了,但是我错过了找到它的正确关键字。

  • 问题内容: 你如何得到一个的长度?例如,我有一个定义如下的变量: 但是,我似乎无法在字符串上找到长度方法。 问题答案: 自Swift 4+起 只是: 原因。 (感谢Martin R) 从Swift 2开始: 在Swift 2中,Apple已将全局功能更改为协议扩展,这些扩展可与符合协议的任何类型匹配。因此,新语法为: (感谢JohnDifool的注意) 从Swift 1开始 使用计数字符方法: 直