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方式的更多相关文章

  1. Hibernate查询的六种方式

        Hibernate查询的六种方式 分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate ...

  2. 《Java从入门到放弃》入门篇:hibernate查询——HQL

    不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...

  3. Hibernate查询之SQL查询

    转自: Hibernate还支持使用SQL查询,使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上.使用命名的SQL查询还可以将SQL语句放在配置文件中 ...

  4. Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中

     package com.ucap.netcheck.dao.impl; import java.util.ArrayList;import java.util.List; import org. ...

  5. Hibernate的查询语言之HQL(二)——Hibernate查询的from字句

    from 是最简单的HQL语句,也是最基本的HQL语句.from 关键字后紧跟持久化类的类名.例如: from Person 表明从Person持久化类中取出全部的实例. 大部分时候,推荐位该Pers ...

  6. Hibernate 查询方式、JPA查询方式

    hibernate 查询方式: OID 查询 对象导航查询 HQL 方式查询 QBC方式查询 原生SQL方式查询 JPA 查询方式: OID 查询 对象导航查询 JPQL 方式查询 CriteriaB ...

  7. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. hibernate检索方式(HQL 检索方式,QBC 检索方式,本地 SQL 检索方式)

    hibernate有五种检索方式,这儿用 单向的一对多的映射关系 例子,这儿有后三种的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 ...

  9. Hibernate(十二):HQL查询(一)

    概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...

随机推荐

  1. 恢复oracle中误删除drop掉的表 闪回的方法

    恢复oracle中误删除drop掉的表   查看回收站中表 --需要在其所在用户下查询 回收站对象 select object_name,original_name,partition_name,ty ...

  2. JS Bootstrap-DateRangePicker 如何设置默认值为空

    DateRangePicker是一款时间范围选择器,界面良好,非常适合短时间范围选择的插件,具体源码可以在http://www.daterangepicker.com/找到 ,但是目前使用中,感觉功能 ...

  3. NFS的搭建及配置

    [root@centos199 conf]# rpm -q nfs-utils rpcbind #查看这两个包是否安装,如未安装则用yum安装nfs-utils-1.2.3-39.el6.x86_64 ...

  4. Python存储系统(Memcached)

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. 本质上,它是一个简洁的key-value存储系统. 其主要用途有:动态数据库缓存.不同应用(语言)中共享数据 安装 安装及命令介绍 ...

  5. DataIntegrityViolationException

    今天出现了这个问题: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch upd ...

  6. 深入浅出一下Java的HashMap

    在平常的开发当中,HashMap是我最常用的Map类(没有之一),它支持null键和null值,是绝大部分利用键值对存取场景的首选.需要切记的一点是——HashMap不是线程安全的数据结构,所以不要在 ...

  7. dev Gridcontrol控件属性部分

    XtraGrid的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView/XXXXView中.GridContro ...

  8. java~lambda表达式让查询更优雅

    在java之前的版本里,如果希望从集合时查找符合条件的数据,如果先遍历他,这种写法是我们不能接受的,所以现在java有了lambda就很好的解决了这个问题,让代码更优雅一些! /** * lambda ...

  9. springboot~mongo内嵌集合的操作

    对于mongodb的内嵌对象的各种操作大叔在.net平台时已经说过,同时大叔也自己封装过mongo的仓储,使用也都很方便,而在java springboot框架里当然也有对应的方法,下面主要说一下,希 ...

  10. 微信小程序开发04-打造自己的UI库

    前言 github地址:https://github.com/yexiaochai/wxdemo 接上文继续,我们前面学习了小程序的生命周期.小程序的标签.小程序的样式,后面我们写了一个简单的load ...