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. pgsql sql 统计整理

    字符字段转整型查询: SELECT mon_id as staTime,SUM (CAST ( index_value AS INT )) AS totalCount FROM aidata.rep_ ...

  2. Linux命令及架构部署大全

    1.Linux系统基础知识 Linux 基础优化配置 Linux系统根目录结构介绍 linux系统重要子目录介绍 Linux基础命令(之一)详解 Linux基础命令(之二)详解 Linux文件系统 L ...

  3. Mysql事务开启方式(客户端+java手动+Spring Boot)

    一:概念 作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行.举例 我们需要向数据库插入3条数据(我们希望这三条数据要么全部插入成功,要么全部失败), 比如第一条数据插入成功,插入第二条数据 ...

  4. 日吞吐万亿,腾讯云时序数据库CTSDB解密

    一.背景 随着移动互联网.物联网.大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联 ...

  5. Swagger如何访问Ocelot中带权限验证的API

    先亮源代码:https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDe ...

  6. NavigationViewDemo【和DrawerLayout搭配使用实现侧滑导航视图界面】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要记录NavigationView的使用,而一般情况下NavigationView是和DrawerLayout搭配使用的,还有To ...

  7. springboot~openfeign从JSON文件读取数据

    对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...

  8. Recording and playing back data

    Recording and playing back data This tutorial will teach you how to record data from a running ROS s ...

  9. sql小知识点

    1]sql去重复 select * from View where SfzId in ())

  10. Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

    首先这是一个测试的代码 请先在setting页面进行下面操作 注释完成后,开始模拟钓鱼网站的跨站请求伪造操作: 前端代码: <!DOCTYPE html> <html lang=&q ...