Hibernate操作数据库课堂笔记HQL

  • 格式:docx
  • 大小:108.81 KB
  • 文档页数:6

HQL(Hibernate Query Language) Hibernate操作对象(实体类)达到操作数据库表的持久化的一种技术,其实就是对JDBC进行封装让我们使用面向对象的思维去操作关系型数据库。

编写HQL语句注意事项
关键字select update from where等sql关键字不区分大小写
操作实体类对象以及实体类属性必须区分大小写。

操作的是员工表和部门表
员工表
部门表
前提工作[新建web工程添加hibernate支持jar文件和数据库支持jar文件]
编写实体类
编写映射文件xxx.hbm.xml 达到目的
将实体类名和对应数据库表进行映射
将实体类属性和对应的数据库表字段进行映射
编写配置文件[默认放在src/hibernate.cfg.xml]
(配置连接数据库的相关信息注意方言添加xxx.hbm.xml的映射文件的位置)
创建包进行分层
com.chinasofti.util放置工程的一些帮助类HibernateUtil.java 提供获取session对象
com.chinasofti.dao.impl 定义操作的实体类接口和操作的实体类接口的实现类
以上项目目录结构如上
为了简单暂时不演示junit单元测试
com.chinasofti.test
功能点1
查询所有部门信息?
Sql select * from dept;
Hql from Dept;--Dept是实体类对象
使用Query接口的list();
接口的实现类
List集合遍历使用Query接口的iterator();
接口的实现类
Iterator集合遍历
功能点2
根据部门名称查寻该部门相关信息(含地理位置) dname具有唯一性?
已知dname 获取loc
Sql select * from dept where dname=‘’;
HQL from Dept where dname=?; --分别是实体类类名和实体类属性
占位符的使用
方式一使用? 抢位置从【0】开始
方式二使用命名参数查询抢位置:别名
功能点3
动态查询条件最多有3个条件但不一定三个条件都有
注意:string StringBuffer StringBulider三个区别?
实现动态设置参数的个数
操作员工表
职位是店员,如:job = ’CLERK’
工资大于1000元,如:salary > 1000
入职时间在1981年4月1日至1985年9月9日之间
select*from emp where job='CLERK'
select*from emp where job='CLERK'and sal>1000
select*from emp where job='CLERK'and sal>1000and hiredate >'1-4月-1981'and hiredate <'9-9月-1985'
String sql=”select*from emp where 1=1”;
StringBuffer sbf=new StringBuffer(sql);
if(job!=null){
sbf.append(“job=:job”);
}
if(sal!=null){
sbf.append(“sal=:sal”);
}
Sql oracle日期格式默认为dd-MM月-yyyy
select*from emp where job='CLERK'and sal>1000and hiredate >'1-4月-1981'and hiredate <'9-9月-1985'
动态查询将查询条件独立封装成一个pojo类(java一个普通类)
Hql用户输入参数日期格式为yyyy-MM-dd
练习
1)查询租房系统中符合以下条件的房屋信息:
•标题中包括“中关村”字样
•房屋面积大于80平米
2)根据租金、联系人以及发布日期等条件使用动态参数绑定方式查询租房系统中的房屋信息。

查询条件是:(动态查询)
•租金小于2000元
•联系人是李阳
•发布日期为近一个月内
Java.util.Date
Java.sql.Date
Mysql获取日期的加减
-- SELECT DATE_SUB("1998-02-02", INTERVAL 1 MONTH);
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
Oracle日期的加减
select add_months(sysdate,-1)from dual;
功能点4
分页查询
首页要得到每页显示的记录数→总页数←获取总记录数
每页显示的记录数int pageSize=4;
获取总记录数count select(列名) * from 表名;21条
总页数6
当前页currentPage=1;
TotalPage =(count%pageSize==0)?count/pageSize:Count/pageSize+1; TotalPage=Math.ceil(count/(double)pageSize);
Sql语句rownum伪类子查询嵌套
第一页03pageSize*(currentPage-1) 0
第二页47 4
第三页8 11 8
Query接口setFirstResult(); //从哪条记录开始查询
setMaxResult();//总共查询多少条记录
练习House表
•每页输出3条记录
•每条记录显示用户的用户名和电话。