Hibernate 檢索方式詳細講解
阿新 • • 發佈:2018-12-09
基礎知識回顧
第一種:物件圖導航檢索
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();
}
}