基本查询

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. Winner

    Winner 南昌邀请赛 暴力模拟 #include<bits/stdc++.h> using namespace std; struct Nod { int i; int a,b,c; ...

  2. [CSP-S模拟测试]:引子(大模拟)

    题目描述 网上冲浪时,$Slavko$被冲到了水箱里,水箱由上而下竖直平面.示意图如下: 数字$i$所在的矩形代表一个编号为$i$的水箱.1号水箱为水箱中枢,有水管连出.除了$1$号水箱外,其他水箱上 ...

  3. Zsh vs. Bash不完全对比解析,zsh是一种更强大的被成为“终极”的Shell

    https://www.zhihu.com/question/21418449 Mort | Zsh vs. Bash:不完全对比解析(1) 2014-10-07  bdpqlxz     Zsh和B ...

  4. DG-V$MANAGED_STANDBY视图

    V$MANAGED_STANDBY displays current status information for some Oracle Database processes related to ...

  5. IAR MSP430怎么破解?IAR for MSP430安装注册破解激活图文详细教程

      IAR for MSP430全称IAR Embedded Workbench for MSP430,是一款功能强大的专业集成开发环境,软件包括项目管理.配置开发环境.创建编译器.定制具体编程方案等 ...

  6. Jmeter接口测试报告模板优化

    优化后在接口报告的接口信息中,直接展示url,method,结果和响应时间,详情中展示请求和响应数据.具体如下: 模板文件 jmeter-results-detail-report_21.xsl: & ...

  7. mysqldump - 备份 MySQL 数据库

    参考资料 备份 备份所有数据库中的所有数据(包括系统数据库) –all-databases 通过 --all-databases 选项备份所有的数据库: mysqldump -uroot -p --a ...

  8. Oracle客户端和服务端的区别

    转载:https://blog.csdn.net/qq_22558507/article/details/75220224 随着Oracle技术领域应用越来越广泛,现在就关于oracle客户端配置极其 ...

  9. Attribute 'num_units' in Tensorflow BasicLSTMCell blocks

    在之前使用Tensorflow来做音乐识别时,LSTM给出了非常让人惊喜的学习能力.当时在进行Tuning的时候,有一个参数叫做num_units,字面看来是LTSM单元的个数,但最近当我试图阅读Te ...

  10. python常用模块----re模块

    正则表达式就是匹配字符串内容的一种规则. 字符组: [0123456789] 表示0-9这个范围内的任意一个数字都可以与之匹配,简写为[0-9] [a-z] 表示匹配所有的小写字母 [A-Z] 表示匹 ...