[SQL] 스프링 JDBC를 사용하는 경우 (+20 라인 SQL) 긴 청소 방법을 구체화하기 위해? [닫은]
SQL스프링 JDBC를 사용하는 경우 (+20 라인 SQL) 긴 청소 방법을 구체화하기 위해? [닫은]
나는 속성 \ SQL \ XML 파일에 내 응용 프로그램에서 일부 대형 쿼리를 구체화하고 싶다. 사람이 깨끗한 방식으로이를 달성 방법에 대한 몇 가지 권장 사항이있는 경우 그러나 궁금했다. 대부분의 결과는 ORM 프레임 워크를 사용하는 것이 좋습니다하지만이 때문에 일부 데이터 제한에 적용되지 않습니다.
내가 한 번 봐했다 : 자바 - 외부 파일에 보관 SQL 문을하지만,이 propertyName 형식을 .1하고, 각각의 이상 20 개 라인이 깨끗하게 보이지 않는입니다 몇 쿼리 0.2 등.
해결법
-
==============================
1.당신은 XML 파일에 쿼리를 넣을 수 있습니다
당신은 XML 파일에 쿼리를 넣을 수 있습니다
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="getPersonById"> <![CDATA[ Select Name From Person Where Id =? ]]> </entry> <entry key="getPersonBySSN"> <![CDATA[ ]]> </entry> </properties>
Spring 애플리케이션 컨텍스트에서이 XML 파일을로드
<bean id="queryProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations" value="classpath:/queries.xml" /> </bean>
당신의 DAO 클래스에서이 빈을 주입
<bean id="myDAO" class="com.xyz.dao.MyDAOImpl"> <property name="queryProps" ref="queryProps" /> </bean>
당신의 DAO 클래스에 queryProps을 정의하고 이에 대한 setter 메소드를 가지고하는 것을 잊지 마세요
private Properties queryProps;
지금 당신은이처럼 DAO에서 쿼리를 액세스 할 수 있습니다 -
String query = queryProps.getProperty("getPersonById");
도움이 되었기를 바랍니다.
-
==============================
2.나는 얼마 전에 같은 문제에 직면하고, YAML 함께했다. 당신이 당신의 쿼리 파일에 다음처럼 작성할 수 있습니다 그것은 여러 줄 문자열 속성 값을 지원합니다 :
나는 얼마 전에 같은 문제에 직면하고, YAML 함께했다. 당신이 당신의 쿼리 파일에 다음처럼 작성할 수 있습니다 그것은 여러 줄 문자열 속성 값을 지원합니다 :
selectSomething: > SELECT column1, column2 FROM SOMETHING insertSomething: > INSERT INTO SOMETHING(column1, column2) VALUES(1, '1')
여기에, selectSomething 및 insertSomething 쿼리 이름입니다. 그래서 정말 편리하고 매우 적은 특수 문자가 포함되어 있습니다. 쿼리는 빈 라인으로 구분되며, 각 쿼리 텍스트는 들여 쓰기를해야합니다. 쿼리가 절대적으로 다음 완벽하게 유효 그래서, 자신의 들여 쓰기를 포함 할 수 있습니다 :
anotherSelect: < SELECT column1 FROM SOMETHING WHERE column2 IN ( SELECT * FROM SOMETHING_ELSE )
그런 다음 아래의 코드를 사용하여, SnakeYAML 라이브러리의 도움으로 해시 맵에 파일의 내용을 읽을 수 있습니다 :
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FileUtils; import java.io.FileReader; import org.yaml.snakeyaml.Yaml; import java.io.File; import java.io.FileNotFoundException; public class SQLReader { private Map<String, Map> sqlQueries = new HashMap<String, Map>(); private SQLReader() { try { final File sqlYmlDir = new File("dir_with_yml_files"); Collection<File> ymlFiles = FileUtils.listFiles(sqlYmlDir, new String[]{"yml"}, false); for (File f : ymlFiles) { final String fileName = FilenameUtils.getBaseName(f.getName()); Map ymlQueries = (Map)new Yaml().load(new FileReader(f)); sqlQueries.put(fileName, ymlQueries); } } catch (FileNotFoundException ex) { System.out.println("File not found!!!"); } } }
지도의지도 위의 예에서 쿼리 이름 / 문자열을 포함하는지도에 각 YAML 파일을 매핑 생성됩니다.
-
==============================
3.이 판 카지 대답 무슨에 추가됩니다. 이것은 하나의 속성 XML 및 사용은 autowiring에에서 CDATA이 없습니다. 내가 코멘트 섹션에서이 작업을 수행해야한다면 내가 코드를 포맷 할 수 없습니다로, 대답은이를 추가했다.
이 판 카지 대답 무슨에 추가됩니다. 이것은 하나의 속성 XML 및 사용은 autowiring에에서 CDATA이 없습니다. 내가 코멘트 섹션에서이 작업을 수행해야한다면 내가 코드를 포맷 할 수 없습니다로, 대답은이를 추가했다.
당신이 Spring 애플리케이션 컨텍스트 XML 파일에서 네임 스페이스 다음했는지 확인.
xmlns:util="http://www.springframework.org/schema/util
스프링 애플리케이션 컨텍스트 XML에 다음 빈을 추가
<util:properties id="sqls" location="classpath:oracle/sqls.xml" />
파일 sqls.xml의 내용입니다
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Employee Queries</comment> <entry key="employee.insert"> INSERT INTO EMPLOYEE ( ID, NAME, AGE, DEPARTMENT ) VALUES ( EMPLOYEE_SEQ.NEXTVAL, ?, ?, ? ) </entry> </properties>
속성 아래와 같이를 autowire
@Autowired @Qualifier("sqls") private Properties sqls;
코드 속성에서 SQL 쿼리를 얻을 수 있습니다
String sql = sqls.getProperty("employee.insert");
-
==============================
4.당신은 라인의 끝에 \를 넣어 프로퍼티 파일에서 여러 쿼리를 할 수 있습니다. 예를 들면
당신은 라인의 끝에 \를 넣어 프로퍼티 파일에서 여러 쿼리를 할 수 있습니다. 예를 들면
queries.myquery = select \ foo, bar \ from mytable \ where baz > 10
-
==============================
5.JdbcTestUtils에서보세요 및 방법 "executeSqlScript"및 "스크립트를 읽기".
JdbcTestUtils에서보세요 및 방법 "executeSqlScript"및 "스크립트를 읽기".
from https://stackoverflow.com/questions/15433032/clean-way-to-externalize-long-20-lines-sql-when-using-spring-jdbc by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 외부 데이터베이스에 연결 - 안드로이드 응용 프로그램을 (0) | 2020.07.22 |
---|---|
[SQL] 번역 SQL은 R data.table 구문 외래 키에 조인 (0) | 2020.07.22 |
[SQL] 4 액세스 표 속성을 가입 난간 (0) | 2020.07.22 |
[SQL] SQL 쿼리 복잡성 대 성능에 어떤 일반적인 규칙이 있습니까? (0) | 2020.07.22 |
[SQL] PostgreSQL의 트림 후행 공백 (0) | 2020.07.22 |