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功能,后期查询直接从缓 ...
随机推荐
- mac El Capitan 10.11.6
http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1702502&authorid=4532202&page=1
- xmlunit
一个比较方便但也是有点坑的工具. 它能把<struct><int>3</int><boolean>false</boolean></s ...
- iOS 横竖屏切换(应对特殊需求)
iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UI ...
- WordPress基础:极简安装教程
1.下载WordPress 2.将解压后的文件夹,放到网站根目录,并重命名为你喜欢的目录如:w, 3.重命名文件wp-config-sample.php 为 wp-config.php,并进行配置 4 ...
- [转]倍数提高工作效率的 Android Studio 奇技
转自:http://android.jobbole.com/81687/ 倍数提高工作效率的 Android Studio 奇技 2015/10/08 · 技术分享 · 4 评论· Android S ...
- Linux Samba服务器配置
Linux系统默认已经安装了Samba,但是没有安装Samba服务: 1,先查看安装情况:rpm -qa|grep samba 根据系统的安装情况选择下载或者通过光驱安装所缺的rpm包. 我的安装情况 ...
- PartialViewResult不鸟_ViewStart.cshtml
概述 在ASP.NET MVC中,对于Action中得到的ActionResult如果是一个ViewResult对象,那么在进行View呈现时,则会先执行_ViewStart.cshtml,然后再去执 ...
- DNS视图以及日志压力测试
1 访问控制列表 配置在/etc/named.conf文件的最顶端 acl innct { 192.168.1.0/24; 127.0.0.0/8; }; ...
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
基于docker+etcd+confd + haproxy构建高可用.自发现的web服务 2016-05-16 15:12 595人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主 ...
- opencv实现图像邻域均值滤波、中值滤波、高斯滤波
void CCVMFCView::OnBlurSmooth()//邻域均值滤波 { IplImage* in; in = workImg; IplImage* out = cvCreateImage( ...