Hibernate查询方法总结
1. HQL查询
后面是表名
Person; from
后面是类。可以对类起别名,有两种方法。hql:
from Person p
hql:from
Person
as p
Session s = sessionFactory.openSession();
String strQuery = "from Person where name=:name";
Query query = s.createQuery(strQuery);
query.setString("name", "张三");
List<Person> lst = query.list();
for(Person p : lst){
<span style="white-space:pre"> </span>System.out.println(p);
}
适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
2. Criteral查询
Session s = sessionFactory.openSession();
Criteria criteria = s.createCriteria(Person.class);
criteria.add(Restrictions.eq("name", "张三"));
List<Person> lst = criteria.list();
for(Person p : lst){
<span style="white-space:pre"> </span>System.out.println(p);
}
适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。
3. DetachedCriteria查询
private List<Person> dc(DetachedCriteria dc){
<span style="white-space:pre"> </span>Session s = sessionFactory.openSession();
Criteria criteria = dc.getExecutableCriteria(s);
return criteria.list();
}
DetachedCriteria dc = DetachedCriteria.forClass(Person.class);
dc.add(Restrictions.eq("name", "张三"));
List<Person> lst = dc(dc);
for(Person p : lst){
<span style="white-space:pre"> </span>System.out.println(p);
}
适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。
缺点:适用面较HQL有限。
4. Example 查询
Person p = new Person();
p.setName("张三");
//p.setName("张%");
Session s = sessionFactory.openSession();
Criteria c = s.createCriteria(Person.class);
Example example = Example.create(p);
example.excludeProperty("age");//排除年龄属性
example.excludeProperty("birthDay");
example.excludeProperty("id");
//example.enableLike();//启用模糊查询
List<Person> list = c.add(example).list();
for(Person p1 : list){
System.out.println(p1);
}
适用情况:面向对象操作。
缺点:适用面较HQL有限,不推荐。
5.
sql查询
Session s = sessionFactory.openSession();
String strQuery = "select * from person where pname=:name";//条件应为表的属性
Query query = s.createSQLQuery(strQuery).addEntity(Person.class);
//java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to hibernate.entity.Person
query.setString("name", "张三");
List<Person> list = query.list();
for(Person p1 : list){
System.out.println(p1);
}
适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法
缺点:破坏跨平台,不易维护,不面向对象,查询条件的属性应和平常的SQL一样,采用表的属性。
6. 命名查询
<?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="hibernate.entity.Person" table="person">
<id name="id" column="pid"></id>
<property name="name" column="pname"></property>
<property name="birthDay" type="date" ></property>
<property name="age"></property>
</class>
<query name="getPersonByName">
<![CDATA[from Person where name=:name]]>
</query>
</hibernate-mapping>
Session s = sessionFactory.openSession();
Query HQLquery = s.getNamedQuery("getPersonByName");
HQLquery.setString("name", "张三");
List<Person> list = HQLquery.list();
for(Person p1 : list){
System.out.println(p1);
}
适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。
缺点:不面向对象。基于hql和sql,有一定缺陷。
上述六种查询方法,HQL查询,SQL查询,命名查询比较好用。
Hibernate查询方法总结的更多相关文章
- Hibernate 查询方法
1.简单查询: public User select(User user) { User newUser; try { newUser = (User) session.get(User.class, ...
- J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())
J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate()) 当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...
- hibernate查询竟然有6种方法
hibernate查询的6种方法 1.HQL查询 2.对象化查询Criteria方法 3.动态查询DetachedCriteria 4.例子查询 5.sql查询 6.命名查询 1.HQL查询 stat ...
- Hibernate查询出现java.lang.IllegalArgumentException异常解决方法
Hibernate查询出现java.lang.IllegalArgumentException. 异常信息如下:java.lang.IllegalArgumentException at ...
- Hibernate查询对象的方法浅析
Hibernate 查询对象是根据对象的id查询的,只要你有id (id唯一),则无论你是否其他字段与传过来的对象一致,都会查到该id在数据库对应的对象.若是在关联查询中,所关联表的id为空,即所查表 ...
- Hibernate查询
HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...
- hibernate查询方式
hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...
- 六种方式实现hibernate查询
最近在学习Hibernate的基本内容,刚好在项目中有用到,基本上都是用到哪就学哪. 今天看看六种方式实现hibernate查询......... 分别是HQL查询,对象化查询Criteria方法,动 ...
- 记录使用Hibernate查询bean中字段和数据库列类型不匹配问题
今天在工程中遇到Hibernate查询的时候,bean中的字段和数据库中的字段不符合(bean中有pageTime字段,但是数据库中没有此列)报错问题. 具体问题环境: 在auto_off表中,off ...
随机推荐
- aspx页面中, <%= % > 与 <%# % > 的区别
关于这个问题,在多数的 ASP.NET 的教材中,都提到了一些. <%= % >与 <%# % >的区别在于:绑定时机不同, <%# % >是在控件调用DataBi ...
- 【python】python的二元表达式和三元表达式
二元表达式 x,y=4,3if x>y: s = yelse: s= x print s x if x<y else y 三元表达式: >>> def f(x,y): ...
- E8.ITSM IT运维服务管理系统
一. IT运维面临问题 随着企业信息化项目若干年以来的建设积累,IT资产日趋庞大,以及内外部监管部门对IT运维的要求也越来越严格规范,业务部门对企业的IT运维管理也提出了更高的要求. IT ...
- log4N配置方式
方式一. <log4net> <!-- 启动日志 --> <appender name="PayAppender" type="log4ne ...
- iOS开发之自定义控制器切换
iOS8以后, 苹果公司推出了UIPresentationController, 通过其(presentedController 和 presentingController)来控制modal控制器操 ...
- Oracle XE修改默认HTTP端口8080
打开SQL*Plus控制台.用sys或者system登陆.然后运行: begin dbms_xdb.sethttpport('9999'); end; / 搞定.
- linux下的ImageMagick安装方法
linux下的ImageMagick安装方法 由于没有图形化界面的支持,在Linux(CentOS 6.4 x64)上的配置相对Windows XP还是麻烦了一点. 1.下载ImageMagi ...
- 使用 Cloud Insight SDK 监控北京空气质量!
现在越来越多的 App 都开始有广告了.特别是空气质量监测,和天气类的 App,广告还是蛮多的,眼花缭乱,真是够了. 最近刚好在用一款系统监控工具 Cloud Insight,它提供的 SDK 可以把 ...
- [转贴]C编译过程概述
http://my.oschina.net/apeng/blog/105245 C 编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是G ...
- Python3整理文件
晚上打算把播放器下载下来的音乐拷贝到mp3里边,但是它是如下形式存放的,相当头痛…… 作为程序员,想到使用python来遍历这个目录,并将有大于限制的音乐文件拷贝到指定目录,相关实现代码如下: # a ...