@@ -81,6 +81,8 @@ tasks {
8181 writeEmployeeDaoCode(employeeDaoFile, i)
8282 val employeeAggregateStrategyFile = File (sourceDir, " Employee${i} AggregateStrategy.java" )
8383 writeEmployeeAggregateStrategyCode(employeeAggregateStrategyFile, i)
84+ val employeeConditionFile = File (sourceDir, " Employee${i} Condition.java" )
85+ writeEmployeeConditionCode(employeeConditionFile, i)
8486 }
8587 println (" Generated DAO files in src/main/java/com/example/dao" )
8688 }
@@ -119,8 +121,10 @@ tasks {
119121 (1 .. generationSize).forEach { i ->
120122 val dir = file(" $sqlFileDirPath /Employee${i} Dao" )
121123 dir.mkdirs()
122- val sqlFile = File (dir, " selectById.sql" )
123- writeSelectByIdSqlFile(sqlFile, i)
124+ val selectByIdSqlFile = File (dir, " selectById.sql" )
125+ writeSelectByIdSqlFile(selectByIdSqlFile, i)
126+ val selectByConditionSqlFile = File (dir, " selectByCondition.sql" )
127+ writeSelectByConditionSqlFile(selectByConditionSqlFile, i)
124128 val createScriptFile = File (dir, " create.script" )
125129 writeCreateScriptFile(createScriptFile, i)
126130 val dropScriptFile = File (dir, " drop.script" )
@@ -143,6 +147,8 @@ fun writeEmployeeDaoCode(
143147 """
144148 package com.example.dao;
145149
150+ import java.util.List;
151+
146152 import org.seasar.doma.Dao;
147153 import org.seasar.doma.Insert;
148154 import org.seasar.doma.Update;
@@ -166,6 +172,9 @@ fun writeEmployeeDaoCode(
166172 @Select(aggregateStrategy = Employee${i} AggregateStrategy.class)
167173 Employee$i selectById(Long id);
168174
175+ @Select
176+ List<Employee$i > selectByCondition(Employee${i} Condition condition);
177+
169178 @Script
170179 void create();
171180
@@ -209,6 +218,25 @@ fun writeEmployeeAggregateStrategyCode(
209218 )
210219}
211220
221+ fun writeEmployeeConditionCode (
222+ file : File ,
223+ i : Int ,
224+ ) {
225+ file.writeText(
226+ """
227+ package com.example.dao;
228+
229+ import java.util.Objects;
230+
231+ public record Employee${i} Condition(String namePattern, int age) {
232+ public Employee${i} Condition {
233+ Objects.requireNonNull(namePattern);
234+ }
235+ }
236+ """ .trimIndent(),
237+ )
238+ }
239+
212240fun writeEmployeeCode (
213241 file : File ,
214242 i : Int ,
@@ -312,6 +340,20 @@ fun writeSelectByIdSqlFile(
312340 )
313341}
314342
343+ fun writeSelectByConditionSqlFile (
344+ file : File ,
345+ i : Int ,
346+ ) {
347+ file.writeText(
348+ """
349+ SELECT /*%expand*/*
350+ FROM employee$i e
351+ WHERE e.age > /* condition.age */0
352+ AND e.name LIKE /* condition.namePattern */'test'
353+ """ .trimIndent(),
354+ )
355+ }
356+
315357fun writeCreateScriptFile (
316358 file : File ,
317359 i : Int ,
@@ -463,6 +505,13 @@ fun writeEmployeeDaoTestCode(
463505 assertEquals("Engineering", employee2.department.name.value());
464506 assertEquals(employee.id, employee2.manager.id);
465507 }
508+
509+ @Test
510+ void selectByCondition() {
511+ var condition = new Employee${i} Condition("%J%", 20);
512+ var employees = employeeDao.selectByCondition(condition);
513+ assertEquals(2, employees.size());
514+ }
466515 }
467516 """ .trimIndent(),
468517 )
0 commit comments