Skip to content

Commit 8f06bad

Browse files
committed
Refactor to use association mapping for Employee-Department
1 parent 4ae715d commit 8f06bad

File tree

9 files changed

+48
-57
lines changed

9 files changed

+48
-57
lines changed

dao-style-file/src/main/java/example/dao_style_file/dao/EmployeeDao.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import example.dao_style_file.domain.Age;
44
import example.dao_style_file.domain.Salary;
5+
import example.dao_style_file.entity.Department;
56
import example.dao_style_file.entity.Employee;
6-
import example.dao_style_file.entity.EmployeeDepartment;
77
import java.time.LocalDateTime;
88
import java.util.List;
9+
import java.util.function.BiFunction;
910
import java.util.function.Function;
1011
import java.util.stream.Stream;
12+
import org.seasar.doma.AggregateStrategy;
13+
import org.seasar.doma.AssociationLinker;
1114
import org.seasar.doma.Dao;
1215
import org.seasar.doma.Delete;
1316
import org.seasar.doma.Insert;
@@ -67,8 +70,8 @@ public interface EmployeeDao {
6770
@Select(strategy = SelectType.STREAM)
6871
<R> R selectByAge(int age, Function<Stream<Employee>, R> mapper);
6972

70-
@Select
71-
List<EmployeeDepartment> selectAllEmployeeDepartment();
73+
@Select(aggregateStrategy = EmployeeAggregateStrategy.class)
74+
List<Employee> selectAllEmployeeDepartment();
7275

7376
@Insert(sqlFile = true)
7477
int insert(Employee employee);
@@ -79,3 +82,13 @@ public interface EmployeeDao {
7982
@Delete(sqlFile = true)
8083
int delete(Employee employee);
8184
}
85+
86+
@AggregateStrategy(root = Employee.class, tableAlias = "e")
87+
interface EmployeeAggregateStrategy {
88+
@AssociationLinker(propertyPath = "department", tableAlias = "d")
89+
BiFunction<Employee, Department, Employee> department =
90+
(e, d) -> {
91+
e.setDepartment(d);
92+
return e;
93+
};
94+
}

dao-style-file/src/main/java/example/dao_style_file/entity/Employee.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import example.dao_style_file.domain.Salary;
55
import java.time.LocalDate;
66
import java.time.LocalDateTime;
7+
import org.seasar.doma.Association;
78
import org.seasar.doma.Column;
89
import org.seasar.doma.Entity;
910
import org.seasar.doma.GeneratedValue;
@@ -12,7 +13,6 @@
1213
import org.seasar.doma.Metamodel;
1314
import org.seasar.doma.OriginalStates;
1415
import org.seasar.doma.SequenceGenerator;
15-
import org.seasar.doma.Transient;
1616
import org.seasar.doma.Version;
1717

1818
@Entity(listener = EmployeeListener.class, metamodel = @Metamodel)
@@ -45,7 +45,7 @@ public class Employee {
4545

4646
LocalDateTime updateTimestamp;
4747

48-
@Transient Department department;
48+
@Association Department department;
4949

5050
@OriginalStates Employee originalStates;
5151

dao-style-file/src/main/java/example/dao_style_file/entity/EmployeeDepartment.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectAllEmployeeDepartment.sql

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
select
2-
e.*,
3-
d.name department_name
2+
/*%expand */*
43
from
54
employee e
65
left outer join

dao-style-file/src/test/java/example/dao_style_file/SelectTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import example.dao_style_file.dao.EmployeeDaoImpl;
99
import example.dao_style_file.domain.Age;
1010
import example.dao_style_file.domain.Salary;
11+
import example.dao_style_file.entity.Department;
1112
import example.dao_style_file.entity.Employee;
12-
import example.dao_style_file.entity.EmployeeDepartment;
1313
import java.time.LocalDateTime;
1414
import java.util.Arrays;
1515
import java.util.List;
@@ -163,10 +163,12 @@ public void testCount() {
163163

164164
@Test
165165
public void testSelectJoinedResult() {
166-
List<EmployeeDepartment> list = dao.selectAllEmployeeDepartment();
166+
List<Employee> list = dao.selectAllEmployeeDepartment();
167167
assertEquals(14, list.size());
168-
for (EmployeeDepartment e : list) {
169-
assertNotNull(e.getDepartmentName());
168+
for (Employee e : list) {
169+
Department department = e.getDepartment();
170+
assertNotNull(department);
171+
assertNotNull(department.getName());
170172
}
171173
}
172174
}

dao-style-text/src/main/java/example/dao_style_text/dao/EmployeeDao.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import example.dao_style_text.domain.Age;
44
import example.dao_style_text.domain.Salary;
5+
import example.dao_style_text.entity.Department;
56
import example.dao_style_text.entity.Employee;
6-
import example.dao_style_text.entity.EmployeeDepartment;
77
import java.sql.Timestamp;
88
import java.util.List;
9+
import java.util.function.BiFunction;
910
import java.util.function.Function;
1011
import java.util.stream.Stream;
12+
import org.seasar.doma.AggregateStrategy;
13+
import org.seasar.doma.AssociationLinker;
1114
import org.seasar.doma.Dao;
1215
import org.seasar.doma.Delete;
1316
import org.seasar.doma.Insert;
@@ -235,8 +238,7 @@ public interface EmployeeDao {
235238
@Sql(
236239
"""
237240
select
238-
e.*,
239-
d.name department_name
241+
/*%expand */*
240242
from
241243
employee e
242244
left outer join
@@ -246,8 +248,8 @@ public interface EmployeeDao {
246248
order by
247249
e.id
248250
""")
249-
@Select
250-
List<EmployeeDepartment> selectAllEmployeeDepartment();
251+
@Select(aggregateStrategy = EmployeeAggregateStrategy.class)
252+
List<Employee> selectAllEmployeeDepartment();
251253

252254
@Sql(
253255
"""
@@ -308,3 +310,13 @@ insert into Employee (
308310
@Delete
309311
int delete(Employee employee);
310312
}
313+
314+
@AggregateStrategy(root = Employee.class, tableAlias = "e")
315+
interface EmployeeAggregateStrategy {
316+
@AssociationLinker(propertyPath = "department", tableAlias = "d")
317+
BiFunction<Employee, Department, Employee> department =
318+
(e, d) -> {
319+
e.setDepartment(d);
320+
return e;
321+
};
322+
}

dao-style-text/src/main/java/example/dao_style_text/entity/Employee.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import example.dao_style_text.domain.Salary;
55
import java.time.LocalDate;
66
import java.time.LocalDateTime;
7+
import org.seasar.doma.Association;
78
import org.seasar.doma.Column;
89
import org.seasar.doma.Entity;
910
import org.seasar.doma.GeneratedValue;
@@ -12,7 +13,6 @@
1213
import org.seasar.doma.Metamodel;
1314
import org.seasar.doma.OriginalStates;
1415
import org.seasar.doma.SequenceGenerator;
15-
import org.seasar.doma.Transient;
1616
import org.seasar.doma.Version;
1717

1818
@Entity(listener = EmployeeListener.class, metamodel = @Metamodel)
@@ -45,7 +45,7 @@ public class Employee {
4545

4646
LocalDateTime updateTimestamp;
4747

48-
@Transient Department department;
48+
@Association Department department;
4949

5050
@OriginalStates Employee originalStates;
5151

dao-style-text/src/main/java/example/dao_style_text/entity/EmployeeDepartment.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

dao-style-text/src/test/java/example/dao_style_text/SelectTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import example.dao_style_text.dao.EmployeeDaoImpl;
99
import example.dao_style_text.domain.Age;
1010
import example.dao_style_text.domain.Salary;
11+
import example.dao_style_text.entity.Department;
1112
import example.dao_style_text.entity.Employee;
1213
import java.sql.Timestamp;
1314
import java.util.List;
@@ -164,7 +165,9 @@ public void testSelectJoinedResult() {
164165
var list = dao.selectAllEmployeeDepartment();
165166
assertEquals(14, list.size());
166167
for (var e : list) {
167-
assertNotNull(e.getDepartmentName());
168+
Department department = e.getDepartment();
169+
assertNotNull(department);
170+
assertNotNull(department.getName());
168171
}
169172
}
170173
}

0 commit comments

Comments
 (0)