@@ -31,6 +31,10 @@ application {
3131 mainClass.set(" com.example.Main" )
3232}
3333
34+ var daoPackagePath = " src/main/java/com/example/dao"
35+ var entityPackagePath = " src/main/java/com/example/entity"
36+ var sqlFileDirPath = " src/main/resources/META-INF/com/example/dao"
37+
3438tasks {
3539 test {
3640 useJUnitPlatform()
@@ -48,10 +52,6 @@ tasks {
4852 dependsOn(" generateDAOs" , " generateEntities" , " generateSqlFiles" )
4953 }
5054
51- var daoPackagePath = " src/main/java/com/example/dao"
52- var entityPackagePath = " src/main/java/com/example/entity"
53- var sqlFileDirPath = " src/main/resources/META-INF/com/example/dao"
54-
5555 register(" generateDAOs" ) {
5656 dependsOn(" generateEntities" )
5757 doLast {
@@ -61,6 +61,8 @@ tasks {
6161 (1 .. generationSize).forEach { i ->
6262 val employeeDaoFile = File (sourceDir, " Employee${i} Dao.java" )
6363 writeEmployeeDaoCode(employeeDaoFile, i)
64+ val employeeAggregateStrategyFile = File (sourceDir, " Employee${i} AggregateStrategy.java" )
65+ writeEmployeeAggregateStrategyCode(employeeAggregateStrategyFile, i)
6466 }
6567 println (" Generated DAO files in src/main/java/com/example/dao" )
6668 }
@@ -87,7 +89,15 @@ tasks {
8789 dir.mkdirs()
8890
8991 val sqlFile = File (dir, " selectById.sql" )
90- sqlFile.writeText(" select /*%expand*/* from employee$i where id = /*id*/0\n " )
92+ sqlFile.writeText(
93+ """
94+ SELECT /*%expand*/*
95+ FROM employee$i e
96+ INNER JOIN department$i d
97+ ON e.department_id = d.id
98+ WHERE e.id = /*id*/0
99+ """ .trimIndent(),
100+ )
91101 }
92102 println (" Generated SQL files in src/main/resources/META-INF/com/example/dao/EmployeeXxxDao" )
93103 }
@@ -125,13 +135,43 @@ fun writeEmployeeDaoCode(
125135 @Delete
126136 int delete(Employee$i entity);
127137
128- @Select
138+ @Select(aggregateStrategy = Employee ${i} AggregateStrategy.class)
129139 Employee$i selectById(Long id);
130140 }
131141 """ .trimIndent(),
132142 )
133143}
134144
145+ fun writeEmployeeAggregateStrategyCode (
146+ file : File ,
147+ i : Int ,
148+ ) {
149+ file.writeText(
150+ """
151+ package com.example.dao;
152+
153+ import org.seasar.doma.AggregateStrategy;
154+ import org.seasar.doma.AssociationLinker;
155+
156+ import java.util.function.BiConsumer;
157+
158+ import com.example.entity.Department$i ;
159+ import com.example.entity.Employee$i ;
160+
161+ @AggregateStrategy(root = Employee$i .class, tableAlias = "e")
162+ public interface Employee${i} AggregateStrategy {
163+
164+ @AssociationLinker(propertyPath = "department", tableAlias = "d")
165+ BiConsumer<Employee$i , Department$i > department =
166+ (e, d) -> {
167+ e.department = d;
168+ d.employees.add(e);
169+ };
170+ }
171+ """ .trimIndent(),
172+ )
173+ }
174+
135175fun writeEmployeeCode (
136176 file : File ,
137177 i : Int ,
@@ -191,6 +231,7 @@ fun writeDepartmentCode(
191231 """
192232 package com.example.entity;
193233
234+ import java.util.ArrayList;
194235 import java.util.List;
195236
196237 import org.seasar.doma.Association;
@@ -211,7 +252,7 @@ fun writeDepartmentCode(
211252 @Version
212253 public Integer version;
213254 @Association
214- public List<Employee$i > employees;
255+ public List<Employee$i > employees = new ArrayList<>() ;
215256 }
216257 """ .trimIndent(),
217258 )
@@ -221,7 +262,7 @@ spotless {
221262 java {
222263 googleJavaFormat(libs.versions.googleJavaFormat.get())
223264 target(" src/*/java/**/*.java" )
224- targetExclude(" **/generated/**" )
265+ targetExclude(" **/generated/**" , " $daoPackagePath /** " , " $entityPackagePath /** " , " $sqlFileDirPath /** " )
225266 }
226267 kotlin {
227268 target(" *.gradle.kts" )
0 commit comments