我们先总结一下HQL语句常用语法:

  1. from子句:;
  2. select子句:用于选取对象和属性;
  3. where子句:用于表达查询语句的限制条件;
  4. 使用表达式:一般用在where子句中;
  5. 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 参数绑定、唯一结果、分页、投影总结(上)的更多相关文章

  1. HQL 参数绑定、唯一结果、分页、投影总结(下)

    分页: 在用hibernate封装的分页方法前,我们先回顾一下,Oracle里面原生分页做法 --分页查询 --(pageNo-1)*pagesize=起始行 pageNo*pagesize=结束行 ...

  2. SpringMVC中的参数绑定总结

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

  3. 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

  4. Spring Boot 构造器参数绑定,越来越强大了!

    在之前的文章:Spring Boot读取配置的几种方式,我介绍到 Spring Boot 中基于 Java Bean 的参数绑定,在一个 Java Bean 类上用 @ConfigurationPro ...

  5. SpringMVC-简单参数绑定

    SpringMVC-简单参数绑定    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在 ...

  6. day36 03-Hibernate检索方式:排序、参数绑定、投影查询

    排序之后是分页查询. 检索单个对象 还可以进行参数的绑定. HQL的参数绑定,按参数名称绑定或者是按参数位置绑定. 还可以用投影的操作,投影的操作是只查询这里面的某几个属性.只查询某一个属性,查询多个 ...

  7. Hibernate HQL查询的参数绑定

    参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...

  8. hibernate之参数绑定

    hibernate之参数绑定 ---------- 我们应该拒绝SQL(或HQL)的拼装,应该永远不要编写这样的代码,有这很严重的安全问题,众所周知的SQL注入.我们可以考虑参数绑定,在hiberna ...

  9. Hibernate参数绑定的五种方式

    Hibernate参数绑定 参数绑定优点: (1)安全性 防止用户恶意输入条件和恶意调用存储过程 (2)提高性能 底层采用JDBC的PreparedStatement预定义sql功能,后期查询直接从缓 ...

随机推荐

  1. uglifyjs压缩批处理

    uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基于node的,还据说比Google Closure Compiler更带感. uglifyjs压缩批处理我们不可能每次都打开cm ...

  2. MVC控制器取参数值

    1.这个方法是获取提交表单里的参数值,也就是有name="xxx"的属性的表单控件的值 FormCollection传值 public ActionResult Login(For ...

  3. MySQL创建数据库并赋予权限

    1.创建一个mysql用户并设置密码create user 'MySql用户名'@'localhost' identified by '密码';2.限制账户资源grant usage on *.* t ...

  4. angularJS支持的事件

    AngularJS提供可与HTML控件相关联的多个事件.例如ng-click通常与按钮相关联.以下是AngularJS支持的事件. ng-click ng-dbl-click ng-mousedown ...

  5. linux查看是否被入侵

    一.检查系统日志 lastb命令检查系统错误登陆日志,统计IP重试次数 二.检查系统用户 1.cat /etc/passwd查看是否有异常的系统用户 2.grep “0” /etc/passwd查看是 ...

  6. Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形) .

    1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, ...

  7. Nginx配置SSI

    一.什么是SSISSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均 ...

  8. function 类型

    一.函数的声明方式 1.普通的函数声明 function box(num1,num2){ return num1+num2; }alert(box(1,2)); 2.使用变量初始化函数 var box ...

  9. SQLite Expert 删除表数据并重置自动增长列

    用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 2.重置自动增长列 where name='t_Records' /*name :是表名 ...

  10. C#学校班级自动升级实现代码

    代码逻辑如下: //班级自动升级 //获取该学校还没有毕业的班级 List<ClassInfoes> classinfoeslist = classinfoesbll.GetList(Sc ...