写hql语句与不写hql语句的区别?

写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成。

不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成。

二者选用的时机:

不写hql语句,有时比较方便,在不考虑复杂的查询的情况下,可以使用,此方法把某些Hibernate的方法封装起来,不灵活。

写hql语句,复杂的业务逻辑,建议使用,灵活方便。

以下通过俩种方法的对比来着重介绍一下hibernate不写hql的一种简单用法。

写hql语句:

具有丰富的灵活性,可以提供强大的查询功能。

如:String hql = “ from User “ ,查询所有的User实体类所对应的数据库字段。

Session session = this.getCurrentSession();

String hql = " from User ";

Query q = session.createQuery(hql);

List<User> users = q.list();

return users;

如:String hql= “ update User user set user.age=22 where user.age=12 ”;更新User实体类所对应的数据记录。

Session session = this.getCurrentSession();

String hql = " update User user set user.age=22 where user.age=12 ";

Query q = session.createQuery(hql);

q.uniqueResult();

return null;

如:String hql=” delete from User user where user.age=19 ”;  删除User实体类所对应的数据记录。

Session session = this.getCurrentSession();

String hql = " delete from User user where user.age=? ";

Query q = session.createQuery(hql);

q.setParameterList("age", age);

q.executeUpdate();

return null;

不写hql语句:

查询User实体类所对应的数据库字段数据,可以用一下方法:

//得到User对应的数据中的所有的数据记录

public List<User> getDepList()throws Exception{

DetachedCriteria dc =  DetachedCriteria.forClass(User.class);

return getHibernateTemplate().find(dc);

}

DetachedCriteria 为离线查询。

若要构造相应的条件查询,可以如下所示:

public List<User> getDepList()throws Exception{

DetachedCriteria dc =  DetachedCriteria.forClass(User.class);

if(user != null){

if(user .getName()!=null && !user .getName().equals("")){

dc.add(Restrictions.ilike("name", user.getName(), MatchMode.ANYWHERE));

}

if(user.getTele()!=null && !user.getTele().equals("")){

dc.add(Restrictions.ilike("tele",user.getTele(), MatchMode.ANYWHERE));

}

}

return getHibernateTemplate().find(dc);

}

Restrictions为投影查询,里面封装了各种查询条件,如上面,ilike()表示模糊查询,里面的三个参数,分别代表“数据库字段”、“所对应的字段值”、“模糊查询匹配模式”。

另外模板中封装了好多关于查询条件的方法:

若要增加一条记录,可以参照以下方法:

getHibernateTemplate().save(user);

直接用模板保存一个实体类,在此之前应把数据封装到user实体类中。

另外模板中还封装了其他的一些save类似的方法:

若要修改表中某条记录,可以参照以下方法:

getHibernateTemplate().update(user);

同样用模板直接更新即可。

另外模板中还有封装了一些和更新有关的类似的方法:

若要删除表中的某条记录,可以参照如下的方法:

getHibernateTemplate().delete(user);

同样直接使用模板即可完成。

另外模板中还有封装了一些和删除有关的类似的方法:

由于知识有限,写的比较单薄,望指导赐教。

Hibernate写hql语句与不写hql语句的区别?的更多相关文章

  1. 用Hibernate框架把hql生成可执行的sql语句-Oracle方言

    引言:为什么这样的需求,源自公司项目需要,公司的项目使用java的struts2+spring2.5+oracle中间件tuxedo,数据库用的是Oracle,但由于不直接连接数据库,用中间件处理的方 ...

  2. Hibernate 问题,在执行Query session.createQuery(hql) 报错误

    在配置文件中加入 <prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classi ...

  3. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  4. hibernate对连接池的支持和HQL查询

    hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...

  5. Hibernate插入、查询、删除操作 HQL

    Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到SessionFactory: SessionFactory sessionFactory=new C ...

  6. 转>>在同一个sql语句中如何写不同条件的count数量

    今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...

  7. 向已写好的多行插入sql语句中添加字段和值

    #region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...

  8. 在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女,sql语句该怎么写

    在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女, sql语句该怎么写 select  case sex when 'm' then '男' else '女'   a ...

  9. SQL语句利用日志写shell

    outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...

随机推荐

  1. SpringBoot消失的Web.xml

    Filter 过滤器作为web.xml中重要的一部分,有着相当高的出场率,SpringBoot会默认注册几个Filter ApplicationContextHeaderFilter Characte ...

  2. 从dataset表中获取某一列的所有值方法

    原文发布时间为:2008-07-31 -- 来源于本人的百度文章 [由搬家工具导入] 可以datarow遍历所有行即可,如下:pubauthor这个表中的au_lname的所有值加到listbox上面 ...

  3. Redis命令行之String

    一.Redis之String简介 1. String是redis最基本的数据类型,一个key对应一个value. 2. String是二进制安全的,可以包含任何数据,例如图片或序列化的对象. 3. S ...

  4. golang 进程、线程、协程 简介

    https://www.cnblogs.com/shenguanpu/archive/2013/05/05/3060616.html https://studygolang.com/articles/ ...

  5. ZOJ 3717 二分+2-sat判定。

    好久没有2-sat了,此题当复习之用,二分求最大值+2-sat判断可行,此题主要跪于题意:The results should be rounded to three decimal places. ...

  6. 王垠 :写给支持和反对《完全用Linux工作》的人们 ( 2004/8/26)

    在一阵阵唾骂和欢呼声中,<完全用linux工作>被转载到了天涯海角.很多人支持我,也有很多人唾骂我.我不知道它是怎样流传到那么多地方,其实 我不知道它都被转到哪里去了…… 我知道现在这篇文 ...

  7. luogu P2296 寻找道路

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  8. Tar压缩文件

    [root@test /root]# tar [-zxcvfpP] filename   [root@test /root]# tar -N 'yyyy/mm/dd' /path -zcvf targ ...

  9. VisualSVN Server 导入已存在的库

    http://blog.csdn.net/lidatgb/article/details/7984220         早些时候建立过一个SVN Server的库,后来觉得库的名字太长了,随意换了一 ...

  10. ElasticSearch生产模式开发模式的区分

    ElasticSearch生产模式开发模式的区分 network.host: 0.0.0.0 如果network.host不是localhost就是生产模式, 开发模式中的warning就是生产模式中 ...