zoukankan      html  css  js  c++  java
  • 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();
    	}
    	
    }
    
    
  • 相关阅读:
    3D图片变换
    Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!
    MVC 项目中又一新方法实现依懒注入 (AutoFac)
    Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题
    Unity 的ICallHander在C#项目中实现注入
    Razor Engine,动态脚本语言,mvc上的语法,适用于文件内容生成,静态网页生成等。
    关于IE中图片不显示的问题(IE兼容问题)
    svn E155004: 'XXX' is already locked
    服务器报错:Swap file "./conf/.server.xml.swp" already exists!
    微信小程序 学习笔记(二)了解他的组成
  • 原文地址:https://www.cnblogs.com/zxfei/p/11125162.html
Copyright © 2011-2022 走看看