基本查询

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. oracle 字段信息

    oracle 修改字段的长度alter table tablename modify column_name varchar2(32)alter table tablename modify (col ...

  2. Spring Security 3.1 中功能强大的加密工具 PasswordEncoder

    Spring Security 3.1 中功能强大的加密工具 PasswordEncoder 博客分类: security spring springsecurity  好吧,这种加密机制很复杂,还是 ...

  3. form表单action带参数传递

    form表单action带参数传递function submit(){  var u = document.forms[0].elements["user"].value;  do ...

  4. 最长上升子序列(LIS)动态规划

    最长上升子序列 给你n个整数 A1 A2 ········· An 找出在这个数组里面的最长上升的子序列.例如给你(1,7,3,5,9,4,8),他的上升子序列有(1,7) (3,4,8)等等之类的, ...

  5. jajaj

    Docs » 第二章:字符串和文本 » 2.2 字符串开头或结尾匹配 Edit on GitHub 2.2 字符串开头或结尾匹配¶ 问题¶ 你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件 ...

  6. selenium 访问网页抛出ElementNotVisibleException异常

    问题描述: 在使用selenium时遇到如下异常导致程序终止: selenium.common.exceptions.ElementNotVisibleException: Message: {&qu ...

  7. jmeter之cookies登录

    现在很多网站的登录都要验证码了,验证码的值是动态的,值不易获取.使用jmeter测试一个需要登录的接口就有困难,这时候,我们就可以使用cookies管理器来记住这个登录信息. 目录 1.jmeter的 ...

  8. JavaScript 表单验证正则表达式大全

    JavaScript 表单验证正则表达式大全[转载] 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[ ...

  9. hdu6575Budget

    Problem Description Avin’s company has many ongoing projects with different budgets. His company rec ...

  10. Hibernate入门2

    实体类的编写规则 要求实体类的属性是私有的 要求实体类中的私有属性有公开的get和set方法(设置器和访问器) 要求实体类有一个属性作为唯一值(一般使用id值) 实体类属性建议不使用基本数据类型,使用 ...