hibernate 5原生sql查询测试学习代码
基本查询
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查询测试学习代码的更多相关文章
- hibernate使用原生SQL查询返回结果集的处理
今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1
第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...
- hibernate使用原生SQL查询
以下是Demo测试Hibernate 原生SQL查询: import java.util.Iterator; import java.util.List; import java.util.Map; ...
- Hibernate 的原生 SQL 查询
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-2
1. 返回List, .setResultTransformer( Transformers.ALIAS_TO_ENTITY_MAP);将结果转为Map,存放到list中,即list中为若干 ...
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
- 13.hibernate的native sql查询(转自xiaoluo501395377)
hibernate的native sql查询 在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...
- hibernate的native sql查询
在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hibernate推荐的HQL查询语句呢?这是因为HQ ...
- 使用hibernate原生sql查询,结果集全为1的问题解决
问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...
随机推荐
- 【LOMBOK】能引入 @Slf4j 注解,不能识别 log 的解决方法
问题: 在pom.xml中加入引入了lombok的依赖,可以引用@Slf4j注解不能识别log 如:注:上面一篇博客,已经说明lombok的安装了,但是用的时候还有点问题. 1).把lombok.ja ...
- linux centos添加yum镜像
下载配置文件,加入/etc/yum.repos.d/阿里镜像:http://mirrors.aliyun.com/repo/Centos-7.repo网易镜像:http://mirrors.163.c ...
- HDU | Friend Chains-4460 SPFA
题目: Problem DescriptionFor a group of people, there is an idea that everyone is equals to or less th ...
- git commit --amend用法(摘抄)
适用场景: 比方说,你的代码已经提交到git库,leader审核的时候发现有个Java文件代码有点问题,于是让你修改,通常有2种方法: 方法1:leader 将你提交的所有代码 abandon掉,然后 ...
- CSS动画之旋转魔方轮播
很久没有回头来复习CSS方面的知识了, 正好又到了月底写文章的deadline......所以这次选择了详细巩固一下CSS3动画有关的知识点,因为之前只是用过一些属性并没有深究细节. 在我自己写完这篇 ...
- python两个装饰器的运算顺序
#装饰顺序按靠近函数顺序执行,调用时由外而内,执行顺序和装饰顺序相反. def makebold(func): def wrap(): return "<i>"+fun ...
- 关于TCP\IP协议的简单理解
一: HTTP是基于TCP协议的,TCP属于传输层.HTTP属于应用层. 另一个属于传输层的是UDP协议. 但HTTP是基于TCP这个协议,不是UDP这个协议. TCP相比于UDP,更安全,稳定.因为 ...
- linux RZ 命令
root 账号登陆后,依次执行以下命令: 1 cd /tmp 2 wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 3 tar zxv ...
- 配置最漂亮的PyCharm界面,Python程序员必备!
高逼格超美的IDE界面,是每个程序员的梦想! 随着人工智能/机器学习的兴起,Python作为一门“漂亮的语言”,再次获得广大程序员的关注.而JetBrains出品的PyCharm无疑是最好用的Pyth ...
- python实现获取文件夹中的最新文件
实现代码如下: #查找某目录中的最新文件import osclass FindNewFile: def find_NewFile(self,path): #获取文件夹中的所有文件 lists = os ...