如何从属性文件中读取 SQL 查询
Posted
技术标签:
【中文标题】如何从属性文件中读取 SQL 查询【英文标题】:How to read SQL queries from a properties file 【发布时间】:2020-10-16 02:29:15 【问题描述】:我有一个传统的 spring mvc 应用程序,它使用 spring jdbc 作为 ORM。现在我想使用spring boot,而不是mvc,我将把它转换成RestAPI。我对数据库查询部分有疑问。使用 propertyplaceholder xml conf,在旧应用程序中配置外部 sql 查询属性文件。使用 Spring boot 和最新的注释方法,我该如何配置它。我的理解是
-
将查询属性文件放在src/main/resources目录中
在 DAO 中创建与 sql 的键 (name) 相同的属性名称。
为 key 属性创建 getter 和 setter
这是正确的方法吗?如果是,如果我使用它,我将如何在我的 DAO 类中获取查询?如果不是最好的方法是什么。
【问题讨论】:
为什么要将 SQL 放在属性文件中? 很少有大型查询。由于它是一个已经存在的应用程序,我想按原样使用它。 【参考方案1】:这不是一个好方法,但您可以通过多种方式做到这一点,当您使用数据库和 Spring Boot 时,我总是接近使用 JPA
application.yml
emp:
eid: "select eid from employee"
name: "select ename from employee"
在模型包下为Employee创建一个类
@ConfigurationProperties("emp")
@Getter
@Setter
public class Employee
private List<Integer> eid;
private List<String> ename;
在config包下为Employee创建一个bean实例
@Configuration
public class Config
@Bean
public Employee getEmployee()
return new Employee();
然后您可以在项目中需要时调用 Employee 实例
@RestController
public class EmpController
@Autowired
Employee emp;
【讨论】:
就我而言,我有 1200 个 SQL 查询,其中大部分都是非常复杂的查询。没有特定的实体类,它是一个遗留的单体应用程序。 如果您没有针对每个实体的特定表,那么请使用本机查询,否则您在创建关系时必须面对困难,复合类之类的东西 现有代码也使用springJDBC。用 Spring data jdbc 或 spring data jpa 替换它将是一项乏味的工作。【参考方案2】:发布此问题后,我没有得到太多回应。所以我从我身边做了一些工作,并以我在问题中提到的相同方式修复它。我没有找到任何其他方法。
首先是一个用于 PropertySourcesPlaceholderConfigurer 的 java 类 ApplicationPropertyConfig。属性源文件是我的sql属性文件。
@Configuration
@PropertySource("classpath:appSql.properties")
public class ApplicationPropertyConfig
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer()
return new PropertySourcesPlaceholderConfigurer();
appSql.properties
selectallemployees=select * from employee;
创建了另一个名为 ApplicationSQLWrapper.java 的类,该类用@Component 进行了注释。这包含与带有@value 注释的sql 属性键相同的属性名称。
@Component
public class ApplicationSQLWrapper
@Value("$selectallemployees")
private String selectallemployees;
//getter and setter
可以通过创建 Component 类的 Object 从 DAO 类访问此 SQL。
【讨论】:
能否请您展示您的 DAO 类以及您如何实现此 sql 查询?我试图实现同样的目标 为 ApplicationSQLWrapper.java 中的每个属性创建 getter 和 setter,并在 DAO 中创建 SQLWrapper 的对象(自动装配)并使用 getter 访问查询。以上是关于如何从属性文件中读取 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Node.js:在没有返回记录的 SQL 查询中:TypeError:无法读取未定义的属性
Spring - 通过@Value 读取具有多行属性值的 YAML