SSH之Hibernate學習 查詢

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的使用與其類似

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章