gpt4 book ai didi

java - 有什么方法可以将 sql2o 的结果集映射为泛型吗?

转载 作者:行者123 更新时间:2023-11-30 02:55:40 24 4
gpt4 key购买 nike

我正在使用 sql2o 库编写数据库客户端。我的项目中有很多数据访问对象,因此我应该有很多类似的函数来访问表。例如,对于 Persons 类。

public List<Persons> getPersonsData(){
String sql = "SELECT * FROM " + PERSONS;
try(org.sql2o.Connection con = sql2o.open()) {
return con.createQuery(sql).executeAndFetch(Persons.class);
}
}

有什么办法可以优化吗?我正在考虑使用泛型,但据我所知,没有办法获取泛型类的实例。难道真的不可能创造出这样的东西吗?

public class Getter<T> {
public List<T> getGenericClass(){
String sql = "SELECT * FROM " + T.tableName;
try(org.sql2o.Connection con = sql2o.open()) {
return con.createQuery(sql).executeAndFetch(T.class);
}
}
}

最佳答案

我们设法创建了一个 Store

 public class Store<T> {
private T value;

public void set(T object){
value = object;
}

public T get(){
return value;
}
}

并修改您的 GenericClass

public class GenericClass{
public <T> void storeGenericClass(Store<T> store, Class<T> clazz){
String sql = "SELECT field1, field2 FROM MYTABLE WHERE ID = 1";
try(org.sql2o.Connection con = sql2o.open()) {
store.set(con.createQuery(sql).executeAndFetchFirst(clazz));
}
}

public <T> void storeGenericClass(List<T> store, Class<T> clazz){
String sql = "SELECT field1, field2 FROM " +
clazz.getName().toUpperCase();
try(org.sql2o.Connection con = sql2o.open()) {
store.addAll(con.createQuery(sql).executeAndFetch(clazz));
}
}

}

使用与表名相同的类名不是最佳实践。但是如果你用一个表来映射每个类,你可以这样做

  public class GenericClass{
...
public <T> void storeGenericClass(List<T> store, Class<T> clazz){
String sql = "SELECT field1, field2 FROM " +
clazz.getName().toUpperCase();
try(org.sql2o.Connection con = sql2o.open()) {
store.addAll(con.createQuery(sql).executeAndFetch(clazz));
}
}
...
}

实例化:

public class MyClass {

public String field1, field2;
}


...
GenericClass generic= new GenericClass(sql2o);
Store<MyClass> store = new Store<>();
generic.storeGenericClass(store, MyClass.class);
MyClass retrieved = store.get();
System.out.println("My Class fields are: "+retrieved.field1 + "-"+retrieved.field2);
...

关于java - 有什么方法可以将 sql2o 的结果集映射为泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com