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 } }
먼저 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() }