[英]Java class - how to pass Generic Object to a function
這是我的基本功能:
public static void main(String[] a) throws Exception {
Session sessione = HibernateUtil.getSessionFactory().openSession();
Query query = sessione.createSQLQuery("select * from User").addEntity(User.class);
List<User> rows = query.list();
Iterator it = rows.iterator();
while (it.hasNext()) {
User usr = (User) it.next();
System.out.println(usr.getEmail());
System.out.println(usr.getName());
System.out.println(usr.getIdUser());
System.out.println(usr.getUser());
}
此功能能夠連接並在我的數據庫上執行查詢...
我想創建相同的函數,但更通用...前一個只針對一個表( User
),新的必須能夠接受查詢的String
參數作為輸入,以及查詢將在哪個類類型被執行。 這將允許我只使用一行來執行查詢。
它應該是這樣的:
public static void queryResult(String query, <ClassOfTable>) {
Session sessione = HibernateUtil.getSessionFactory().openSession();
Query qy = sessione.createSQLQuery(query).addEntity(<ClassOfTable>.class);
List<<ClassOfTable>> rows = qy.list();
Iterator it = rows.iterator();
while (it.hasNext()) {
<ClassOfTable> obj = (<ClassOfTable>) it.next();
}
}
在哪里找到ClassOfTable
我不知道如何“概括”代碼......
我希望已經明確了......
PS ClassOfTable
應該是DB( Hibernate
)中表的類代表。
謝謝。
public static <T> void queryResult(String query, Class<? extends T> clazz) {
Session session = HibernateUtil.getSessionFactory().openSession();
Query q = session.createSQLQuery(query).addEntity(clazz);
List rows = q.list();
Iterator it = rows.iterator();
while (it.hasNext()) {
T t = (T) it.next();
// do your work on object t
}
}
如果您打算返回結果集,請使用:
public static <T> List<T> queryResult(String query, Class<? extends T> clazz) {
Session session = HibernateUtil.getSessionFactory().openSession();
Query q = session.createSQLQuery(query).addEntity(clazz);
List<T> rows = (List<T>) q.list();
return Collections.unmodifiableList(rows);
}
// now call generic method
List<User> users = queryResult("select * from User", User.class);
users.forEach(usr -> {
System.out.println(usr.getEmail());
System.out.println(usr.getName());
System.out.println(usr.getIdUser());
System.out.println(usr.getUser());
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.