====== Gradle 에서 Native SQL Code Generation ======
* [[java:querydsl|QueryDSL]]
* [[gradle:jpa_metamodel_generation|Gradle에서 JPA 2 MetaModel 생성]]
* [[https://github.com/querydsl/querydsl/blob/master/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java|MetaDataExporer.java]] 에서 속성 값 확인
* [[https://github.com/querydsl/querydsl/blob/master/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java|AntMetaDataExporter.java]] 에서 ant 속성값 확인
====== ANT 사용 ======
dependencies {
compile "com.querydsl:querydsl-sql:${queryDslVersion}"
}
configurations {
queryDslNativeSql
}
dependencies {
queryDslNativeSql "com.querydsl:querydsl-sql-codegen:4.1.4"
queryDslNativeSql "com.microsoft.sqlserver:mssql-jdbc"
}
task generateQueryDslNative << {
file('src/main/generated-querydslnative').deleteDir()
file('src/main/generated-querydslnative').mkdirs()
ant.taskdef(name: 'generateQueryDslNative', classname: 'com.querydsl.sql.codegen.ant.AntMetaDataExporter', classpath: configurations.queryDslNativeSql.asPath)
ant.generateQueryDslNative(
jdbcDriver: '-JDBC-Driver-',
jdbcUrl: '-JDBC-URL-',
jdbcUser: 'username',
jdbcPassword: "password",
namePrefix: 'QS',
packageName: 'test',
schemaPattern: 'dbo', // SQLServer 등에서 필요
tableNamePattern: 'table1|table2', // 특정 테이블만 생성
targetFolder: 'src/main/generated-querydslnative'
)
}
sourceSets {
main {
java {
srcDirs += 'src/main/generated-querydslnative'
}
}
}
idea {
module {
generatedSourceDirs += file('src/main/generated-querydslnative') // just hint
}
}
===== 코드 직접 호출 : 비권장 =====
먼저 [[http://technicles.com/create-oracle-database-jdbc-connection-in-gradle/|Create Oracle database JDBC connection in gradle]] 를 통해 JDBC Driver를 build script 에서 로딩해야한다.
import java.sql.Connection
import java.sql.DriverManager
import com.mysema.query.sql.codegen.MetaDataExporter
buildscript {
dependencies {
classpath 'com.mysema.querydsl:querydsl-sql-codegen:{version}'
}
}
configurations {
querydslSqlJdbcDriver
}
dependencies {
querydslSqlJdbcDriver "mysql:mysql-connector-java:${mysqlJdbcDriverVersion}"
compile "com.mysema.querydsl:querydsl-sql:{version}"
}
task generateQueryDslSql {
// 별도 configuration 에서 JDBC Driver loading 할 것
File mysql = configurations.querydslSqlJdbcDriver.find { it.toString().contains("mysql-connector-java") }
URLClassLoader loader = GroovyObject.class.classLoader
loader.addURL(mysql.toURI().toURL())
DriverManager.registerDriver(loader.loadClass('com.mysql.jdbc.Driver').newInstance())
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8", "user", "password")
MetaDataExporter exporter = new MetaDataExporter()
exporter.namePrefix = 'S'
exporter.packageName = 'package.to.querydslsql'
exporter.targetFolder = file('src/generated/java-querydsl')
// 기타 설정들
exporter.export(connection.getMetaData())
connection.close()
}