1. 程式人生 > >Hibernate相關API查詢操作

Hibernate相關API查詢操作

Query物件:

1、使用query物件,不需要寫sql(Structured Query Language)語句,但是要寫hql(Hibernate Query Language)語句

 sql和hql的區別:

  使用sql語句操作的是資料庫中的表和表字段

  使用hql語句操作的是實體類和實體類中的屬性

2、使用hql語句查詢所有

 from 實體類名稱

3、Query物件的使用

//測試Query物件查詢
	@Test
	public void testQuery(){
		//建立sessionFactory物件,用於關閉連結,防止測試時記憶體溢位
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		
		try{
			sessionFactory = HibernateUtils.getSessionFactory();
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			
			//hql語句查詢t_user表中的所有內容
			Query query = session.createQuery("from User");
			//用一個List物件來儲存表中的所有記錄
			List<User> list = query.list();
			//遍歷list
			for(User u:list){
				System.out.println(u.toString());
			}
			
			tx.commit();
		}
		catch(Exception e){
			tx.rollback();
		}
		finally{
			sessionFactory.close();
		}
	}

控制檯列印:

Criteria物件:

Criteria物件也可以用來查詢結果,與Query物件不同的是,建立criteria物件時,session.createCriteria()方法中傳入的直接是實體類物件的class,不再是hql語句

Criteria criteria = session.createCriteria(User.class);

SQLQuery物件:

可以呼叫底層sql語句

SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");

如果直接用List接收sqlQuery.list()的話,list中每部分儲存的並不是單個的User物件,而是一個儲存了User資訊的陣列

所以需要呼叫sqlQuery.addEntity(User.class)方法

然後用List接收,此時list中存放的就是單個的User物件

//測試SQLQuery物件查詢
		@Test
		public void testSQLQuery(){
			//建立sessionFactory物件,用於關閉連結,防止測試時記憶體溢位
			SessionFactory sessionFactory = null;
			Session session = null;
			Transaction tx = null;
			
			try{
				sessionFactory = HibernateUtils.getSessionFactory();
				session = HibernateUtils.getSession();
				tx = session.beginTransaction();
				
			SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
			
//			List<Object[]> list = sqlQuery.list();
//			
//			for(Object[] u:list){
//				System.out.println(Arrays.toString(u));
//			}
			
			sqlQuery.addEntity(User.class);
			List<User> list = sqlQuery.list();
			for(User u :list){
				System.out.println(u.toString());
			}
				
				tx.commit();
			}
			catch(Exception e){
				tx.rollback();
			}
			finally{
				sessionFactory.close();
			}
		}