作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!