SSH數據庫操作之查詢
該種方式可以直接使用參數進行獲取,可實現模糊查詢
public static List<Books> getListByName(String name){
Session session=getSession();
//編寫HQL語句
String sql="from Books as book where book.name like'%"+name+"%'";//模糊查詢 可以直接使用name='"+name+"'"
Query query=session.createQuery(sql);
//執行query接口,來獲取數據
List<Books> books=query.list();
session.close();
return books;
}
與上面類似,下面這種也可以實現模糊查詢:
public static List<Books> getOtherBook(String name){
//獲取session對象
Session session=getSession();
//編寫sql語句,採用的是命名參數的方式
String sql="from Books as book where book.name like :name";
//創建query接口
Query query=session.createQuery(sql);
//給命名參數賦值
query.setString("name", "%"+name+"%");
List<Books> books=query.list();
session.close();
return books;
}
在Java的JDBC中,我們曾經學到可以使用?來作爲佔位符,在這裏,依然可以使用:
public static List<Books> getList(String name,int id){
//佔位符的使用
Session session=getSession();
//編寫HQL語句
String sql="from Books as book where book.name = ?0 and book.id = ?1";
Query query=session.createQuery(sql);
//給query裏的佔位符賦值,是從索引0開始
query.setString(0, name);
query.setInteger(1, id);
//執行query接口,來獲取數據
List<Books> books=query.list();
session.close();
return books;
}
如何實現獲取單條數據呢,可以使用 setMaxResults這個方法,設置取回的數據的條數
public static Books getBook(){
Session session=getSession();
//編寫HQL查詢語句
String sql="from Books";
//創建一個Query接口
Query query=session.createQuery(sql);
query.setMaxResults(1);
Books book=(Books) query.uniqueResult();//將得到的數據並轉化爲實體對象
return book;
}
根據這個方法,我們還可以實現分頁查詢:
public static List<Books> getList(int pageindex,int pagesize){
Session session=getSession();
//編寫HQL查詢語句
String sql="from Books";
//創建一個Query接口
Query query=session.createQuery(sql);
//實現的分頁,對於HQL的分頁(每頁的數據大小,起始數據)
//分頁計算
int startindex=(pageindex-1)*pagesize;
//設置每頁最大數據
query.setMaxResults(pagesize);
//設置起始數據
query.setFirstResult(startindex);
//執行query接口,來獲取數據
List<Books> books=query.list();
session.close();
return books;
}
聚合函數的使用 count
獲取數據總數
public static int getCount(){
//獲取session對象
Session session=getSession();
String sql="Select count(*) from Books";
//創建query接口
Query query=session.createQuery(sql);
//
int count=(int) query.uniqueResult();
return count;
}
在運行時報錯:count返回的時long類型
in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
此爲類型轉換錯誤,可以將其修改爲封裝方式,或者返回long類型也可以
public static int getCount(){
//獲取session對象
Session session=getSession();
String sql="Select count(*) from Books";
//創建query接口
Query query=session.createQuery(sql);
//
int count=Integer.valueOf(query.uniqueResult().toString());
return count;
}
修改後執行了查詢結果:
Hibernate: select count(*) as col_0_0_ from books books0_
數據總數:10
其餘的像max,min,distinct的使用與其類似