Hibernate中使用Criteria查詢及註解——(DeptTest.java)

來源:互聯網
上載者:User

DeptTest.java

      測試類別:

先建立Session:

private Session session;private Transaction tx;@Beforepublic void beforeMethod(){session=new Configuration().configure().buildSessionFactory().openSession();}

關閉Session:

@Afterpublic void afterMethod() {if (session != null) {session.close();}}

開始測試:

    /**
     * 測試簡單查詢
     */

@Testpublic void testMethod1() {//查詢所有的部門Criteria criteria=session.createCriteria(Dept.class);List<Dept> deptList=criteria.list();for (Dept dept : deptList) {System.out.println("部門編號:"+dept.getDeptno());System.out.println("部門名稱:"+dept.getDname());System.out.println("部門編地址:"+dept.getLoc());}}


查詢部門在山西呂梁的部門名稱

//查詢部門地址在山西呂梁的部門名稱@Testpublic void test2(){List<Dept> deptList=session.createCriteria(Dept.class).add(Restrictions.eq("loc", "山西呂梁")).list();for (Dept dept : deptList) {System.out.println(dept.getDeptno()+","+dept.getDname());}}

//查詢工資高於5000的員工

@Testpublic void test3(){List<Emp> empList=session.createCriteria(Emp.class).add(Restrictions.gt("sal", 5000D)).list();for (Emp emp : empList) {System.out.println(emp.getEname()+","+emp.getSal());}}

//查詢不屬於任何部門的員工

@Testpublic void test4(){List<Emp> empList=session.createCriteria(Emp.class)                 .add(Restrictions.isNull("dept")).list();for (Emp emp : empList) {System.out.println(emp.getEname());}}

//查詢職位是CLERK的員工
    //ignoreCase:不區分大小寫

@Testpublic void test5(){List<Emp> empList=session.createCriteria(Emp.class)                 .add(Restrictions.eq("job","ClERK").ignoreCase())                 .list();for (Emp emp : empList) {System.out.println(emp.getEname()+","+emp.getDept().getDname());}}


    /**
     * in:等於列表中的某一個值
     * not in:不等於列表中的任何一個值
     * between 值1 and 值2:大於等於值1並且小於值2
     * not between 值1 and 值2:小於值1或者大於值2
     */
    //查詢職位是ANALYST 或  SALESMAN 的員工

@Testpublic void test6(){List jobList=new ArrayList();jobList.add("SALESMAN");jobList.add("ANALYST");List<Emp> empoList=session.createCriteria(Emp.class)                   .add(Restrictions.in("job",jobList))                   .list();for (Emp emp : empoList) {System.out.println(emp.getEname()+","+emp.getJob());}}

//查詢工資在2000元到4000元的員工
@Testpublic void test7(){List<Emp> empList=session.createCriteria(Emp.class)                 .add(Restrictions.between("sal", 2000D, 4000D))                 .list();for (Emp emp : empList) {System.out.println(emp.getEname()+","+emp.getSal());}}

/**
     * like:字串模式比對
     * ilike:字串木事匹配,忽略大小寫
     */
    //查詢姓名中包括s的職位(like)

@Testpublic void test8(){List<Emp> empList=session.createCriteria(Emp.class)                  .add(Restrictions.like("job","%s%"))                  .list();for (Emp emp : empList) {System.out.println(emp.getEname());}}

//查詢姓名中包括s的職位(ilike)

@Testpublic void test9(){List<Emp> empList=session.createCriteria(Emp.class)                  .add(Restrictions.ilike("job","%s%"))                  .list();for (Emp emp : empList) {System.out.println(emp.getEname());}}

/**
         * MatchMode靜態常量
         * 1.MatchMode.STRART:   員工姓名以s開頭
         * 2.MatchMode.END:                 員工姓名以s結尾
         * 3.MatchMode.ANYWHERE  員工姓名中包含s
         * 4.MatchMode.EXACT     員工姓名中等於s精確匹配
         */
        //查詢職位中包括s的職位

@Testpublic void test10(){List<Emp> empList=session.createCriteria(Emp.class)                  .add(Restrictions.ilike("job","%s%",MatchMode.ANYWHERE))                  .list();for (Emp emp : empList) {System.out.println(emp.getJob());}}

/**
         *邏輯運算
         *1.and:邏輯與
         *2.or:邏輯或
         *3.not:邏輯非
         */
        //查詢職位是accountant 或者是analyert的職位名稱
@Testpublic void test11(){List<Emp> empList=session.createCriteria(Emp.class)                  .add(Restrictions.or(Restrictions.eq("job", "analyert").ignoreCase(),                       Restrictions.eq("job","accountant").ignoreCase()))                  .list();for (Emp emp : empList) {System.out.println(emp.getJob());}}

//查詢職位是accountant 或者是analyert 或者是 engineer的職位名稱
@Testpublic void test12(){List<Emp> empList=session.createCriteria(Emp.class)                       .add(Restrictions.disjunction()                   .add(Restrictions.eq("job", "analyert").ignoreCase())                       .add(Restrictions.eq("job","accountant").ignoreCase())                       .add(Restrictions.eq("job", "engineer").ignoreCase()))                       .list();for (Emp emp : empList) {System.out.println(emp.getJob());}}

/**
             * 集合運算子
             * 1. is empty:集合為空白,不包含任何元素
             * 2. is not empty:集合不為空白
             */
            //查詢沒有員工的部門

@Testpublic void test13(){List<Dept> deptList=session.createCriteria(Dept.class)                 .add(Restrictions.isEmpty("emps"))                 .list();for (Dept dept : deptList) {System.out.println(dept.getDname());}}

/**
         * 動態查詢
         * 條件見下:(條件類:EmpCondition)
         * 1.job是engineer
         * 2.sal大於2000
         * 3.入職時間在2006年12月31日到2008年12月31日之前
         */

@Testpublic void test14(){SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");EmpCondition empCondition=new EmpCondition();try {empCondition.setJob("engineer");empCondition.setSal(2000D);String hiredateStart="2006-12-31";String hiredateEnd="2008-12-31";Date hiredateStart1=format.parse(hiredateStart);Date hiredateEnd1=format.parse(hiredateEnd);empCondition.setHiredateStart(hiredateStart1);empCondition.setHiredateEnd(hiredateEnd1);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}

//添加動態查詢的條件

Criteria criteria=session.createCriteria(Emp.class);if(empCondition.getJob()!=null){criteria.add(Restrictions.ilike("job", empCondition.getJob()));}if(empCondition.getSal()!=null){criteria.add(Restrictions.gt("sal",empCondition.getSal()));}if(empCondition.getHiredateStart()!=null){criteria.add(Restrictions.ge("hiredate",empCondition.getHiredateStart()));}if(empCondition.getHiredateEnd()!=null){criteria.add(Restrictions.le("hiredate",empCondition.getHiredateEnd()));}//輸出            List<Emp>emplist=criteria.list();            for (Emp emp : emplist) {                System.err.println(emp.getEname()+","+emp.getJob()+","+emp.getSal()+","+emp.getHiredate());            }        }


        /**
         * 分頁查詢
         */
        //分頁查詢部門是SALESMAN 的所有員工
        //並且工資降序
        //顯示總頁數,總記錄數,當前頁號

@Testpublic void test15(){Criteria criteria =session.createCriteria(Emp.class)                  .add(Restrictions.eq("job", "SALESMAN").ignoreCase())                  .setProjection(Projections.count("empno"));//獲得總記錄數Integer count=(Integer)criteria.uniqueResult();//分頁int pageSize=2;int pageIndex=1;int totalPage=count%pageSize==0?count/pageSize:(count/pageSize)+1;criteria=session.createCriteria(Emp.class)        .add(Restrictions.eq("job", "SALESMAN").ignoreCase())        .addOrder(Order.desc("sal"));//開始分頁,設定從哪條記錄開始查List<Emp> emplist=criteria.setFirstResult((pageIndex-1)*pageSize)                  .setMaxResults(pageSize)                  .list();for (Emp emp : emplist) {System.out.println(emp.getEname()+","+emp.getSal());}System.out.println("總頁數:"+totalPage);System.err.println("總記錄數:"+count);System.out.println("當前頁號:"+pageIndex);}

/**
         * 串連查詢
         * Criteria裡面只有內串連和迫切做外連結
         */
        //查詢RESEARCH部們中姓名包括s的員工

@Testpublic void test16(){List<Emp> emplistList=session.createCriteria(Emp.class)                     .add(Restrictions.ilike("ename", "s",MatchMode.ANYWHERE))                     .createCriteria("dept")                     .add(Restrictions.eq("dname","RESEARCH").ignoreCase())                     .list();for (Emp emp : emplistList) {System.out.println(emp.getEname()+","+emp.getDept().getDname());}}//查詢RESEARCH部門中姓名包含s的員工@Testpublic void test17(){List<Emp> empList=session.createCriteria(Emp.class,"e")                 .createAlias("dept", "d")                 .add(Restrictions.ilike("e.ename","s",MatchMode.ANYWHERE))                 .add(Restrictions.eq("d.dname","RESEARCH").ignoreCase())                 .list();for (Emp emp : empList) {System.out.println(emp.getEname()+","+emp.getDept().getDname());}}

//左外串連
        //查詢位置在山西呂梁的部門及其人數
        //FetchMode.JOIN表示迫切做外連結查詢策略

@Testpublic void test18(){List<Dept> deptList=session.createCriteria(Dept.class,"d")                   .setFetchMode("emps",FetchMode.JOIN)                   .add(Restrictions.eq("d.loc","山西呂梁").ignoreCase())                   .list();for (Dept dept : deptList) {System.out.println(dept.getDname()+","+dept.getLoc()+","+dept.getEmps().size());}}

//去掉重複資料

@Testpublic void test19(){List<Dept> deptList=session.createCriteria(Dept.class,"d")                   .setFetchMode("emps", FetchMode.JOIN)                   .add(Restrictions.eq("d.loc","山西呂梁").ignoreCase())                   .list();HashSet<Dept> set=new HashSet<Dept>(deptList);for (Dept dept : set) {System.out.println(dept.getDname()+","+dept.getLoc()+","+dept.getEmps().size());}}    

/**
         * 投影,分組,及DetachedCriteria
         */
        //查詢所有的部門名稱】

@Testpublic void test20(){List<String> list=session.createCriteria(Dept.class)                  .setProjection(Property.forName("dname"))                  .list();for (String str : list) {System.out.println(str);}}

//查詢兩個或者兩個以上的屬性
        //查詢員工的姓名和入職時間
@Testpublic void test21(){List<Object[]> list=session.createCriteria(Emp.class)                   .setProjection(                         Projections.projectionList()                         .add(Property.forName("ename"))                         .add(Property.forName("hiredate"))                   )                  .list();for (Object[] objects : list) {System.out.println(objects[0]+","+objects[1]);}                   }

/**
         * 分組
         * 1.groupProperty:分組
         * 2.rowCount():統計記錄數
         * 3.avg:平均值
         * 4.max:最大值
         * 5.min:最小值
         * 6.count:統計某一欄位的非空記錄數
         * 7.sum:針對某一欄位進行求和
         */
        //統計各個部門的平均工資,最高工資,最低工資

@Testpublic void test22(){List<Object[]> list=session.createCriteria(Emp.class,"e")                   .createAlias("e.dept", "d")                   .setProjection(                   Projections.projectionList()                   .add(Projections.groupProperty("d.dname"))                   .add(Projections.avg("e.sal"))                   .add(Projections.max("e.sal"))                   .add(Projections.min("e.sal"))                   )                   .list();for (Object[] objects : list) {System.out.println("部門名稱"+objects[0]+",最高工資:"+objects[2]+"" +",平均工資:"+objects[1]+",最低工資:"+objects[3]);}                   }

//使用DetachedCriteria
        //查詢RESEARCH部門,姓名包含“a”的員工

@Testpublic void test23(){DetachedCriteria detachedCriteria           =DetachedCriteria.forClass(Emp.class,"e")           .createAlias("e.dept","d")           .add(Restrictions.eq("d.dname","RESEARCH").ignoreCase())           .add(Restrictions.ilike("e.ename","a",MatchMode.ANYWHERE));List<Emp> list=detachedCriteria.getExecutableCriteria(session).list();for (Emp emp : list) {System.out.println(emp.getEname()+","+emp.getDept().getDname());}                        }

//查詢工資高於平均工資的員工

@Testpublic void test24(){//平均工資DetachedCriteria detachedCriteria=DetachedCriteria             .forClass(Emp.class,"e")             .setProjection(Property.forName("sal").avg());//求工資大於平均工資List<Emp> emplist=session.createCriteria(Emp.class)                 .add(Property.forName("sal").gt(detachedCriteria)).list();for (Emp emp : emplist) {System.out.println(emp.getEname()+","+emp.getSal());}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.