Skip to content
This repository was archived by the owner on Jun 11, 2022. It is now read-only.

Commit 2d7c42c

Browse files
committed
Update sql script, refactor code
1 parent f39cb32 commit 2d7c42c

16 files changed

+1480
-1676
lines changed

sakila-min.sql

+1,216-1,221
Large diffs are not rendered by default.

server/src/main/java/com/balinski/api_project/Main.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.balinski.api_project;
22

3-
import com.balinski.api_project.database.DaoManager;
3+
import com.balinski.api_project.database.dao.DaoManager;
44

55
import com.balinski.api_project.database.dao.DaoException;
66
import com.balinski.api_project.database.model.Film;
Original file line numberDiff line numberDiff line change
@@ -1,118 +1,29 @@
11
package com.balinski.api_project.database.dao;
22

33

4-
import com.balinski.api_project.database.DaoManager;
5-
import com.balinski.api_project.database.model.Actor;
4+
import com.balinski.api_project.database.model.DatabaseModel;
65

7-
import java.sql.Timestamp;
86
import java.util.*;
97

108
public class ActorDao extends Dao {
119
public ActorDao(DaoManager manager, boolean transaction) {
12-
super(manager, transaction);
10+
super(manager, ModelType.ACTOR, transaction);
1311
}
1412

15-
public Actor getById(int id) {
13+
public List<? super DatabaseModel> getByFirstName(String firstName) {
1614
List<Map<String, Object>> result = manager.queryGetData(
17-
"SELECT * FROM ACTOR A WHERE A.ACTOR_ID = " + id + ";"
15+
String.format("SELECT * FROM ACTOR A WHERE lower(A.FIRST_NAME) = '%s';", firstName.toLowerCase())
1816
);
1917

20-
return result.size() > 0 ? toListOfActors(result).get(0) : null;
18+
return toListOfObjects(result);
2119
}
2220

23-
public List<Actor> getByFirstName(String firstName) {
21+
public List<? super DatabaseModel> getByLastName(String lastName) {
2422
List<Map<String, Object>> result = manager.queryGetData(
25-
"SELECT * FROM ACTOR A WHERE lower(A.FIRST_NAME) = '" + firstName.toLowerCase() + "';"
23+
String.format("SELECT * FROM ACTOR A WHERE lower(A.LAST_NAME) = '%s';", lastName.toLowerCase())
2624
);
2725

28-
return toListOfActors(result);
29-
}
30-
31-
public List<Actor> getByLastName(String lastName) {
32-
List<Map<String, Object>> result = manager.queryGetData(
33-
"SELECT * FROM ACTOR A WHERE lower(A.LAST_NAME) = '" + lastName.toLowerCase() + "';"
34-
);
35-
36-
return toListOfActors(result);
37-
}
38-
39-
@Override
40-
public Integer getCount() {
41-
List<Map<String, Object>> result = manager.queryGetData(
42-
"SELECT COUNT(*) AS COUNT FROM ACTOR;"
43-
);
44-
45-
return ((Long)result.get(0).get("COUNT")).intValue();
46-
}
47-
48-
@Override
49-
public List<Actor> getAll() {
50-
List<Map<String, Object>> result = manager.queryGetData(
51-
"SELECT * FROM ACTOR;"
52-
);
53-
54-
return toListOfActors(result);
55-
}
56-
57-
@Override
58-
public List<Actor> getIdBetween(int start, int stop) {
59-
List<Map<String, Object>> result = manager.queryGetData(
60-
"SELECT * FROM ACTOR A WHERE A.ACTOR_ID BETWEEN " + start + " AND " + stop + ";"
61-
);
62-
63-
return toListOfActors(result);
64-
}
65-
66-
@Override
67-
public int add(Object obj) {
68-
if(!(obj instanceof Actor))
69-
return 0;
70-
71-
Actor actor = (Actor) obj;
72-
73-
String sql = String.format("INSERT INTO ACTOR VALUES (%d, '%s', '%s', TIMESTAMP '%s');",
74-
actor.getId(), actor.getFirstName(), actor.getLastName(), actor.getLastUpdate().format(toDateTime));
75-
76-
int rowsAdded = manager.queryModify(sql, transaction);
77-
count += rowsAdded;
78-
79-
return rowsAdded;
80-
}
81-
82-
@Override
83-
public int addAll(List<Object> list) {
84-
if(list == null || list.size() == 0)
85-
return 0;
86-
87-
StringBuilder sql = new StringBuilder("INSERT INTO ACTOR VALUES ");
88-
89-
for(Object obj : list) {
90-
Actor actor = (Actor) obj;
91-
92-
sql.append(String.format("(%d, '%s', '%s', TIMESTAMP '%s'), ",
93-
actor.getId(), actor.getFirstName(), actor.getLastName(), actor.getLastUpdate().format(toDateTime)));
94-
}
95-
96-
sql.replace(sql.lastIndexOf(", "), sql.length(), ";");
97-
98-
int rowsAdded = manager.queryModify(sql.toString(), transaction);
99-
count += rowsAdded;
100-
101-
return rowsAdded;
102-
}
103-
104-
public List<Actor> toListOfActors(List<Map<String, Object>> listOfMaps) {
105-
if(listOfMaps == null)
106-
return null;
107-
108-
List<Actor> listOfActors = new ArrayList<>(listOfMaps.size());
109-
110-
for(var actor : listOfMaps) {
111-
listOfActors.add(new Actor((int)actor.get("ACTOR_ID"), (String)actor.get("FIRST_NAME"),
112-
(String)actor.get("LAST_NAME"), ((Timestamp)actor.get("LAST_UPDATE")).toLocalDateTime()));
113-
}
114-
115-
return listOfActors;
26+
return toListOfObjects(result);
11627
}
11728

11829
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,94 @@
11
package com.balinski.api_project.database.dao;
22

3-
import com.balinski.api_project.database.DaoManager;
3+
import com.balinski.api_project.database.model.*;
44

55
import java.time.format.DateTimeFormatter;
6+
import java.util.ArrayList;
67
import java.util.List;
8+
import java.util.Map;
79

810
abstract class Dao {
911
protected DaoManager manager;
1012
protected boolean transaction;
11-
protected static Integer count;
13+
protected ModelType type;
1214
protected static final DateTimeFormatter toDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
1315

14-
protected Dao(DaoManager manager, boolean transaction) {
16+
protected Dao(DaoManager manager, ModelType type, boolean transaction) {
1517
this.manager = manager;
18+
this.type = type;
1619
this.transaction = transaction;
17-
if(count == null)
18-
count = getCount();
1920
}
2021

21-
public abstract Integer getCount();
22-
public abstract List<?> getAll();
23-
public abstract List<?> getIdBetween(int start, int stop);
24-
public abstract int add(Object obj);
25-
public abstract int addAll(List<Object> list);
22+
public int getCount() {
23+
List<Map<String, Object>> result = manager.queryGetData(
24+
String.format("SELECT COUNT(*) AS COUNT FROM %s;", type.toString())
25+
);
26+
27+
return ((Long)result.get(0).get("COUNT")).intValue();
28+
}
29+
30+
public Object getById(int id) {
31+
List<Map<String, Object>> result = manager.queryGetData(
32+
String.format("SELECT * FROM %s T WHERE T.%s_ID = %d;", type.toString(), type.toString(), id)
33+
);
34+
35+
return result.size() > 0 ? toListOfObjects(result).get(0) : null;
36+
}
37+
38+
public List<? super DatabaseModel> getAll() {
39+
List<Map<String, Object>> result = manager.queryGetData(
40+
String.format("SELECT * FROM %s;", type.toString())
41+
);
42+
43+
return toListOfObjects(result);
44+
}
45+
46+
public List<? super DatabaseModel> getIdBetween(int start, int stop) {
47+
List<Map<String, Object>> result = manager.queryGetData(
48+
String.format("SELECT * FROM %s T WHERE T.%s_ID BETWEEN %d AND %d;",
49+
type.toString(), type.toString(), start, stop)
50+
);
51+
52+
return toListOfObjects(result);
53+
}
54+
55+
public int add(Object obj) {
56+
if(!(obj instanceof DatabaseModel))
57+
return 0;
58+
59+
DatabaseModel model = (DatabaseModel) obj;
60+
61+
String sql = String.format("INSERT INTO %s VALUES %s;", type.toString(), model.asTuple());
62+
63+
return manager.queryModify(sql, transaction);
64+
}
65+
66+
public int addAll(List<? super DatabaseModel> list) {
67+
if(list == null || list.size() == 0)
68+
return 0;
69+
70+
StringBuilder sql = new StringBuilder(String.format("INSERT INTO %s VALUES ", type.toString()));
71+
72+
for(Object obj : list) {
73+
DatabaseModel model = (DatabaseModel) obj;
74+
75+
sql.append(String.format("%s, ", model.asTuple()));
76+
}
77+
78+
sql.replace(sql.lastIndexOf(", "), sql.length(), ";");
79+
80+
return manager.queryModify(sql.toString(), transaction);
81+
}
82+
83+
protected List<? super DatabaseModel> toListOfObjects(List<Map<String, Object>> listOfMaps) {
84+
if(listOfMaps == null)
85+
return null;
86+
87+
List<? super DatabaseModel> listOfObjects = new ArrayList<>(listOfMaps.size());
88+
89+
for(var map : listOfMaps)
90+
listOfObjects.add(ModelFactory.getModel(type, map));
91+
92+
return listOfObjects;
93+
}
2694
}

server/src/main/java/com/balinski/api_project/database/DaoManager.java renamed to server/src/main/java/com/balinski/api_project/database/dao/DaoManager.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.balinski.api_project.database;
1+
package com.balinski.api_project.database.dao;
22

3-
import com.balinski.api_project.database.dao.*;
3+
import com.balinski.api_project.database.DataSourceWrapper;
44
import com.balinski.api_project.util.FilePropertiesLoader;
55
import com.balinski.api_project.util.SqlExceptionPrinter;
66

0 commit comments

Comments
 (0)