1. 程式人生 > >hibernate11--Criteria查詢

hibernate11--Criteria查詢

研發 intval 技術分享 mps ret system property too class

技術分享
public class EmpTest {
    Session session =null;
    Transaction transaction=null;
    
    @Before
    public  void  before(){
         session = HibernateSessionUtil.getCurrentSession();
         transaction= session.beginTransaction();
    }
    
    
    /**
     * Criteria 查詢接口:完全是面向對象的思想來 操作數據庫!
     * 看不到sql看不到hql!
     * 01.查詢所有的部門信息
     
*/ @Test public void test01(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept"); List<Dept>list = criteria.list(); for (Dept dept : list) { System.out.println(dept); } } /** * 02.查詢指定的部門信息 eq(屬性名,屬性值) * Restrictions:給我們的查詢增加條件 * 001.Restrictions中的方法都是靜態的 * 002.方法的返回是都是 Criterion或者其實現類
*/ @Test public void test02(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept"); criteria.add(Restrictions.eq("deptName", "研發部")); //給查詢增加條件 Dept dept = (Dept) criteria.uniqueResult(); System.out.println(dept); } /** * 03.查詢員工薪水大於10k的 gt(屬性名,屬性值)
*/ @Test public void test03(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.gt("salary", 10000d)); //給查詢增加條件 List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 04.查詢員工薪水大於5k的 小於100k bw(屬性名,屬性值1,屬性值2) */ @Test public void test04(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.between("salary", 5000d, 100000d)); //給查詢增加條件 List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 05.查詢沒有部門的員工 dept是我們Emp類中的一個域屬性 對象為null 使用 isNull */ @Test public void test05(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.isNull("dept")); //給查詢增加條件 List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 06.查詢沒有員工的 部門 emps是我們Dept類中的一個集合 集合的size=0 使用 isEmpty */ @Test public void test06(){ Criteria criteria=session.createCriteria(Dept.class); criteria.add(Restrictions.isEmpty("emps")); //給查詢增加條件 List<Dept> list = criteria.list(); for (Dept dept : list) { System.out.println(dept); } } /** * 07.查詢 員工姓名是 員工1 或者 員工2的信息 * 兩種情況 使用or */ @Test public void test07(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件 criteria.add(Restrictions.or (Restrictions.eq("empName", "員工1"), Restrictions.eq("empName", "員工2"))); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 08.查詢 員工姓名是 員工1 或者 員工2的信息 * 兩種情況 使用in(屬性名,集合) */ @Test public void test08(){ Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>(); names.add("員工1"); names.add("員工2"); //給查詢增加條件 criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 09.查詢 員工姓名是 員工1 或者 員工2 ,員工3 員工4 的信息 * 兩種情況 使用in(屬性名,集合) */ @Test public void test09(){ Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>(); names.add("員工1"); names.add("員工2"); names.add("員工3"); names.add("員工4"); //給查詢增加條件 criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 10.查詢 員工姓名是 員工1 或者 員工2 ,員工3 員工4 的信息 * * Restrictions.disjunction()返回一個Disjunction對象 * Disjunction 繼承了Junction * Junction中有一個add() * 底層代碼 * public Junction add(Criterion criterion) { criteria.add(criterion); return this; } */ @Test public void test10(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件 criteria.add(Restrictions.disjunction() .add(Restrictions.eq("empName", "員工1")) .add(Restrictions.eq("empName", "員工2")) .add(Restrictions.eq("empName", "員工3")) .add(Restrictions.eq("empName", "員工4")) ); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 11.查詢 員工姓名包含 A 的員工信息 * like 模糊查詢 */ @Test public void test11(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件 criteria.add(Restrictions.like("empName", "%A%")); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 12.查詢 員工姓名包含 A/a 的員工信息 * ilike 模糊查詢 忽略大小寫 */ @Test public void test12(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件 criteria.add(Restrictions.ilike("empName", "%A%")); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 13.查詢 員工姓名包含 A 的員工信息 * like 模糊查詢 * MatchMode: 我們value值出現的位置 可以替換% * MatchMode.ANYWHERE:前後 * MatchMode.END:後 * MatchMode.START:前 */ @Test public void test13(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件 criteria.add(Restrictions.like("empName", "A",MatchMode.ANYWHERE)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 14.聚合函數 和 投影查詢 Projections * * 查詢 薪水的最大值 最小值 總薪水 和平均薪水 * criteria.setProjection 是賦值操作 * 如果不清空Projection * 之前給的值 會帶入下次的查詢 */ @Test public void test14(){ Criteria criteria = session.createCriteria(Emp.class); criteria.setProjection( Projections.projectionList() .add(Projections.max("salary")) .add(Projections.min("salary")) .add(Projections.sum("salary")) .add(Projections.avg("salary")) ); //criteria.setProjection(null); 清空所有的約束 List<Object[]> list = criteria.list(); for (Object[] objects : list) { System.out.println("最大薪水:"+objects[0]); System.out.println("最小薪水:"+objects[1]); System.out.println("總薪水:"+objects[2]); System.out.println("平均薪水:"+objects[3]); } } /** * 15. 分頁查詢 * 查詢姓名中 包含 "員工" 的 並且 按照 薪水 降序排列 */ @Test public void test15(){ //查詢總記錄數 int count=((Long)session.createCriteria(Emp.class) .add(Restrictions.like("empName", "員工",MatchMode.ANYWHERE)) .setProjection(Projections.count("empName")).uniqueResult()).intValue(); System.out.println("總記錄數是:"+count); //當前頁 int pageIndex=1; //頁大小 int pageSize=4; //總頁數 int totalPageSize=(count%pageSize==0)?(count/pageSize):(count/pageSize+1); //進行薪水的降序排列 Criteria criteria= session.createCriteria(Emp.class) .add(Restrictions.like("empName", "員工",MatchMode.ANYWHERE)) .addOrder(Order.desc("salary")); //設置 當前頁 以及頁大小 List<Emp> list = criteria.setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list(); for (Emp emp : list) { System.out.println(emp); } } /** * 16:面試題 * DetachedCriteria和 Criteria的區別 * 相同點:都能用來 做查詢操作 * 不同點: * 01.DetachedCriteria在創建的時候 不需要session! * 02.真正執行查詢的時候getExecutableCriteria(session)才使用session * 03.DetachedCriteria自身可以作為一個參數 * * 薪水 大於 平均值的員工信息 */ @Test public void test16(){ //得到DetachedCriteria對象 DetachedCriteria criteria= DetachedCriteria.forClass(Emp.class) .setProjection(Projections.avg("salary")); //執行查詢 double avg=(double) criteria.getExecutableCriteria(session).uniqueResult(); System.out.println("薪水的平均值是:"+avg); //薪水 大於 平均值的員工信息 List<Emp> list = session.createCriteria(Emp.class).add( Property.forName("salary").gt(criteria)).list(); for (Emp emp : list) { System.out.println(emp); } } }

public class EmpTest { Session session =null; Transaction transaction=null; @Before public void before(){ session = HibernateSessionUtil.getCurrentSession(); transaction= session.beginTransaction(); } /** * Criteria 查詢接口:完全是面向對象的思想來 操作數據庫! * 看不到sql看不到hql! * 01.查詢所有的部門信息 */ @Test public void test01(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
List<Dept>list = criteria.list(); for (Dept dept : list) { System.out.println(dept); } } /** * 02.查詢指定的部門信息 eq(屬性名,屬性值) * Restrictions:給我們的查詢增加條件 * 001.Restrictions中的方法都是靜態的 * 002.方法的返回是都是 Criterion或者其實現類 */ @Test public void test02(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
criteria.add(Restrictions.eq("deptName", "研發部")); //給查詢增加條件
Dept dept = (Dept) criteria.uniqueResult(); System.out.println(dept); } /** * 03.查詢員工薪水大於10k的 gt(屬性名,屬性值) */ @Test public void test03(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.gt("salary", 10000d)); //給查詢增加條件
List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 04.查詢員工薪水大於5k的 小於100k bw(屬性名,屬性值1,屬性值2) */ @Test public void test04(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.between("salary", 5000d, 100000d)); //給查詢增加條件
List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 05.查詢沒有部門的員工 dept是我們Emp類中的一個域屬性 對象為null 使用 isNull */ @Test public void test05(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.isNull("dept")); //給查詢增加條件
List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 06.查詢沒有員工的 部門 emps是我們Dept類中的一個集合 集合的size=0 使用 isEmpty */ @Test public void test06(){ Criteria criteria=session.createCriteria(Dept.class); criteria.add(Restrictions.isEmpty("emps")); //給查詢增加條件
List<Dept> list = criteria.list(); for (Dept dept : list) { System.out.println(dept); } } /** * 07.查詢 員工姓名是 員工1 或者 員工2的信息 * 兩種情況 使用or */ @Test public void test07(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件
criteria.add(Restrictions.or (Restrictions.eq("empName", "員工1"), Restrictions.eq("empName", "員工2"))); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 08.查詢 員工姓名是 員工1 或者 員工2的信息 * 兩種情況 使用in(屬性名,集合) */ @Test public void test08(){ Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>(); names.add("員工1"); names.add("員工2"); //給查詢增加條件
criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 09.查詢 員工姓名是 員工1 或者 員工2 ,員工3 員工4 的信息 * 兩種情況 使用in(屬性名,集合) */ @Test public void test09(){ Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>(); names.add("員工1"); names.add("員工2"); names.add("員工3"); names.add("員工4"); //給查詢增加條件
criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 10.查詢 員工姓名是 員工1 或者 員工2 ,員工3 員工4 的信息 * * Restrictions.disjunction()返回一個Disjunction對象 * Disjunction 繼承了Junction * Junction中有一個add() * 底層代碼 * public Junction add(Criterion criterion) { criteria.add(criterion); return this; } */ @Test public void test10(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件
criteria.add(Restrictions.disjunction() .add(Restrictions.eq("empName", "員工1")) .add(Restrictions.eq("empName", "員工2")) .add(Restrictions.eq("empName", "員工3")) .add(Restrictions.eq("empName", "員工4")) ); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 11.查詢 員工姓名包含 A 的員工信息 * like 模糊查詢 */ @Test public void test11(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件
criteria.add(Restrictions.like("empName", "%A%")); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 12.查詢 員工姓名包含 A/a 的員工信息 * ilike 模糊查詢 忽略大小寫 */ @Test public void test12(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件
criteria.add(Restrictions.ilike("empName", "%A%")); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 13.查詢 員工姓名包含 A 的員工信息 * like 模糊查詢 * MatchMode: 我們value值出現的位置 可以替換% * MatchMode.ANYWHERE:前後 * MatchMode.END:後 * MatchMode.START:前 */ @Test public void test13(){ Criteria criteria=session.createCriteria(Emp.class); //給查詢增加條件
criteria.add(Restrictions.like("empName", "A",MatchMode.ANYWHERE)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 14.聚合函數 和 投影查詢 Projections * * 查詢 薪水的最大值 最小值 總薪水 和平均薪水 * criteria.setProjection 是賦值操作 * 如果不清空Projection * 之前給的值 會帶入下次的查詢 */ @Test public void test14(){ Criteria criteria = session.createCriteria(Emp.class); criteria.setProjection( Projections.projectionList() .add(Projections.max("salary")) .add(Projections.min("salary")) .add(Projections.sum("salary")) .add(Projections.avg("salary")) ); //criteria.setProjection(null); 清空所有的約束
List<Object[]> list = criteria.list(); for (Object[] objects : list) { System.out.println("最大薪水:"+objects[0]); System.out.println("最小薪水:"+objects[1]); System.out.println("總薪水:"+objects[2]); System.out.println("平均薪水:"+objects[3]); } } /** * 15. 分頁查詢 * 查詢姓名中 包含 "員工" 的 並且 按照 薪水 降序排列 */ @Test public void test15(){ //查詢總記錄數
int count=((Long)session.createCriteria(Emp.class) .add(Restrictions.like("empName", "員工",MatchMode.ANYWHERE)) .setProjection(Projections.count("empName")).uniqueResult()).intValue(); System.out.println("總記錄數是:"+count); //當前頁
int pageIndex=1; //頁大小
int pageSize=4; //總頁數
int totalPageSize=(count%pageSize==0)?(count/pageSize):(count/pageSize+1); //進行薪水的降序排列
Criteria criteria= session.createCriteria(Emp.class) .add(Restrictions.like("empName", "員工",MatchMode.ANYWHERE)) .addOrder(Order.desc("salary")); //設置 當前頁 以及頁大小
List<Emp> list = criteria.setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list(); for (Emp emp : list) { System.out.println(emp); } } /** * 16:面試題 * DetachedCriteria和 Criteria的區別 * 相同點:都能用來 做查詢操作 * 不同點: * 01.DetachedCriteria在創建的時候 不需要session! * 02.真正執行查詢的時候getExecutableCriteria(session)才使用session * 03.DetachedCriteria自身可以作為一個參數 * * 薪水 大於 平均值的員工信息 */ @Test public void test16(){ //得到DetachedCriteria對象
DetachedCriteria criteria= DetachedCriteria.forClass(Emp.class) .setProjection(Projections.avg("salary")); //執行查詢
double avg=(double) criteria.getExecutableCriteria(session).uniqueResult(); System.out.println("薪水的平均值是:"+avg); //薪水 大於 平均值的員工信息
List<Emp> list = session.createCriteria(Emp.class).add( Property.forName("salary").gt(criteria)).list(); for (Emp emp : list) { System.out.println(emp); } } }

hibernate11--Criteria查詢