Hibernate之HQL数据库操作
文件结构
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数据库操作相关推荐
- 使用Hibernate编写通用数据库操作代码
insert方法 public void insert(Object o){ Session session = HibernateSessionFactory.currentSession(); T ...
- hibernate的HQL查询语言总结
HQL是Hibernate Query Language的缩写,HQL的语法很像SQL的语法,但HQL是一种面向对象的查询语言.因此,SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类.实 ...
- Hibernate 笔记 HQL查询
http://www.cnblogs.com/zilong882008/archive/2011/11/05/2237123.html Hibernate 笔记 HQL查询(一)单属性,多属性查询 H ...
- 用hibernate类实现数据库的基本操作
首先,介绍一下haibernate.hibernate本来的意思是Let Java objects hibernate in the relational database(让java对象在关系书库中 ...
- Hibernate怎么提升数据库查询的性能 (1)
Hibernate如何提升数据库查询的性能 数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的. SQL语句的优化 使用正确的SQL语句可以在很大程度上提 ...
- 14、Hibernate的HQL与QBC检索
Hibernate检索对象的方式 - HQL检索方式 - QBC检索方式 1.Hibernate提供的检索对象的方式 - 导航图对象检索方式 根据已经加载的对象,导航到其他对象.例如,对于已经加载的C ...
- hibernate的Hql语句
HQL ①是Hibernate Query Language的缩写. ②他是一种和java类似的面向对象的数据库操作语句.③hql查的不是表示实体类.通过查实体类去查表数据. hql和sql区别/异同 ...
- oracle可以面向对象吗,Jbdc助手-数据库操作面向对象的实现(oracle)
前言: 如果你对hibernate不是那样的推崇,但感觉jdbc的sqlr操作又不是那么OO的话,那么这篇文章可能给能带来或多或少的期望- 在很长的一段时间里,中总感觉应该对sql的操作来实现一种集成 ...
- java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
最新文章
- maven install 报错 source 1.5 中不支持 lambda 表达式
- linux配置环境jdk
- netty实现mysql协议_基于Netty模拟解析Binlog
- 会打乒乓球的机器人!
- java hive查询_java程序调用hive查询的一个异常
- ETL异构数据源Datax_自增ID增量同步_12
- pdfbox 第一页加内容_Java使用PDFBox操作PDF文件获取页码、文章内容、缩略图
- redis java操作
- Python开发Http代理服务器 - socketref,再见!高德 - C++博客
- MySQL 约束语法
- html ui在线生成器,漂亮的CSS按钮样式集以及在线生成工具
- 常用的几个设计心理学
- 阿里云Linux服务器部署JDK8实战教程
- command命令大全(转自http://blog.dhedu.gov.cn/u/72/archives/2009/14290.html)
- t480s控制面板打开触摸板_今年买的thinkpad T480S,但是使用感觉还不如5年前买的S3 touch速度快,是什么原因?...
- VS Code 所选驱动器或UNC共享不存在或不可访问
- python 中的 re.compile 函数(转)
- 大型直播平台应用架构浅谈
- linux下巴img镜像写入内存卡,【通用教程】拿到一个IMG镜像,在WIN系统如何写入TF卡?Win32DiskImager简单使用指南...
- 射影几何 -- 空间射影几何 3