|
@@ -14,6 +14,7 @@ import db.annotation.DbField;
|
|
|
import db.annotation.DbId;
|
|
|
import db.annotation.DbLink;
|
|
|
import db.annotation.DbTable;
|
|
|
+import db.mapper.DbMapper;
|
|
|
|
|
|
public abstract class Table<T extends Persistable> {
|
|
|
|
|
@@ -174,38 +175,7 @@ public abstract class Table<T extends Persistable> {
|
|
|
String sql = "Select * From " + dbTable.name() + " Where " + idField + " = ?";
|
|
|
List<Object> params = new ArrayList<>();
|
|
|
params.add(id);
|
|
|
- Optional<T> result = Database.query(sql, params, rs -> {
|
|
|
- try {
|
|
|
- T obj = (T) dbTable.entity().getConstructor().newInstance();
|
|
|
- rs.next();
|
|
|
- for(Field field : dbTable.entity().getFields()) {
|
|
|
- if(!field.isAnnotationPresent(DbField.class)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // Recup valeur dans le resultat
|
|
|
- Object value = rs.getObject(field.getAnnotation(DbField.class).value());
|
|
|
- // Si lien avec une autre entité
|
|
|
- if(value != null && field.isAnnotationPresent(DbLink.class)) {
|
|
|
- checkIfPersistable(field);
|
|
|
- Long otherId = (Long) value;
|
|
|
- if(otherId == 0) {
|
|
|
- value = null;
|
|
|
- } else {
|
|
|
- String[] split = field.getType().getName().split("\\.");
|
|
|
- String className = split[split.length - 1];
|
|
|
- // Chargement de la class Table qui gère l'entité
|
|
|
- Class<?> clazz = Class.forName(field.getAnnotation(DbLink.class).value() + "." + className + "Table");
|
|
|
- Table table = (Table) clazz.getMethod("getInstance").invoke(null);
|
|
|
- value = table.getById(otherId);
|
|
|
- }
|
|
|
- }
|
|
|
- field.set(obj, value);
|
|
|
- }
|
|
|
- return obj;
|
|
|
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | SQLException | ClassNotFoundException e) {
|
|
|
- throw new IllegalStateException("Unable to map value to the entity");
|
|
|
- }
|
|
|
- });
|
|
|
+ Optional<T> result = Database.query(sql, params, DbMapper.objectMapper(dbTable));
|
|
|
// Return
|
|
|
return result;
|
|
|
}
|
|
@@ -216,41 +186,7 @@ public abstract class Table<T extends Persistable> {
|
|
|
String sql = "Select * From " + dbTable.name() + " Where " + fieldname + " = ?";
|
|
|
List<Object> params = new ArrayList<>();
|
|
|
params.add(value);
|
|
|
- Optional<List<T>> result = Database.query(sql, params, rs -> {
|
|
|
- try {
|
|
|
- List<T> list = new ArrayList<>();
|
|
|
- while(rs.next()) {
|
|
|
- T obj = (T) dbTable.entity().getConstructor().newInstance();
|
|
|
- for(Field field : dbTable.entity().getFields()) {
|
|
|
- if(!field.isAnnotationPresent(DbField.class)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // Recup valeur dans le resultat
|
|
|
- Object val = rs.getObject(field.getAnnotation(DbField.class).value());
|
|
|
- // Si lien avec une autre entité
|
|
|
- if(val != null && field.isAnnotationPresent(DbLink.class)) {
|
|
|
- checkIfPersistable(field);
|
|
|
- Long otherId = (Long) val;
|
|
|
- if(otherId == 0) {
|
|
|
- val = null;
|
|
|
- } else {
|
|
|
- String[] split = field.getType().getName().split("\\.");
|
|
|
- String className = split[split.length - 1];
|
|
|
- // Chargement de la class Table qui gère l'entité
|
|
|
- Class<?> clazz = Class.forName(field.getAnnotation(DbLink.class).value() + "." + className + "Table");
|
|
|
- Table table = (Table) clazz.getMethod("getInstance").invoke(null);
|
|
|
- val = table.getById(otherId);
|
|
|
- }
|
|
|
- }
|
|
|
- field.set(obj, val);
|
|
|
- }
|
|
|
- list.add(obj);
|
|
|
- }
|
|
|
- return list;
|
|
|
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | SQLException | ClassNotFoundException e) {
|
|
|
- throw new IllegalStateException("Unable to map value to the entity");
|
|
|
- }
|
|
|
- });
|
|
|
+ Optional<List<T>> result = Database.query(sql, params, DbMapper.listMapper(dbTable));
|
|
|
// Return
|
|
|
if(result.isPresent()) {
|
|
|
return result.get();
|
|
@@ -265,41 +201,7 @@ public abstract class Table<T extends Persistable> {
|
|
|
sql.append("Select * From " + dbTable.name() + "Where 1=1");
|
|
|
where.forEach(elt -> sql.append(" And " + elt + " = ?"));
|
|
|
// Execution requete
|
|
|
- Optional<List<T>> result = Database.query(sql.toString(), params, rs -> {
|
|
|
- try {
|
|
|
- List<T> list = new ArrayList<>();
|
|
|
- while(rs.next()) {
|
|
|
- T obj = (T) dbTable.entity().getConstructor().newInstance();
|
|
|
- for(Field field : dbTable.entity().getFields()) {
|
|
|
- if(!field.isAnnotationPresent(DbField.class)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // Recup valeur dans le resultat
|
|
|
- Object value = rs.getObject(field.getAnnotation(DbField.class).value());
|
|
|
- // Si lien avec une autre entité
|
|
|
- if(value != null && field.isAnnotationPresent(DbLink.class)) {
|
|
|
- checkIfPersistable(field);
|
|
|
- Long otherId = (Long) value;
|
|
|
- if(otherId == 0) {
|
|
|
- value = null;
|
|
|
- } else {
|
|
|
- String[] split = field.getType().getName().split("\\.");
|
|
|
- String className = split[split.length - 1];
|
|
|
- // Chargement de la class Table qui gère l'entité
|
|
|
- Class<?> clazz = Class.forName(field.getAnnotation(DbLink.class).value() + "." + className + "Table");
|
|
|
- Table table = (Table) clazz.getMethod("getInstance").invoke(null);
|
|
|
- value = table.getById(otherId);
|
|
|
- }
|
|
|
- }
|
|
|
- field.set(obj, value);
|
|
|
- }
|
|
|
- list.add(obj);
|
|
|
- }
|
|
|
- return list;
|
|
|
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | SQLException | ClassNotFoundException e) {
|
|
|
- throw new IllegalStateException("Unable to map value to the entity");
|
|
|
- }
|
|
|
- });
|
|
|
+ Optional<List<T>> result = Database.query(sql.toString(), params, DbMapper.listMapper(dbTable));
|
|
|
// Return
|
|
|
if(result.isPresent()) {
|
|
|
return result.get();
|
|
@@ -311,41 +213,7 @@ public abstract class Table<T extends Persistable> {
|
|
|
DbTable dbTable = getDbTableAnnotation();
|
|
|
// Requete sql
|
|
|
String sql = "Select * From " + dbTable.name();
|
|
|
- Optional<List<T>> result = Database.query(sql, rs -> {
|
|
|
- try {
|
|
|
- List<T> list = new ArrayList<>();
|
|
|
- while(rs.next()) {
|
|
|
- T obj = (T) dbTable.entity().getConstructor().newInstance();
|
|
|
- for(Field field : dbTable.entity().getFields()) {
|
|
|
- if(!field.isAnnotationPresent(DbField.class)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // Recup valeur dans le resultat
|
|
|
- Object value = rs.getObject(field.getAnnotation(DbField.class).value());
|
|
|
- // Si lien avec une autre entité
|
|
|
- if(value != null && field.isAnnotationPresent(DbLink.class)) {
|
|
|
- checkIfPersistable(field);
|
|
|
- Long otherId = (Long) value;
|
|
|
- if(otherId == 0) {
|
|
|
- value = null;
|
|
|
- } else {
|
|
|
- String[] split = field.getType().getName().split("\\.");
|
|
|
- String className = split[split.length - 1];
|
|
|
- // Chargement de la class Table qui gère l'entité
|
|
|
- Class<?> clazz = Class.forName(field.getAnnotation(DbLink.class).value() + "." + className + "Table");
|
|
|
- Table table = (Table) clazz.getMethod("getInstance").invoke(null);
|
|
|
- value = table.getById(otherId);
|
|
|
- }
|
|
|
- }
|
|
|
- field.set(obj, value);
|
|
|
- }
|
|
|
- list.add(obj);
|
|
|
- }
|
|
|
- return list;
|
|
|
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | SQLException | ClassNotFoundException e) {
|
|
|
- throw new IllegalStateException("Unable to map value to the entity");
|
|
|
- }
|
|
|
- });
|
|
|
+ Optional<List<T>> result = Database.query(sql, DbMapper.listMapper(dbTable));
|
|
|
// Return
|
|
|
if(result.isPresent()) {
|
|
|
return result.get();
|