日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate中使用Criteria查询及注解——(DeptTest.java)

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate中使用Criteria查询及注解——(DeptTest.java) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DeptTest.java

????? 測試類:

先創(chuàng)建Session:

private Session session;private Transaction tx;@Beforepublic void beforeMethod(){session=new Configuration().configure().buildSessionFactory().openSession();}
關(guān)閉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("部門編號(hào):"+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:不區(qū)分大小寫

@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:等于列表中的某一個(gè)值
?? ? * not in:不等于列表中的任何一個(gè)值
?? ? * 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靜態(tài)常量
?? ??? ? * 1.MatchMode.STRART:?? 員工姓名以s開頭
?? ??? ? * 2.MatchMode.END:???????????????? 員工姓名以s結(jié)尾
?? ??? ? * 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());}}
/**
?? ??? ? *邏輯運(yùn)算
?? ??? ? *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());}}
/**
?? ??? ??? ? * 集合運(yùn)算符
?? ??? ??? ? * 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());}}
/**
?? ??? ? * 動(dòng)態(tài)查詢
?? ??? ? * 條件見下:(條件類:EmpCondition)
?? ??? ? * 1.job是engineer
?? ??? ? * 2.sal大于2000
?? ??? ? * 3.入職時(shí)間在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();}
//添加動(dòng)態(tài)查詢的條件

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 的所有員工
?? ??? ?//并且工資降序
?? ??? ?//顯示總頁數(shù),總記錄數(shù),當(dāng)前頁號(hào)

@Testpublic void test15(){Criteria criteria =session.createCriteria(Emp.class).add(Restrictions.eq("job", "SALESMAN").ignoreCase()).setProjection(Projections.count("empno"));//獲得總記錄數(shù)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"));//開始分頁,設(shè)置從哪條記錄開始查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("總頁數(shù):"+totalPage);System.err.println("總記錄數(shù):"+count);System.out.println("當(dāng)前頁號(hào):"+pageIndex);}
/**
?? ??? ? * 連接查詢
?? ??? ? * Criteria里面只有內(nèi)連接和迫切做外鏈接
?? ??? ? */
?? ??? ?//查詢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());}}
//左外連接
?? ??? ?//查詢位置在山西呂梁的部門及其人數(shù)
?? ??? ?//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());}}
//去掉重復(fù)數(shù)據(jù)

@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);}}
//查詢兩個(gè)或者兩個(gè)以上的屬性
?? ??? ?//查詢員工的姓名和入職時(shí)間 @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():統(tǒng)計(jì)記錄數(shù)
?? ??? ? * 3.avg:平均值
?? ??? ? * 4.max:最大值
?? ??? ? * 5.min:最小值
?? ??? ? * 6.count:統(tǒng)計(jì)某一字段的非空記錄數(shù)
?? ??? ? * 7.sum:針對某一字段進(jìn)行求和
?? ??? ? */
?? ??? ?//統(tǒng)計(jì)各個(gè)部門的平均工資,最高工資,最低工資

@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());}}

總結(jié)

以上是生活随笔為你收集整理的Hibernate中使用Criteria查询及注解——(DeptTest.java)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。