HQL 参数绑定、唯一结果、分页、投影总结(上)
我们先总结一下HQL语句常用语法:
- from子句:;
- select子句:用于选取对象和属性;
- where子句:用于表达查询语句的限制条件;
- 使用表达式:一般用在where子句中;
- order by子句:用于排序;
下面根据我的某个项目的一张表进行总结才学习的HQL查询:
1、准备数据:
数据库(Oracle):
--类型表
create table tb_type(
id number(4) not null primary key,
typename varchar2(10) )
--添加测试数据
insert into tb_type
values
(1,'喜剧');
insert into tb_type
values
(2,'动作');
insert into tb_type
values
(3,'爱情');
insert into tb_type
values
(4,'动漫');
--dvd信息表 create table tb_dvd
(
id number(4) not null,
name varchar2(20) not null,
star varchar2(18) not null,
intro varchar2(400) not null,
price number(2) not null,
num number(4) not null,
src varchar2(200) not null,
typeid number(2) not null ) --创建外键
alter table tb_dvd add constraint fk_dvd
foreign key(typeid) referencing tb_type(id); --创建索引
create sequence seq_dvdindex;
DVD表
2、配置DVD与HIbernate的映射关系
(一)在HQL查询语句中绑定参数:
两种方式:
1、占位符:“?”
hql="from DVDEntity as where name like ?";
query.setParameter(0, "%"+emp.getEname()+"%");
2、别名
hql="from DVDEntity as where name like :name";
query.setParameter("name", "%"+emp.getEname()+"%");
query拥有很多设置参数的方法:
setDouble()、setInteger()....等等
我比较喜欢使用上面演示代码提到的setParameter():设置参数;不需要指定参数类型,相当方便
(二)uniqueResult:
query查询到的是一个结果集,有和resultSet的异曲同工之妙!
query.list()和.iteator()都是一系列数据,这里有人会问了,如果我知道查询结果只有可能是一条结果,那么query提供这样的方法了吗?
sure,query.uniqueResult()返回唯一结果,这样就不浪费资源了;
语法:
Test test=(Test)query.uniqueResult();
(三) 分页
分页查询:
下篇详记!
(四) 投影&动态查询
什么是投影:
有时候并不需要查询对象的所有属性,在没有学习hibernate框架钱,我们使用封装实体类,将需要的数据封装在里面,他并不拥有完整的属性,但对于业务它里面的属性足够了,我们在这里将投影理解为封装一个业务需要的实体类,向业务传递数据,并且接受业务传回的数据,所以猿们弄出投影这么个东西
第一步:建立业务需要的实体类(DVDForPrint)
实体类里面需要一个有参构造方法,可以修改值
第二步:数据操作
hql="select new DVDForPrint(属性1,属性2) from DVDEntity as dvd where ";
List<DVDForPrint> list=query.list();
小总结:
多联系,慢慢的就能理解投影是什么了,不好解释!
动态查询到底多动态:?
需要使用from子句 ,where子句, [ 可能会使用表达式,orderby子句 ]
代码如下:
这里我没有细化出dvdfroPrint实体类,直接使用的dvdentity对象
/**
* 动态查询dvd列表
* @param dvd
* @return
*/
public List<DVDEntity> getDvdByHiber(DVDEntity dvd){
List<DVDEntity> list=new ArrayList<DVDEntity>();
//hql
StringBuffer hql=new StringBuffer("from DVDEntity where 1=1");
try {
conf=new Configuration().configure();
factory=conf.buildSessionFactory();
session=factory.openSession();
query=session.createQuery(appendHql(dvd,hql).toString());
//指定dvd对象
query.setProperties(dvd);
list=query.list();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{ session.close();
} return list; }
/**
* 拼接hql
* @param dvd
* @param hql
* @return
*/
private StringBuffer appendHql(DVDEntity dvd,StringBuffer hql){
if(dvd.getName()!=null){
hql.append(" and name like :name"); }if(dvd.getIntro()!=null){
hql.append(" and intro like :intro"); }if(dvd.getStar()!=null){
hql.append(" and star like :star"); }if(dvd.getPrice()!=null){
hql.append(" and price between :starPrice and :endPrice"); }if(dvd.getTypeId()!=null){
hql.append(" and typeid=:typeid"); }
if(dvd.getNum()!=null){
if(dvd.getNum()>0){
hql.append(" order by num desc"); } }
return hql; }
经验总结:
暂无
HQL 参数绑定、唯一结果、分页、投影总结(上)的更多相关文章
- HQL 参数绑定、唯一结果、分页、投影总结(下)
分页: 在用hibernate封装的分页方法前,我们先回顾一下,Oracle里面原生分页做法 --分页查询 --(pageNo-1)*pagesize=起始行 pageNo*pagesize=结束行 ...
- SpringMVC中的参数绑定总结
众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...
- 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定
众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...
- Spring Boot 构造器参数绑定,越来越强大了!
在之前的文章:Spring Boot读取配置的几种方式,我介绍到 Spring Boot 中基于 Java Bean 的参数绑定,在一个 Java Bean 类上用 @ConfigurationPro ...
- SpringMVC-简单参数绑定
SpringMVC-简单参数绑定 众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在 ...
- day36 03-Hibernate检索方式:排序、参数绑定、投影查询
排序之后是分页查询. 检索单个对象 还可以进行参数的绑定. HQL的参数绑定,按参数名称绑定或者是按参数位置绑定. 还可以用投影的操作,投影的操作是只查询这里面的某几个属性.只查询某一个属性,查询多个 ...
- Hibernate HQL查询的参数绑定
参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...
- hibernate之参数绑定
hibernate之参数绑定 ---------- 我们应该拒绝SQL(或HQL)的拼装,应该永远不要编写这样的代码,有这很严重的安全问题,众所周知的SQL注入.我们可以考虑参数绑定,在hiberna ...
- Hibernate参数绑定的五种方式
Hibernate参数绑定 参数绑定优点: (1)安全性 防止用户恶意输入条件和恶意调用存储过程 (2)提高性能 底层采用JDBC的PreparedStatement预定义sql功能,后期查询直接从缓 ...
随机推荐
- spring 连接各种数据源的配置(转载)
在 开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数 ...
- vi/vim
config file location 1. MinGW: C:\MinGW\msys\1.0\share\vim\vimrc 2. Linux: home config file content ...
- (转载)eclipse插件安装的四种方法
eclipse插件安装的四种方法 Eclipse插件的安装方法 1.在eclipse的主目录(ECLIPSE_HOME, 比如在我的机器上安装的目录是:D:\eclipse)有一个plugins的目录 ...
- iOS,图片处理
1.旋转图片 2.缩放图片 3.截取图片指定区域 4.祛除图片白色背景,弄成透明png 5.将UIView转化为UIImage,并转化为data和base64 6.将视频一帧(CMSampleBuff ...
- RDIFramework.NET 框架之组织机构权限设置
RDIFramework.NET 框架之组织机构权限设置 对于某些大型的企业.信息系统,涉及的组织机构较多,模块多.操作权限也多,对用户或角色一一设置模块.操作权限等比较繁琐.我们可以直接对某一组织机 ...
- RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.6 模块(菜单)管理 -Web部分 模块(菜单)管理是整个框架的核心,主要面向系统管理人员与开发人员,对普通用户建议不要授 ...
- [Android Tips] 15. Enforcing spaces in string resources
解决方案 使用双引号括起来 使用空格符的 unicode 编码 \u0200 ref Enforcing spaces in string resources How to put space cha ...
- Life is hard
Life is hard, always so.If there's anything to give you a hard life with sunshine and warmth, please ...
- 二、Java基础--02
作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). ...
- 微信开发那点事(No.001)
MXS&Vincene ─╄OvЁ &0000024─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...