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

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)

概述 本文目的是搭建三台asp.net core 集群, 并配上 nginx做负载均衡 首先准备要运行的源码 http://pan.baidu.com/s/1c20x0bA 准备三台服务器(或则虚拟机) 192.168.182.129 , 192.168.182.130 , 192.168.182.131 并将源码发布至三台服务器的 /root/aspnetcore/anuoapc 目录 …

Java IO教程

转载自 Java IO教程译文链接 作者&#xff1a;Jakob Jenkov 译者&#xff1a;Connor (cronnorcgmail.com) &#xff0c;李璟 校对&#xff1a;方腾飞 Java IO 是一套Java用来读写数据&#xff08;输入和输出&#xff09;的API。大部分程序都要处理一些输入&#xff0c;并由输…

Java web登录拦截器_SpringMVC拦截器(实现登录验证拦截器)

本例实现登陆时的验证拦截&#xff0c;采用SpringMVC拦截器来实现核心代码首先是index.jsp,显示链接String path request.getContextPath();String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/&quo…

Java Poi 向excel中插入图片

博客 package com.unicom.yangjiabin.utils;import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.po…

visual studio for mac的离线安装初体验

微软2016 Connect 大会发布了visuo studio for mac的pre版本&#xff0c;由于工作原因&#xff0c;现在工作环境是mac&#xff0c;虽然开发现在是在用python&#xff0c;但一直关注着.net的发展&#xff0c;于是自己很激动的体验了一把&#xff0c;在张善友老师的提醒下,把安装…

JAVAWEB(笔记)

简介 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com静态web html,sss提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人看的数据始终会发生变化&#xff0c;每个人在不同的时…

Java IO: 其他字节流(上)

转载自 Java IO: 其他字节流(上)作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本小节会简要概括Java IO中的PushbackInputStream&#xff0c;SequenceInputStream和PrintStream。其中&#xff0c;最常用的是PrintStream&#xff0c;System.out和System.err都是Pri…

java中public private_java中public、private、protected区别

类中的数据成员和成员函数据具有的访问权限包括&#xff1a;public、private、protect、friendly(包访问权限)1、public&#xff1a;public表明该数据成员、成员函数是对所有用户开放的&#xff0c;所有用户都可以直接进行调用2、private&#xff1a;private表示私有&#xff0…

Excel转为图片

Java 将Excel转为图片、html、XPS、XML、CSV E_iceblue关注0人评论66人阅读2020-01-10 16:16:24 通过文档格式转换&#xff0c;可满足不同办公场合对文档操作的需求。本文将介绍转换Excel文档为其他常见文档格式的方法。通过文中的方法&#xff0c;可支持将Excel转换为包括PDF、…

Hibernate中使用Criteria查询及注解——( EmpCondition)

EmpCondition&#xff1a; 动态查询的条件类&#xff1a; package cn.bdqn.hibernate_Criteria.entity;import java.util.Date;/*** Criteria动态查询的条件类* author Administrator**/ public class EmpCondition {private String job;//职位private Double sal;//工资privat…

.NET Core 构建配置文件从 project.json 到 .csproj

从 .NET Core SDK 1.0 Preview 3 build 004056 开始&#xff0c;.NET Core 弃用 project.json&#xff0c;回归 .csproj&#xff0c;主要原因是为了兼容 MSBuild &#xff0c;详见 Announcing .NET Core Tools MSBuild “alpha” 。 如果你安装了 .NET Command Line Tools (1.0…

Java IO: 字符流的Piped和CharArray

转载自 Java IO: 字符流的Piped和CharArray作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer&#xff0c;主要涉及PipedReader、PipedWriter、CharArrayReader、CharArrayWriter。PipedReader 原文链接 PipedRead…

java正则表达式验证密码_最新密码验证正则表达式

正则表达式验证密码功能在项目中经常被使用到&#xff0c;但是很多朋友还是不大会使用密码正则表达式进行验证&#xff0c;本文小编为大家整理了php密码验证正则表达式、python密码强度正则&#xff0c;当然还有大家常用到的js正则表达式&#xff0c;希望大家喜欢。刚开始复习一…

2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)

第一章 1-1课程整体介绍.mp4 1-2核心技术列表.mp4 1-3课程要求与收益.mp4 1-4系统的整体演示.mp4 https://www.jianshu.com/writer#/notebooks/42211254/notes/59340149 第二章 2-1微服务项目的搭建-SpringBoot搭建多模块项目一.mp4 2-2微服务项目的搭建-SpringBoot搭建多模块…

mybatis解决 1 字节的 UTF-8 序列的字节 1 无效

Mybatis执行代码报错&#xff1a; Cause: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。 具体报错&#xff1a; java.lang.ExceptionInInitializerError at com.zhang.dao.UserMapperTest.test(UserMappe…

Java IO: 字符流的Buffered和Filter

转载自 Java IO: 字符流的Buffered和Filter作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer&#xff0c;主要涉及BufferedReader、BufferedWriter、FilterReader、FilterWriter。 BufferedReader 原文链接 BufferedR…

TechEmpower 13轮测试中的ASP.NET Core性能测试

应用性能直接影响到托管服务的成本&#xff0c;因此公司在开发应用时需要格外注意应用所使用的Web框架&#xff0c;初创公司尤其如此。此外&#xff0c;糟糕的应用性能也会影响到用户体验&#xff0c;甚至会因此受到相关搜索引擎的降级处罚。在选择框架时&#xff0c;又有许多因…

hibernate注解的测试

注解用到的jar包&#xff1a;下载地址 /** * * 注解 * 步骤&#xff1a; * 1.导入jar包 * (1)hibernate-annotations.jar * (2)hibernate-commons-annotations.jar * (3)ejb3-persistence.jar * 2.使用注解配置持久化类级对象关…

Java IO: FileReader和FileWriter

转载自 Java IO: FileReader和FileWriter作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本章节将简要介绍FileReader和FileWriter。与FileInputStream和FileOutputStream类似&#xff0c;FileReader与FileWriter用于处理文件内容。 FileReader 原文链接 FileReader能…

java sentence_Java Sentence類代碼示例

本文整理匯總了Java中aima.core.logic.propositional.parsing.ast.Sentence類的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Java Sentence類的具體用法&#xff1f;Java Sentence怎麽用&#xff1f;Java Sentence使用的例子&#xff1f;那麽恭喜您, 這裏精選的類代碼示…