Hibernate写hql语句与不写hql语句的区别?
写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语句的区别?的更多相关文章
- 用Hibernate框架把hql生成可执行的sql语句-Oracle方言
引言:为什么这样的需求,源自公司项目需要,公司的项目使用java的struts2+spring2.5+oracle中间件tuxedo,数据库用的是Oracle,但由于不直接连接数据库,用中间件处理的方 ...
- Hibernate 问题,在执行Query session.createQuery(hql) 报错误
在配置文件中加入 <prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classi ...
- hibernate框架学习之数据查询(HQL)
lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...
- hibernate对连接池的支持和HQL查询
hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...
- Hibernate插入、查询、删除操作 HQL
Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到SessionFactory: SessionFactory sessionFactory=new C ...
- 转>>在同一个sql语句中如何写不同条件的count数量
今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...
- 向已写好的多行插入sql语句中添加字段和值
#region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...
- 在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女,sql语句该怎么写
在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女, sql语句该怎么写 select case sex when 'm' then '男' else '女' a ...
- SQL语句利用日志写shell
outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...
随机推荐
- Fruit Ninja
Fruit Ninja 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Fruit Ni ...
- LA 4728 旋转卡壳算法求凸包的最大直径
#include<iostream> #include<cstdio> #include<cmath> #include<vector> #includ ...
- Python入门--7--处理数据时学习到的东西
一.数据导入(这里使用的是pands包) import pands as pd wenjian = pd.read_csv('路径') 二.数据变换 print wenjian.head() # ...
- 三种Model模式
目前项目中可能出现的三种Model模式,对于我们现在开发的一个项目,我觉得使用DDD的思想来设计模型比较清晰,使用DDD的思想把模型model分成了如下三种:ViewModel,它与页面相关,Doma ...
- Spring实战Day5
3.3自动装配bean的歧义性 产生歧义的原因 找到多个符合条件的组件,如下注入talent时会有两个满足条件的组件 解决方法 标示首选的bean,但是同时标示两个或多个同样会存在歧义 自动装配标示P ...
- Java中Arrays类与Math类
Arrays(数组工具类) Java中已经封装好的类,提供大量静态方法供用户对数组的使用. 导包:import java.util.Arrays 1.Arrays.toString(数组) //返回值 ...
- 国内可用的SVN和Git代码托管网站汇总
Coding https://coding.NET/help/ 支持Git,每个项目免费1G空间,私人. http://www.svn999.com/ [推荐] 国内的,免费的,申请很方便,而且访问速 ...
- awk批量处理文件,对第一列去重并,累加第二列数值,打印一二列存入新文件
awk '{if(NR>1)a[$1]+=$2}END{for(i in a)printf "%s\t %d\n",i,a[i]}' querylog* > total ...
- Java并发编程(三)volatile域
相关文章 Java并发编程(一)线程定义.状态和属性 Java并发编程(二)同步 Android多线程(一)线程池 Android多线程(二)AsyncTask源代码分析 前言 有时仅仅为了读写一个或 ...
- 模拟 nbut1225 NEW RDSP MODE I
传送门:点击打开链接 题意:输入n.m,x.刚開始有一个1~n的排列.然后定义了一种操作.是将数组中的偶数位数字选出来,依照顺序放到数组最前面,奇数位依照顺序放到偶数位的后面,进行m次这种操作.输出之 ...