文件结构

1. 实体类 实例 Employee

package com.bdqn.entity;import java.util.Date;public class Employee {private Integer empNo;      //员工编号private String empName;     //员工姓名private String job;         // 职位private Double salary;      // 薪资private Integer deptNo;     // 部门编号private Date hireDate;      // 入职时间//    public Employee(String empName,String job, Double salary,Integer deptNo,Date hireDate){//        this.empName = empName;
//        this.job = job;
//        this.salary = salary;
//        this.deptNo = deptNo;
//        this.hireDate = hireDate;
//    }public Integer getEmpNo() {return empNo;}public String getEmpName() {return empName;}public String getJob() {return job;}public Double getSalary() {return salary;}public Integer getDeptNo() {return deptNo;}public Date getHireDate() {return hireDate;}public void setEmpNo(Integer empNo) {this.empNo = empNo;}public void setEmpName(String empName) {this.empName = empName;}public void setJob(String job) {this.job = job;}public void setSalary(Double salary) {this.salary = salary;}public void setDeptNo(Integer deptNo) {this.deptNo = deptNo;}public void setHireDate(Date hireDate) {this.hireDate = hireDate;}@Overridepublic String toString() {return "Employee{" +"empNo=" + empNo +", empName='" + empName + '\'' +", job='" + job + '\'' +", salary=" + salary +", deptNo=" + deptNo +", hireDate=" + hireDate +'}';}
}

2. utils类 将字符串转换成 Date 日期格式

文件名:DateUtil.class

package com.bdqn.utils;import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;public class DateUtil {/*** 将字符创转换成 Date 日期格式* @param str* @return* */public static Date formatDate(String str){try{SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");return format.parse(str);} catch (ParseException e){e.fillInStackTrace();}return null;}}

3. 拓展实体 EmployeeVo

com.xxx.vo.EmployeeVo.class
自动会生成没有的 字段

package com.bdqn.vo;import com.bdqn.entity.Employee;import java.util.Date;
import java.util.zip.DataFormatException;/*** 自定义查询类* 该类制作查询条件的参数(方法参数),不做方法的返回值类型* */
public class EmployeeVo extends Employee {// 开始时间private Date startDate;// 结束时间private Date endDate;public Date getStartDate() {return startDate;}public Date getEndDate() {return endDate;}public void setStartDate(Date startDate) {this.startDate = startDate;}public void setEndDate(Date endDate) {this.endDate = endDate;}
}

4. 增

5. 删

6. 改

6.1

/**
* 按位置进行参数绑定
*      注意:高版本hibernate下标从1开始
* */
@Test
public void testParamter1(){// 获取SessionSession session = HibernateUtil.getSession();// 定义HQL语句String hql = "from Employee where empName like ?1 and salary >= ?2";// 创建Query对象Query query = session.createQuery(hql);// 赋值
//        query.setString(1,"%国%");
//        query.setDouble(1,5000);// 推荐使用 setParameter()query.setParameter(1,"%国%");query.setParameter(2,5000.0);// 执行查询List<Employee> list = query.list();for (Employee employee : list) {System.out.println(employee);}
}

6.2

 /**** */@Testpublic void testParamter2(){// 获取SessionSession session = HibernateUtil.getSession();// 定义HQL语句String hql = "from Employee where empName like :empName and salary >= :salary";// 创建Query对象Query query = session.createQuery(hql);// 赋值
//        query.setString(1,"%国%");
//        query.setDouble(1,5000);// 推荐使用 setParameter()query.setParameter("empName","%国%");query.setParameter("salary",5000.0);// 执行查询List<Employee> list = query.list();for (Employee employee : list) {System.out.println(employee);}}

7. 查

7.1 list()

/**
* 查询所有员工列表
* */
@Test
public void testList(){// 获取Session(使用openSession()方式获取)Session session = HibernateUtil.getSession();try{// 定义HQl语句  查询的是实体类类名String hql = "from Employee";// 创建Query对象Query query = session.createQuery(hql);// 执行查询List<Employee> list = query.list();// 循环遍历for (Employee employee : list) {    // 快捷键: iterSystem.out.println(employee);}} catch (Exception e){e.printStackTrace();} finally {// 关闭资源HibernateUtil.closeSession(session);}
}

7.2 iterate()

/**
* 查询所有员工列表
* */
@Test
public void testIternate(){// 获取Session(使用openSession()方式获取)Session session = HibernateUtil.getSession();try{// 定义HQl语句  查询的是实体类类名String hql = "from Employee";// 创建Query对象Query query = session.createQuery(hql);// 执行查询Iterator<Employee> iterate = query.iterate(); // 会发出1+N田sql语句//循环遍历while(iterate.hasNext()) {// 得到每一个员工对象Employee employee = iterate.next();System.out.println(employee);}} catch (Exception e){// 关闭资源HibernateUtil.closeSession(session);}
}

7.3 动态条件查询

/**
* 动态条件查询
* */
@Test
public void testEmployee(){// 创建查询条件类对象EmployeeVo employeeVo = new EmployeeVo();employeeVo.setJob("python程序员");employeeVo.setStartDate(DateUtil.formatDate("2018-01-01"));employeeVo.setEndDate(DateUtil.formatDate("2021-01-01"));// 获取 SessionSession session = HibernateUtil.getSession();// 定义 sql 语句StringBuilder hql = new StringBuilder("from Employee where 1=1 ");// 判断条件是否为空if(employeeVo != null){// 薪资if(employeeVo.getSalary() != null){hql.append(" and salary >= :salary"); // 命名参数必须与实体类的属性名相同}// 职位if(employeeVo.getJob() != null && employeeVo.getJob().equals("")){hql.append(" and job = :job");      // 命名参数必须与实体类的属性名相同}// 开始时间if(employeeVo.getStartDate() != null){hql.append(" and hireDate >= startDate");}// 结束时间if(employeeVo.getEndDate() != null){hql.append(" and hireDate <= :endDate");}}// 创建 query 对象Query query = session.createQuery(hql.toString());// 赋值query.setProperties(employeeVo);//要求:必须保证命名擦书名称与实体类的属性名相同// 执行查询List<Employee> list = query.list();for (Employee employee : list) {System.out.println(employee);}}

Hibernate之HQL数据库操作相关推荐

  1. 使用Hibernate编写通用数据库操作代码

    insert方法 public void insert(Object o){ Session session = HibernateSessionFactory.currentSession(); T ...

  2. hibernate的HQL查询语言总结

    HQL是Hibernate Query Language的缩写,HQL的语法很像SQL的语法,但HQL是一种面向对象的查询语言.因此,SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类.实 ...

  3. Hibernate 笔记 HQL查询

    http://www.cnblogs.com/zilong882008/archive/2011/11/05/2237123.html Hibernate 笔记 HQL查询(一)单属性,多属性查询 H ...

  4. 用hibernate类实现数据库的基本操作

    首先,介绍一下haibernate.hibernate本来的意思是Let Java objects hibernate in the relational database(让java对象在关系书库中 ...

  5. Hibernate怎么提升数据库查询的性能 (1)

    Hibernate如何提升数据库查询的性能 数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的. SQL语句的优化 使用正确的SQL语句可以在很大程度上提 ...

  6. 14、Hibernate的HQL与QBC检索

    Hibernate检索对象的方式 - HQL检索方式 - QBC检索方式 1.Hibernate提供的检索对象的方式 - 导航图对象检索方式 根据已经加载的对象,导航到其他对象.例如,对于已经加载的C ...

  7. hibernate的Hql语句

    HQL ①是Hibernate Query Language的缩写. ②他是一种和java类似的面向对象的数据库操作语句.③hql查的不是表示实体类.通过查实体类去查表数据. hql和sql区别/异同 ...

  8. oracle可以面向对象吗,Jbdc助手-数据库操作面向对象的实现(oracle)

    前言: 如果你对hibernate不是那样的推崇,但感觉jdbc的sqlr操作又不是那么OO的话,那么这篇文章可能给能带来或多或少的期望- 在很长的一段时间里,中总感觉应该对sql的操作来实现一种集成 ...

  9. java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

最新文章

  1. maven install 报错 source 1.5 中不支持 lambda 表达式
  2. linux配置环境jdk
  3. netty实现mysql协议_基于Netty模拟解析Binlog
  4. 会打乒乓球的机器人!
  5. java hive查询_java程序调用hive查询的一个异常
  6. ETL异构数据源Datax_自增ID增量同步_12
  7. pdfbox 第一页加内容_Java使用PDFBox操作PDF文件获取页码、文章内容、缩略图
  8. redis java操作
  9. Python开发Http代理服务器 - socketref,再见!高德 - C++博客
  10. MySQL 约束语法
  11. html ui在线生成器,漂亮的CSS按钮样式集以及在线生成工具
  12. 常用的几个设计心理学
  13. 阿里云Linux服务器部署JDK8实战教程
  14. command命令大全(转自http://blog.dhedu.gov.cn/u/72/archives/2009/14290.html)
  15. t480s控制面板打开触摸板_今年买的thinkpad T480S,但是使用感觉还不如5年前买的S3 touch速度快,是什么原因?...
  16. VS Code 所选驱动器或UNC共享不存在或不可访问
  17. python 中的 re.compile 函数(转)
  18. 大型直播平台应用架构浅谈
  19. linux下巴img镜像写入内存卡,【通用教程】拿到一个IMG镜像,在WIN系统如何写入TF卡?Win32DiskImager简单使用指南...
  20. 射影几何 -- 空间射影几何 3

热门文章

  1. JavaScript中的立即执行函数
  2. mysql linux版安装
  3. Asp.net读取AD域信息的方法(一)
  4. SSH框架总结(框架分析+环境搭建+实例源代码下载)
  5. Mac下配置cocos2d-x开发环境(android和ios)
  6. 有关网页抓取问题的一些经验总结 - passover【毕成功的博客】 - 51CTO技术博客
  7. ASP.NET 验证码示例
  8. Android异步下载网络图片(其二:AsyncTask)
  9. JavaScript表达式--掌握最全的表达式,一切尽在掌握中,让表达不再是难事
  10. 开灯问题 简单模拟法