基本查询

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test; import com.fei.domain.Customer;
import com.fei.utils.HibernateUtils; /**
* 测试Hibernate中原生sql查询
*/
public class Demo {
@Test
// 基本查询
public void fun1() {
// 1获得session
Session session = HibernateUtils.openSession();
// 2开启事务
Transaction tx = session.beginTransaction(); // 3执行操作
// =====================================
// 1)书写原生sql语句
String sql = "select * from cst_customer";
// 2)创建原生sql查询对象(面向接口编程)
Query<Customer> query = session.createNativeQuery(sql, Customer.class); // 3)获得结果
List<Customer> list = query.list();
System.out.println(list);
// ===================================== // 4提交事务,关闭资源
tx.commit();
session.close();
}
}

条件查询

	@Test
// 条件查询
public void fun2() {
// 1获得session
Session session = HibernateUtils.openSession();
// 2开启事务
Transaction tx = session.beginTransaction(); // 3执行操作
// =====================================
// 1)书写原生sql语句
String sql = "select * from cst_customer where cust_id = :id";
// 2)创建原生sql查询对象
Query<Customer> query = session.createNativeQuery(sql, Customer.class).setParameter("id", 2l); // 3)获得结果
List<Customer> list = query.list();
System.out.println(list);
// ===================================== // 4提交事务,关闭资源
tx.commit();
session.close();
}

注意:hibernate5在使用原生的sql查询时,占位符要使用:id的形式,使用?的形式会报异常。至少我测试的时候是这样(((φ(◎ロ◎;)φ)))

分页查询

	@Test
// 分页查询
public void fun3() {
// 1获得session
Session session = HibernateUtils.openSession();
// 2开启事务
Transaction tx = session.beginTransaction(); // 3执行操作
// =====================================
// 1)书写原生sql语句
String sql = "select * from cst_customer limit :beginPos, :maxResult";
// 2)创建原生sql查询对象
Query<Customer> query = session.createNativeQuery(sql, Customer.class); query.setParameter("beginPos", 0);
query.setParameter("maxResult", 2); // 3)获得结果
List<Customer> list = query.list();
System.out.println(list);
// ===================================== // 4提交事务,关闭资源
tx.commit();
session.close();
}

查询总记录数

	@Test
// 查询总记录数
public void fun4() {
// 1获得session
Session session = HibernateUtils.openSession();
// 2开启事务
Transaction tx = session.beginTransaction(); // 3执行操作
// =====================================
// 1)书写原生sql语句
String sql = "select count(*) from cst_customer";
// 2)创建原生sql查询对象
Query<?> query = session.createNativeQuery(sql); // 3)获得结果
List<?> list = query.list();
System.out.println(list.get(0));
// 这种方式也是可以的,当知道结果只有一条时
// Object result = query.uniqueResult();
// ===================================== // 4提交事务,关闭资源
tx.commit();
session.close();
}

封装的HibernateUtils工具类

package com.fei.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory sf; // 为保证一个应用只有一个SessionFactory对象
static {
// 1.创建并读取指定配置文件,空参默认加载src路径下的名为hibernate.cfg.xml
Configuration conf = new Configuration().configure();
// 2.根据配置信息,创建SessionFactory对象
sf = conf.buildSessionFactory();
} // 获得全新session
public static Session openSession() {
// 3.获得新的session对象并返回
return sf.openSession();
} // 获得与线程绑定的session
public static Session getCurrentSession() {
// 3.获得与线程绑定的session对象并返回
return sf.getCurrentSession();
} }

hibernate 5原生sql查询测试学习代码的更多相关文章

  1. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  2. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

    第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...

  3. hibernate使用原生SQL查询

    以下是Demo测试Hibernate 原生SQL查询: import java.util.Iterator; import java.util.List; import java.util.Map; ...

  4. Hibernate 的原生 SQL 查询

    Hibernate除了支持HQL查询外,还支持原生SQL查询.         对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...

  5. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-2

    1. 返回List, .setResultTransformer(      Transformers.ALIAS_TO_ENTITY_MAP);将结果转为Map,存放到list中,即list中为若干 ...

  6. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

  7. 13.hibernate的native sql查询(转自xiaoluo501395377)

    hibernate的native sql查询   在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...

  8. hibernate的native sql查询

    在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hibernate推荐的HQL查询语句呢?这是因为HQ ...

  9. 使用hibernate原生sql查询,结果集全为1的问题解决

    问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...

随机推荐

  1. 牛客 Rabbit的数列 (线段树维护值为x的个数+区间覆盖)

    https://ac.nowcoder.com/acm/contest/907/C 链接:https://ac.nowcoder.com/acm/contest/907/C来源:牛客网 题目描述 Ra ...

  2. Bing Beats Google for the Best Way to X-Ray Search LinkedIn

    Bing Beats Google for the Best Way to X-Ray Search LinkedIn 11/13/11 Note: I’ve provided some update ...

  3. 不用print调试 xdebug ubuntu phpstorm 远程断点调试

    即使这会写php也遵守zebra大人的指示:不用print调试!!!!----环境ok  ---gan !!! w http://blog.csdn.net/ty_hf/article/details ...

  4. day04—JavaScript之面向对象

    转行学开发,代码100天——2018-03-20 对象是变量的容器,是键值对的容器,也是属性和方法的容器. 万物接对象 1.JavaScript中对象定义的方式 方法一:new Object() // ...

  5. 【MEAN Web开发】CentOS 7 安装MongoDB 3.2.3

    偶然得了一本书,AmosQ.Haviv 所著 <MEAN Web开发>.起初并不知道这啥东西,看了下目录发现正好有讲MongoDB而已.当时的项目正好需要做MongoDB的内容,之后这书就 ...

  6. ElasticSearch2.2.0安装

    一.ElasticSearch2.2.0安装 1.下载ElasticSearch2.2.0安装包 https://download.elastic.co/elasticsearch/elasticse ...

  7. HTML--JS 9*9乘法口诀

    <html> <head> <title>9*9乘法口诀</title> <script language="JavaScript&qu ...

  8. python实现读取excel

    实现代码如下: #读取excel,将每行数据放入一个列表,将所有列表放入一个列表形成二维列表,返回该二维列表 import xlrd class ReadExcel: def read_excel(s ...

  9. (appium+python)UI自动化_08_unittest编写测试用例

    前言 unittest是python自带的单元测试框架,类似于Junit(Java单元测试框架).支持自动化测试,可编写测试前置&后置条件,并且可批量运行测试用例并生成测试报告. 使用unit ...

  10. maven添加oracle和sqlserver报错

    Failure to find com.oracle:ojdbc6:jar:12.1.0.1-atlassian-hosted in 'xxx' Missing artifact com.micros ...