• 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();
    	}
    	
    }
    
    
  • 相关阅读:
    【hdu6035】 Colorful Tree dfs序
    【GDOI2018模拟8】 数学竞赛 三角函数性质+记忆化搜索
    【BZOJ4184】shallot 线性基
    失分统计#1
    【learning】微信跳一跳辅助c++详解 轻松上万 【下】
    【2018北京集训十二】 coin 矩阵快速幂
    【learning】微信跳一跳辅助c++详解 轻松上万 【上】
    【2018北京集训6】Lcm DFT&FWT
    【BZOJ3143】【HNOI2013】游走 高斯消元
    【bzoj1855】 [Scoi2010]股票交易 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/zxfei/p/11125162.html
Copyright © 2020-2023  润新知