Skip to content

Commit a8d42a6

Browse files
author
bretislav.wajtr
committed
Added new scenario for removing single entity based on primary key and implemented in all frameworks
1 parent 2ab7447 commit a8d42a6

16 files changed

Lines changed: 88 additions & 4 deletions

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ These are the scenarios:
4747
9. Complex select - construct select where conditions based on some boolean conditions + throw in some joins
4848
10. Call stored procedure/function and process results
4949
11. Execute query using JDBC simple Statement (not PreparedStatement)
50+
12. Remove single entity based on primary key
5051

5152
Each scenario has it's implementation in the Scenarios class. See javadoc of [Scenarios](src/main/java/com/clevergang/dbtests/Scenarios.java) methods for more detailed description of each scenario.
5253

sql-updates/create-script.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ CREATE TABLE Project (
4040
);
4141

4242
CREATE TABLE ProjectEmployee (
43-
project_pid INTEGER REFERENCES Project ON DELETE NO ACTION,
44-
employee_pid INTEGER REFERENCES Employee ON DELETE NO ACTION,
43+
project_pid INTEGER REFERENCES Project ON DELETE CASCADE,
44+
employee_pid INTEGER REFERENCES Employee ON DELETE CASCADE,
4545
PRIMARY KEY (project_pid, employee_pid)
4646
);
4747

src/main/java/com/clevergang/dbtests/Scenarios.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,20 @@ public void executeSimpleStaticStatementScenario() {
343343
assert output.getName().equals("CleverGang");
344344
logger.info("Output of scenario 11: {}", output);
345345
}
346+
347+
/**
348+
* 12. Delete one record by PID
349+
* <br/>
350+
* Just one of the CRUD operations.
351+
*/
352+
public void removeSingleEntityScenario() {
353+
repository.removeProject(2);
354+
355+
// check some post conditions
356+
Integer projectCount = repository.getProjectsCount();
357+
assert projectCount == 1;
358+
}
359+
346360
}
347361

348362

src/main/java/com/clevergang/dbtests/repository/api/DataRepository.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ public interface DataRepository {
2828
*/
2929
Company findCompanyUsingSimpleStaticStatement(Integer pid);
3030

31-
32-
3331
// Departments
3432

3533
/**
@@ -147,4 +145,11 @@ RegisterEmployeeOutput callRegisterEmployee(String name, String surname, String
147145
* @return Return count of records in Project table
148146
*/
149147
Integer getProjectsCount();
148+
149+
/**
150+
* Removes project record from database based on primary key
151+
* @param pid Primary key of the project to be removed
152+
*/
153+
void removeProject(Integer pid);
154+
150155
}

src/main/java/com/clevergang/dbtests/repository/impl/ebean/EBeanDataRepositoryImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ public Company findCompanyUsingSimpleStaticStatement(Integer pid) {
7575
}
7676
}
7777

78+
@Override
79+
public void removeProject(Integer pid) {
80+
ebean.delete(ProjectEntity.class, pid);
81+
}
82+
7883
@Override
7984
public Department findDepartment(Integer pid) {
8085
DepartmentEntity departmentEntity = ebean.find(DepartmentEntity.class, pid);

src/main/java/com/clevergang/dbtests/repository/impl/jdbctemplate/JDBCDataRepositoryImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,15 @@ public Company findCompanyUsingSimpleStaticStatement(Integer pid) {
101101
return company;
102102
}
103103

104+
@Override
105+
public void removeProject(Integer pid) {
106+
MapSqlParameterSource params = new MapSqlParameterSource();
107+
params.addValue("pid", pid);
108+
109+
int update = jdbcTemplate.update("DELETE FROM project where pid = :pid", params);
110+
assert update == 1;
111+
}
112+
104113
@Override
105114
public Department findDepartment(Integer pid) {
106115
String query = "SELECT pid, company_pid, name" +

src/main/java/com/clevergang/dbtests/repository/impl/jdbi/JDBIDataRepositoryImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@ public Company findCompanyUsingSimpleStaticStatement(Integer pid) {
6969
}
7070
}
7171

72+
@Override
73+
public void removeProject(Integer pid) {
74+
try (Handle h = dbi.open()) {
75+
h.createStatement("DELETE FROM project WHERE pid = :pid")
76+
.bind("pid", pid)
77+
.execute();
78+
}
79+
}
80+
7281
@Override
7382
public Department findDepartment(Integer pid) {
7483
try (Handle h = dbi.open()) {

src/main/java/com/clevergang/dbtests/repository/impl/jooq/JooqDataRepositoryImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,13 @@ public Company findCompanyUsingSimpleStaticStatement(Integer pid) {
8989
return reference.get();
9090
}
9191

92+
@Override
93+
public void removeProject(Integer pid) {
94+
create.deleteFrom(PROJECT)
95+
.where(PROJECT.PID.eq(pid))
96+
.execute();
97+
}
98+
9299
@Override
93100
public Department findDepartment(Integer pid) {
94101
return create.

src/main/java/com/clevergang/dbtests/repository/impl/mybatis/DataRepositoryMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,6 @@ public interface DataRepositoryMapper {
4444
Employee findEmployee(Integer pid);
4545

4646
Project findProject(Integer pid);
47+
48+
void removeProject(Integer pid);
4749
}

src/main/java/com/clevergang/dbtests/repository/impl/mybatis/MyBatisDataRepositoryImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public Company findCompanyUsingSimpleStaticStatement(Integer pid) {
5050
return sql.findCompanyStatic(pid);
5151
}
5252

53+
@Override
54+
public void removeProject(Integer pid) {
55+
sql.removeProject(pid);
56+
}
57+
5358
@Override
5459
public Department findDepartment(Integer pid) {
5560
return sql.findDepartment(pid);

0 commit comments

Comments
 (0)