1. 程式人生 > >Hibernate 檢索方式詳細講解

Hibernate 檢索方式詳細講解

基礎知識回顧

 

 

 

 

第一種:物件圖導航檢索

package cn.com.query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	// 1、物件圖導航檢索
	/*
	 * 前提:多對一的關係,根據多找一,例如根據聯絡人找客戶,根據使用者找職位
	 */
	@Test
	public void demo() {
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		User u = session.get(User.class, "001");
        Kinds k=u.getKk(); 
        System.out.println(k.getKinds());
	}

}

第二種:OID檢索方式

package cn.com.query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
	
		//2.OID檢索方式
		/*
		 * OID檢索方式主要只用session的get()和load()方法載入某條記錄對應的物件
		 * 
		 */
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		User uu=session.get(User.class, "001");
		Kinds kk=session.load(Kinds.class, "前臺");
		System.out.println(uu.getName());
		System.out.println(kk.getKinds());
	}

}

 

第三種HQL查詢

第三種的第一個分支:HQL之基礎查詢

package cn.com.query;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Sys_User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
	
		//3.HQL檢索方式
		/*
		 * HQL檢索是面向物件的查詢語言,它與sql查詢語言有些相似,但它使用的是類、物件和屬性的概念,而沒有表和欄位的概念。
		 * 在hibernate提供的各種檢索方式中,HQL是官方推薦的查詢語言,也是使用最廣泛的一種檢索方式
		 */
		//3.1基本的檢索
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		//這裡的from Sys_User的Sys_User指的是類名稱不是表名
		Query query=session.createQuery("from Sys_User");
		List<Sys_User> ll=query.list();
		for (Sys_User s : ll) {
			System.out.println(s.getUser_name());
		}
		tx.commit();
	}

}

第三種的第二個分支排序檢索

package cn.com.query;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Sys_Role;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
		// HQL 排序檢索
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		Query query = session.createQuery("from Sys_Role order by role_id desc");
		List<Sys_Role> ll = query.list();
		for (Sys_Role s : ll) {
			System.out.println(s.getRole_name());
		}
		tx.commit();
	}

}

第三種的第三個分支條件檢索(按位置繫結引數和按名稱繫結引數)

package cn.com.query;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.com.dao.Sys_User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
		// 條件查詢-按照位置查詢
		/*Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		Query q = session.createQuery("from Sys_User where user_name=?");
		//注意是從0開始不是從1開始的
		q.setString(0, "小田");
		List<Sys_User> ll = q.list();
		for (Sys_User ss : ll) {
			System.out.println(ss.getUser_id());
		}
		tx.commit();*/
             //按名稱繫結引數
	    Session session=Hibernate_Utils.openSession();
	    Transaction tx=session.beginTransaction();
	    Query qq=session.createQuery("from Sys_User where user_name=:a");
	    qq.setString("a", "小何");
	    List<Sys_User> ll=qq.list();
	   System.out.println(ll.get(0).getUser_id());
	   tx.commit();
	}

}

 第三種的第四個分支分頁查詢

package cn.com.query;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
	//分頁查詢
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		Query query=session.createQuery("from User");
		//開始索引,最小的是0
		query.setFirstResult(1);
		//查詢的長度
		query.setMaxResults(3);
		List<User> lk=query.list();
		for (User user : lk) {
			System.out.println(user.getName());
		}
	}

}

第三種的第五個分支統計索引查詢

package cn.com.query;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
//統計索引查詢
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		Query q=session.createQuery("select count(*) from User");
		//對於查詢結果的只有一種,可以採取以下方法
		Long i=(Long) q.uniqueResult();
		System.out.println(i);
		tx.commit();
		session.close();
	}

}

第三種的第六個分支投影查詢

package cn.com.query;

import java.util.Arrays;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命運的信徒 date:2018/12/05 arm:完成CRM的客戶的條件查詢
	 */
	@Test
	public void demo() {
		// 投影檢索
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		// 1.投影一列檢索
		/*
		 * Query qq=session.createQuery("select name from User"); List<String>
		 * ll=qq.list(); for (String a : ll) { System.out.println(a); }
		 * tx.commit(); session.close();
		 */
		/*
		 * //2.投影多列檢索 Query qq=session.createQuery("select name,kk from User");
		 * //物件陣列,在集合裡面是這樣的([1,田],[2,江],[3,慢]); List<Object[]> ll=qq.list(); for
		 * (Object[] o : ll) { System.out.println(Arrays.toString(o)); }
		 * tx.commit();
		 */
		// 3.投影的構造方式的查詢
		//這種方法需要注意的是user表中有這個構造方法,不然會報錯
		Query qq = session
				.createQuery("select new User(number,name) from User");
		List<User> ll = qq.list();
		for (User u : ll) {
			System.out.println(u.getName() + u.getNumber());
		}
		tx.commit();
		session.close();
	}

}

QBC檢索方法

基礎知識瞭解

package cn.com.query;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo2 {
	@Test
	public void demo() {
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		// QBC檢索
		// 1.建立criteria物件
		Criteria cc = session.createCriteria(User.class);
		//設定查詢條件
		Criterion con = Restrictions.eq("name", "小田");
		//新增查詢條件
		cc.add(con);
		//執行查詢,返回查詢結果
		User uu = (User) cc.uniqueResult();

		System.out.println(uu.getNumber());
	}
}

 

OBC查詢之六種方法

package cn.com.query;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo2 {
	@Test
	public void demo() {
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		// QBC檢索
		/*
		 * // 1.建立criteria物件 Criteria cc = session.createCriteria(User.class);
		 * //設定查詢條件 Criterion con = Restrictions.eq("name", "小田"); //新增查詢條件
		 * cc.add(con); //執行查詢,返回查詢結果 User uu = (User) cc.uniqueResult();
		 * System.out.println(uu.getNumber());
		 */
		// 1.OBC查詢之基礎檢索
		// 建立criteria物件
		/*
		 * Criteria cr=session.createCriteria(User.class); List<User>
		 * list=cr.list(); for (User user : list) { System.out.println(user); }
		 */
		// 2.條件檢索
		/*
		 * Criteria criteria=session.createCriteria(User.class); Criterion
		 * cc=Restrictions.like("name", "%小%"); criteria.add(cc); List<User>
		 * list=criteria.list(); for (User user : list) {
		 * System.out.println(user.getName()); }
		 */
		// 3.分頁檢索
		/*
		 * Criteria criteria=session.createCriteria(User.class);
		 * criteria.setFirstResult(0); criteria.setMaxResults(3); List<User>
		 * ll=criteria.list(); for (User user : ll) {
		 * System.out.println(user.getName()); }
		 */
		// 4.排序檢索
		/*Criteria criteria = session.createCriteria(User.class);
		// 排序程式碼
		criteria.addOrder(Order.asc("number"));
		List<User> ll = criteria.list();
		for (User user : ll) {
			System.out.println(user.getName());
		}*/
		//5.統計檢索
		/*Criteria criteria = session.createCriteria(User.class);
		criteria.setProjection(Projections.rowCount());
		long ll=(long) criteria.uniqueResult();
		System.out.println(ll);*/
		
		tx.commit();
		session.close();
	}
}

 

 

 

 本地SQL檢索方法

package cn.com.query;

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo3 {
/*author:命運的信徒
 * date:2018/12/5
 * arm:本地SQL檢索方法
 */
	@Test
	public void demo(){
	Session session=Hibernate_Utils.openSession();
	Transaction tx=session.beginTransaction();
	//最底層SQL底層,user是表名不是類名
	SQLQuery qq=session.createSQLQuery("select name from user");
	List<String> ll=qq.list();
	for (String user : ll) {
		System.out.println(user);
	}
	tx.commit();
	}
}