====== 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() }