HQL(Hibernate Query Language)
面向對象的查詢語言,與sql不同,hql中的對象名是區分大小寫的(除了java和屬性其它部分不區分大小寫);hql中查的是對象而不是表,並且支持多態;hql主要通過Query來操作。
使用步驟:
1獲取session對象
2.編寫HQL語句
3.創建Query對象
4.執行查詢,得到查詢結果
package cn.text.java.cn.happy.test;
import cn.happy.entity.Dept;
import cn.happy.entity.Dog;
import cn.hql.entity.demp;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import java.util.List;
/**
* Created by Happy on 2017-09-18.
* 勿忘國恥 為中華之崛起而讀書
*/
public class Test20170920 {
@Test
public void testdel(){
//Configuration
Configuration cfg=new Configuration().configure();//1
//session對象
SessionFactory factory=cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Transaction tx = session.beginTransaction();//4
Dog dog=new Dog();
dog.setDogid(2);
session.delete(dog);
tx.commit();//5
System.out.println("deleate ok!");
session.close();
}
@Test
public void loadtext() {
Configuration cfg = new Configuration().configure();//1
//session對象
SessionFactory factory = cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Transaction tx = session.beginTransaction();//4
String hql = "from demp";
Query query = session.createQuery(hql);
List<demp> list = query.list();
for (demp depts : list) {
System.out.println(depts.getDempname());
}
}
//02.案例:我想檢索 名稱為"開發部" 部門集合
@Test
public void selectSomeRecordsFromTable(){
//你找方案
Configuration cfg = new Configuration().configure();//1
//session對象
SessionFactory factory = cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Transaction tx = session.beginTransaction();//4
String hql="from demp demp where demp.dempname='財務部'";
Query query = session.createQuery(hql);
List<demp> list = query.list();
for (demp dept:list){
System.out.println(dept.getDempname());
}
}
//02.案例:參數查詢 :方案一:?匿名占位符
@Test
public void selectByConditionNiming(){
Configuration cfg = new Configuration().configure();//1
//session對象
SessionFactory factory = cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Transaction tx = session.beginTransaction();//4
String hql="from demp where dempname=?";//為?號賦值
Query query = session.createQuery(hql); //q.setString(0,name);//下標從0開始,對應設置“?”的參數
query.setParameter(0,"45");
List<demp> list = query.list();
for (demp dept1:list){
System.out.println(dept1.getDempname());
}
}
//02.案例:參數查詢 :方案二::name 參數名稱綁定
// 使用“:起個名字” 表示未知量,然后是對這個“起個名字賦值”
@Test
public void selectByConditionParametername(){
Configuration cfg = new Configuration().configure();//1
//session對象
SessionFactory factory = cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Transaction tx = session.beginTransaction();//4
String hql="from demp where dempname=:dempname";
Query query = session.createQuery(hql);
query.setParameter("dempname","2");
List<demp> list = query.list();
for (demp depts:list){
System.out.println(depts.getDempname());
}
}
//02.案例:參數查詢 :方案三::name 參數名稱綁定++++對象屬性
@Test
public void selectByConditionParameternameAndObjectAttribute(){
Configuration cfg = new Configuration().configure();//1
//session對象
SessionFactory factory = cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Transaction tx = session.beginTransaction();//4
String hql="from demp where dempname=:dempname";
demp dd=new demp();
dd.setDempname("開發部");
Query query = session.createQuery(hql);
query.setProperties(dd);
List<demp> list = query.list();
for (demp dept2:list){
System.out.println(dept2.getDempname());
}
}
}