二。Hibernate 查询 HQL、SQL方式
hibernate的查询
1.HQL方式:所有查询都是根据java对象名来完成,对象名替换表名
2.SQL方式:保留原来的sql查询风格
3.可以通过设置第一条和最大条数来实现各种数据库的分页查询
4.通过BaseDAO来实现dao的代码优化
实例1:hql、sql查询
Test.java
package com.dao; import java.util.Date;
import java.util.List; import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder; import com.pojo.Student; public class Test { public static void main(String[] args) {
// 配置对象,用来获取核心配置文件的
// 如果核心配置文件名是:hibernate.cfg.xml,并且该文件在src根目录下,configure()可以不带参数
Configuration configuration = new Configuration().configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
SessionFactory sf = configuration.buildSessionFactory(sr);
Session session = sf.openSession(); //1.hql:是hibernate的专用查询语句,是针对对象的查询方法,其中没有表名,全都是对象名
String hql = "from Student";
// String hql = "select count(*) from Student a";
Query query = session.createQuery(hql);
query.setFirstResult(5);
query.setMaxResults(5);
List<Student> list = query.list();
// System.out.println(list.get(0));
// for (Student stu : list) {
// System.out.println(stu.getClassId()+"\t"+stu.getStudentName());
// } //2.sql:用传统的sql语句来完成查询
String sql = "select * from Student_info";
SQLQuery squery = session.createSQLQuery(sql);
squery.addEntity(Student.class);//指明结果封装对象
squery.setFirstResult(5);
squery.setMaxResults(5);
List<Student> list2 = squery.list();
for (Student stu : list2) {
System.out.println(stu.getClassId()+"\t"+stu.getStudentName());
} session.flush();
session.close();
} }
实例2:写一个分页查询的dao方法
Test2.java
package com.dao;
import java.util.List;
import com.pojo.Student;
public class Test2 {
public static void main(String[] args) {
IStudentDAO stuDAO = new StudentDAO();
List<Student> list = stuDAO.queryStudentByPage(2, 5, "from Student");
for (Student stu : list) {
System.out.println(stu.getStudentName());
}
}
}
IStudentDAO.java
package com.dao;
import java.util.List;
import com.pojo.Student;
public interface IStudentDAO extends IBaseDAO<Student>{
public List<Student> queryStudentByPage(int index,int pagecount,String hql);
}
Student.java
package com.dao; import java.util.List; import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session; import com.pojo.Student; public class StudentDAO extends BaseDAO<Student> implements IStudentDAO{ @Override
public List<Student> queryStudentByPage(int index, int pagecount,String hql) {
Session session = getSession();
Query hq = session.createQuery(hql);
hq.setFirstResult((index-1)*pagecount);
hq.setMaxResults(pagecount);
List<Student> list = hq.list();
session.flush();
session.close();
return list;
} }
附:IBaseDao.java
package com.dao;
import java.util.List;
import org.hibernate.Session;
public interface IBaseDAO<T> {
Session getSession();
void saveObject(T t);
void delObject(T t);
void updateObject(T t);
List<T> queryObjectByHql(String hql);
List<T> queryObjectBySql(String sql, Class t);
}
BaseDao.java
package com.dao; import java.util.List; import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder; import com.pojo.Student; public class BaseDAO<T> implements IBaseDAO<T> {
public Session getSession() {
// 配置对象,用来获取核心配置文件的
// 如果核心配置文件名是:hibernate.cfg.xml,并且该文件在src根目录下,configure()可以不带参数
Configuration configuration = new Configuration().configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
SessionFactory sf = configuration.buildSessionFactory(sr);
Session session = sf.openSession();
return session;
} public void saveObject(T t) {
Session session = getSession();
session.save(t);
session.beginTransaction().commit();
session.close();
} public void delObject(T t) {
Session session = getSession();
session.delete(t);
session.beginTransaction().commit();
session.close();
} public void updateObject(T t) {
Session session = getSession();
session.update(t);
session.beginTransaction().commit();
session.close();
} public List<T> queryObjectByHql(String hql) {
Session session = getSession();
Query query = session.createQuery(hql);
List<T> list = query.list();
session.flush();
session.close();
return list;
} public List<T> queryObjectBySql(String sql,Class t) {
Session session = getSession();
SQLQuery sq = session.createSQLQuery(sql);
sq.addEntity(t);
List<T> list = sq.list();
session.flush();
session.close();
return list;
}
}
二。Hibernate 查询 HQL、SQL方式的更多相关文章
- Hibernate查询的六种方式
Hibernate查询的六种方式 分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate ...
- 《Java从入门到放弃》入门篇:hibernate查询——HQL
不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...
- Hibernate查询之SQL查询
转自: Hibernate还支持使用SQL查询,使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上.使用命名的SQL查询还可以将SQL语句放在配置文件中 ...
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
package com.ucap.netcheck.dao.impl; import java.util.ArrayList;import java.util.List; import org. ...
- Hibernate的查询语言之HQL(二)——Hibernate查询的from字句
from 是最简单的HQL语句,也是最基本的HQL语句.from 关键字后紧跟持久化类的类名.例如: from Person 表明从Person持久化类中取出全部的实例. 大部分时候,推荐位该Pers ...
- Hibernate 查询方式、JPA查询方式
hibernate 查询方式: OID 查询 对象导航查询 HQL 方式查询 QBC方式查询 原生SQL方式查询 JPA 查询方式: OID 查询 对象导航查询 JPQL 方式查询 CriteriaB ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate检索方式(HQL 检索方式,QBC 检索方式,本地 SQL 检索方式)
hibernate有五种检索方式,这儿用 单向的一对多的映射关系 例子,这儿有后三种的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 ...
- Hibernate(十二):HQL查询(一)
概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...
随机推荐
- 关于项目中ajax 操作 原生项目遇到的问题
单选框动态赋值 $('input[name=pszt][value='+val+']').attr("checked",true); 置顶的几种方式 window.scrollTo ...
- 开启全民窃听风云——C#智能录音录像录屏程序源码放送!
·引子 我这人从小有个坏毛病,就是喜欢偷窥别人隐私.当然,在道德上,我时刻要求自己做一名正人君子,只不过是心理上有这癖好罢了.所以我从小就对窃听.窃视.黑客技术.破解技术等疯狂着迷!实际上这也是我走上 ...
- Netty2:粘包/拆包问题与使用LineBasedFrameDecoder的解决方案
什么是粘包.拆包 粘包.拆包是Socket编程中最常遇见的一个问题,本文来研究一下Netty是如何解决粘包.拆包的,首先我们从什么是粘包.拆包开始说起: TCP是个"流"协议,所谓 ...
- GBDT和XGBOOST算法原理
GBDT 以多分类问题为例介绍GBDT的算法,针对多分类问题,每次迭代都需要生成K个树(K为分类的个数),记为\(F_{mk}(x)\),其中m为迭代次数,k为分类. 针对每个训练样本,使用的损失函数 ...
- 【TensorFlow篇】--Tensorflow框架可视化之Tensorboard
一.前述 TensorBoard是tensorFlow中的可视化界面,可以清楚的看到数据的流向以及各种参数的变化,本文基于一个案例讲解TensorBoard的用法. 二.代码 设计一个MLP多层神经网 ...
- C#多线程之旅~上车吧?
前言:前几天,写了一篇关于多线程使用的文章,[线程使用]用法得到不少博友的好评,博主这几天加班写文章,把剩下的高级使用给写完,期望可以得到博友的追赞吧,那么废话不多说,开始我们的C#高级用法之旅!! ...
- SpringSecurity设置角色和权限的注意点
概念 在UserDetailsService的loadUserByUsername方法里去构建当前登陆的用户时,你可以选择两种授权方法,即角色授权和权限授权,对应使用的代码是hasRole和hasAu ...
- [深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88)
[深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88) 个人主页--> https://xiaosongshine.github.io/ 项目g ...
- 微信小程序开发07-列表页面怎么做
接上文:微信小程序开发06-一个业务页面的完成 github地址:https://github.com/yexiaochai/wxdemo 我们首页功能基本完成,我对比了下实际工作中的需求,完成度有7 ...
- 解决WebMagic抓HTTPS时出现SSLException
访问我的博客 前言 在今年二月份在项目中引入了 WebMagic 技术,用来抓取合作方的书籍,详见之前文章:WebMagic之爬虫监控,这两天新接入了一个合作商,对方接口采取的是 HTTPS 协议,而 ...