- 浏览: 466128 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (111)
- 数据库 (8)
- java (24)
- BI (1)
- tomcat (3)
- javascript/css (8)
- 服务架构 (1)
- mule (6)
- cas (4)
- mondrian (4)
- webservice (1)
- SOA (3)
- Lucene/HibernateSearch (2)
- Linux (15)
- 操作系统 (3)
- hibernate (2)
- jbpm (1)
- apache (1)
- phpstudy (1)
- hadoop (27)
- hive (7)
- hbase (8)
- svn (1)
- eclipse (3)
- mahout (1)
- mail (1)
- oracle (1)
- mysql (4)
- axis2 (1)
- python (2)
- kafka (1)
- lucene (1)
- nutch (1)
- spark (2)
- idea (2)
- flume (0)
- ubuntu (1)
- pheonix (2)
- drill (2)
- tez (4)
- pig (1)
- tensorflow (1)
最新评论
-
zhangyou1010:
zhangyou1010 写道请教,我执行mount -t n ...
NFS挂载hdfs到本地 -
zhangyou1010:
请教,我执行mount -t nfs -o vers=3,pr ...
NFS挂载hdfs到本地 -
hengfengyiyingdong:
为什么我查出来的hbase数据都是base64编码的? 我保存 ...
apache drill 0.8.0 单机/分布式安装测试 -
107x:
不错,谢谢!
Hive metastore三种存储方式 -
duguyiren3476:
确实不怎么快,httpfs的上传你可以理解为普通的httpup ...
hadoop2.5.2配置httpfs服务
hibernate查询的6种方法。分别是HQL查询
,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询
。
如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是
从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。
HQL查询
HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:
static
void
query(String name){
Session s = null ;
try {
s = HibernateUtil.getSession();
// from后面是对象,不是表名
String hql = " from Admin as admin where admin.aname=:name " ; // 使用命名参数,推荐使用,易读。
Query query = s.createQuery(hql);
query.setString( " name " , name);
List < Admin > list = query.list();
for (Admin admin:list){
System.out.println(admin.getAname());
}
} finally {
if (s != null )
s.close();
}
}
Session s = null ;
try {
s = HibernateUtil.getSession();
// from后面是对象,不是表名
String hql = " from Admin as admin where admin.aname=:name " ; // 使用命名参数,推荐使用,易读。
Query query = s.createQuery(hql);
query.setString( " name " , name);
List < Admin > list = query.list();
for (Admin admin:list){
System.out.println(admin.getAname());
}
} finally {
if (s != null )
s.close();
}
}
适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
对象化查询Criteria方法 :
static
void
cri(String name,String password){
Session s = null ;
try {
s = HibernateUtil.getSession();
Criteria c = s.createCriteria(Admin. class );
c.add(Restrictions.eq( " aname " ,name)); // eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq( " apassword " , password));
List < Admin > list = c.list();
for (Admin admin:list){
System.out.println(admin.getAname());
}
} finally {
if (s != null )
s.close();
}
}
Session s = null ;
try {
s = HibernateUtil.getSession();
Criteria c = s.createCriteria(Admin. class );
c.add(Restrictions.eq( " aname " ,name)); // eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq( " apassword " , password));
List < Admin > list = c.list();
for (Admin admin:list){
System.out.println(admin.getAname());
}
} finally {
if (s != null )
s.close();
}
}
适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。
动态分离查询DetachedCriteria
static
List dc(DetachedCriteria dc) {
Session s = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(s);
List rs = c.list();
s.close();
return rs;
}
Session s = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(s);
List rs = c.list();
s.close();
return rs;
}
DetachedCriteria dc
=
DetachedCriteria.forClass(User.
class
);
int id = 1 ;
if (id != 0 )
dc.add(Restrictions.eq( " id " , id));
Date age = new Date();
if (age != null )
dc.add(Restrictions.le( " birthday " , age));
List users = dc(dc);
System.out.println( " 离线查询返回结果: " + users);
int id = 1 ;
if (id != 0 )
dc.add(Restrictions.eq( " id " , id));
Date age = new Date();
if (age != null )
dc.add(Restrictions.le( " birthday " , age));
List users = dc(dc);
System.out.println( " 离线查询返回结果: " + users);
适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。 缺点:适用面较HQL有限。
例子查询
static
List example(User user) {
Session s = HibernateUtil.getSession();
List < User > users = s.createCriteria(User. class ).add(
Example.create(user)).list();
// List<User>
// users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
// .createCriteria("child").add((Example.create(user))).list();
return users;
}
Session s = HibernateUtil.getSession();
List < User > users = s.createCriteria(User. class ).add(
Example.create(user)).list();
// List<User>
// users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
// .createCriteria("child").add((Example.create(user))).list();
return users;
}
适用情况:面向对象操作。 缺点:适用面较HQL有限,不推荐。
sql查询
static
List sql() {
Session s = HibernateUtil.getSession();
Query q = s.createSQLQuery( " select * from user " ).addEntity(User. class );
List < User > rs = q.list();
s.close();
return rs;
}
Session s = HibernateUtil.getSession();
Query q = s.createSQLQuery( " select * from user " ).addEntity(User. class );
List < User > rs = q.list();
s.close();
return rs;
}
适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法 缺点:破坏跨平台,不易维护,不面向对象。
命名查询
static
List namedQuery(
int
id) {
Session s = HibernateUtil.getSession();
Query q = s.getNamedQuery( " getUserById " );
q.setInteger( " id " , id);
return q.list();
}
Session s = HibernateUtil.getSession();
Query q = s.getNamedQuery( " getUserById " );
q.setInteger( " id " , id);
return q.list();
}
<?
xml version="1.0" encoding="utf-8"
?>
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping >
< class name ="com.sy.vo.User" table ="user" catalog ="news" >
</ class >
<!-- 命名查询:定义查询条件 -->
< query name ="getUserById" >
<![CDATA[ from User where id=:id ]]>
</ query >
<!-- 命名查询中使用sql,不推荐使用,影响跨数据库
<sql-query name="getUserById2">
<![CDATA[select * from User where ]]>
</sql-query> -->
</ hibernate-mapping >
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping >
< class name ="com.sy.vo.User" table ="user" catalog ="news" >
</ class >
<!-- 命名查询:定义查询条件 -->
< query name ="getUserById" >
<![CDATA[ from User where id=:id ]]>
</ query >
<!-- 命名查询中使用sql,不推荐使用,影响跨数据库
<sql-query name="getUserById2">
<![CDATA[select * from User where ]]>
</sql-query> -->
</ hibernate-mapping >
适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。 缺点:不面向对象。基于hql和sql,有一定缺陷。
发表评论
-
java转换音频视频
2014-01-08 15:10 2376感谢:http://tj007-bo.iteye.com/b ... -
jconsole监控tomcat
2013-12-12 12:32 1182Server端对tomcat启动脚本配置如下参数: 编辑${ ... -
StringUtils详细介绍
2013-04-12 16:49 1396StringUtils详细介绍 ... -
javamail的smtp方式发送邮件实例
2013-01-17 10:41 2700本实例为javamail发送smtp邮件实例和常见问题解决 ... -
压缩 HDFS 上的文件, 提供使用者下載
2012-09-06 13:48 1744(转)今天的進度是研究如何讓使用者透過網路來下載 HDF ... -
svn常见错误及解决办法
2012-09-04 12:49 37408这里有自己收集整理的关于SVN的东西,1——SVN基本使用手册 ... -
hbase常见错误及解决方法
2012-08-16 14:59 23381. 运行hbase shell 时错误:ERROR: org ... -
Hive metastore三种存储方式
2012-08-15 14:42 24729测试环境下Hive总出问题,metastore的配置有问题。抽 ... -
hive 安装运行错误及解决办法
2012-08-15 14:33 16241.hive> show tables;FAILED: ... -
Apache下403 Forbidden错误
2012-07-28 16:00 2052安装phpstudy2.0,安装完毕后可以访问测试的页面,重启 ... -
jbpm4常见 错误及解决方法
2012-07-26 11:13 17901. 结束实例错误 Configuration co ... -
Hibernate中cascade和inverse区别
2012-07-19 15:48 1615Hibernate中的inverse在表关 ... -
hibernate查询与缓存
2012-07-19 14:29 2466首先介绍get()和load()方法的区别: get()方 ... -
汉字和拼音转换工具
2012-07-18 10:36 1369两个Java版中文转汉语拼音工具 1. CnToS ... -
Yale CAS实践
2012-06-29 12:19 1839Yale CAS最佳实践 第一部分:配置篇 1. ... -
Hibernate Tools 的使用
2012-06-08 12:05 1408Hibernate Tools 的使用 由于myEclip ... -
编程不懂正则表达式,不如回家种红薯
2012-05-25 16:56 1258编程的大量工作都是在处理字符串,如验证输入、查找子串替换、解 ... -
学习Spring框架的技术内幕
2012-04-27 14:06 1281引述要学习Spring框架的技术内幕,必须事先掌握一些基本的J ... -
Java图片识别技术原理
2012-04-11 20:50 1699import java.awt.image.BufferedI ... -
JDK里的设计模式
2012-04-09 11:19 1012JDK里的设计模式 ...
相关推荐
本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...
在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...
在Hibernate中,自定义查询是扩展其功能的重要方式,能够帮助我们实现更复杂的数据库交互需求。本文将深入探讨Hibernate自定义查询的相关知识点。 一、Hibernate HQL查询 Hibernate Query Language (HQL) 是...
Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**:`INNER JOIN` 或 `JOIN` ```java String hql = "SELECT s.stuName, e.examScore FROM Student s JOIN Exam e ON s.stuID = e.stuID"; ``` 2....
2. **查询(Read)**:使用`Session`的`get()`或`load()`方法获取对象,或者使用`createQuery()`或`createSQLQuery()`方法执行HQL(Hibernate Query Language)或SQL查询。 ```java Student student = session.get...
Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria...
4. Criteria查询:提供了一种面向对象的方式来构建查询,比HQL更为灵活。 5. Query和Criteria API:提供了强大的查询能力,支持复杂的查询条件和结果集处理。 三、配置与初始化 Hibernate的配置文件(hibernate.cfg...
HQL 是 Hibernate 自定义的一种面向对象的查询语言,类似于 SQL,但更加面向对象。它可以方便地进行对象级别的查询,支持复杂的条件、分组、排序等操作,甚至能实现联接查询和子查询。 五、 Criteria 查询 除了 HQL...
【hibernate权威整理文档!...理解和掌握Hibernate的主要组件、配置以及查询方式,是Java开发者必备的技能之一。通过深入学习和实践,开发者可以更好地利用Hibernate来构建高效、稳定的持久层解决方案。
1. **用户登录验证**:通过Hibernate查询用户信息,并进行身份验证。 2. **商品信息管理**:使用Hibernate实现商品信息的增删改查操作。 3. **订单管理系统**:利用Hibernate处理订单数据,支持订单创建、更新和查询...
4. QueryTranslator:HQL查询的解析器,将HQL语句转化为SQL语句,是Hibernate查询处理的关键环节。 五、源码剖析 1. SessionImpl:实现Session接口的具体类,是与数据库交互的入口,包含了诸如save、update、...
如果默认的分页方式不能满足需求,例如在Oracle等不支持OFFSET的数据库中,可以自定义SQL查询实现分页。在Hibernate中,可以使用SQLQuery对象结合native SQL执行自定义分页。 六、优化分页性能 1. 使用索引:确保...
Hibernate是一种开源的对象关系映射(ORM)框架,它为Java程序员提供了一种面向对象的方式来处理数据库。通过使用Hibernate,开发者可以更加专注于业务逻辑而不是底层的数据库操作细节,这极大地简化了数据库访问的...
除了HQL,Hibernate还提供了Criteria API,提供了一种动态构建查询的方式。Criteria API允许开发者在运行时构造查询,灵活地处理复杂的查询需求。在3.1.x版本中,Criteria API进一步完善,增加了更多的检索条件和...
1. **对象关系映射(ORM)**: Hibernate是ORM的一种实现,它将Java对象与数据库表进行映射,使开发者可以用面向对象的方式来操作数据库。 2. **Configuration**: Hibernate配置文件(hibernate.cfg.xml)用于设置...
Criteria API 提供了一种更动态的查询方式,可以在运行时构建查询。它允许基于对象的查询,提供更灵活的查询构造,无需预先编写HQL字符串。 七、第二级缓存 Hibernate支持缓存机制,提高性能。第二级缓存可以跨会话...
Hibernate是一个强大的持久化框架,它通过提供一种对象-关系映射(ORM)机制,将Java对象与数据库中的记录进行关联。这使得开发者能够用面向对象的方式来处理数据库,提高了开发效率和代码的可维护性。Hibernate支持...
- **一对多映射**:通过外键或集合方式实现。 - **多对多映射**:通过中间表实现。 - **单表继承**:所有子类共享一张表。 - **多表继承**:每个子类对应一张表。 - **表每类继承**:每个类对应一张表。 ### 四、...
这种关系在数据库中通常通过主键外键关联实现,Hibernate提供了多种方式来建立和维护这种关系,例如使用`@OneToOne`注解。 **五、懒加载和乐观锁** `hibernate_lazy_for_single_end`和`hibernate_optimistic_...