Hibernate中的查询:HQL、Criteria、原生SQl
2017-04-28 18:10
471 查看
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装
Hibernate数据查询:
1、Hibernate Query Language(HQL)
2、Criteria Query(Criteria )
3、Native SQL(原生SQl)
数据库:MySQl
Hibernate版本:4.0
Demo架构截图:
其中domain包下以及hibernate.cfg.xml为自动生成文件。自动生成方法请观看:
http://blog.csdn.net/u012561176/article/details/45919751#comments
HibernateUtils.java代码:用于生产Session对象
数据库设计:
4000
我将HQL查询分为4类:
1、基础查询
2、(条件查询)问号占位符
3、(条件查询)命名占位符
4、分页查询
用户可以根据自己的喜爱自行选择
我将HQL查询分为3类:
1、基础查询
2、条件查询
3、分页查询
用户可以根据自己的喜爱自行选择
我将HQL查询分为3类:
1、基础查询
2、基础查询 (将结果封装到对象中)
3、条件查询
4、分页查询
用户可以根据自己的喜爱自行选择
Demo源码下载地址(免费):
http://download.csdn.net/detail/li521wang/9828741
希望这篇博客可以帮助大家更加深入的理解Hibernate中的查询并进行灵活的运行。这一知识点的掌握可以大大加快我们的开发效率。
Hibernate数据查询:
1、Hibernate Query Language(HQL)
2、Criteria Query(Criteria )
3、Native SQL(原生SQl)
工具类以及数据库的设计
开发工具:MyEclipse10数据库:MySQl
Hibernate版本:4.0
Demo架构截图:
其中domain包下以及hibernate.cfg.xml为自动生成文件。自动生成方法请观看:
http://blog.csdn.net/u012561176/article/details/45919751#comments
HibernateUtils.java代码:用于生产Session对象
public class HibernateUtils { public static SessionFactory sf; // 保证类加载时就执行一次(保证SessionFactory只存在一个) static { Configuration cf = new Configuration(); cf.configure(); sf = cf.buildSessionFactory(); } public static Session getCurrentSession() { return sf.getCurrentSession(); } public static Session getOpenSession() { return sf.openSession(); } }
数据库设计:
HQL查询
HQL(Hibernate Query Language)提供更加丰富灵活、更为强大的查询能力。4000
我将HQL查询分为4类:
1、基础查询
2、(条件查询)问号占位符
3、(条件查询)命名占位符
4、分页查询
用户可以根据自己的喜爱自行选择
public class HQLTest { /** * 基础查询 */ @Test public void fun() { Session session = HibernateUtils.getOpenSession(); // 获取事务 Transaction tran = session.beginTransaction(); // Stuinfo不是数据库表名,而是实例化数据库的类的名称, // 可以写类的全类名,或者直接写类名(一个项目中只存在一个此类名) String hql = "from Stuinfo"; // 根据hql查询 Query query = session.createQuery(hql); // 获取结果的集合(自动封装成Stuinfo对象) List<Stuinfo> list = query.list(); // Stuinfo stuinfo = (Stuinfo) query.uniqueResult(); 查询单个对象 System.out.println(list.toString()); // 提交事务 tran.commit(); // 关闭session(养成良好的习惯) session.close(); } /** * (条件查询)问号占位符 */ @Test public void fun2() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); // 获取事务 /* * 此语句中的id不是数据库表中的列名,而是表所对应的类的属性名 */ String hql = "from Stuinfo where id = ?"; Query query = session.createQuery(hql); // 根据hql查询 // query.setInteger(0, 1); // 设置参数,参一:问号占位符的下标(从0开始),参二:问号的值 query.setParameter(0, 1); // 与上一行代码意义相同,(通用写法不用担心类型不匹配) List<Stuinfo> list = query.list(); // 获取结果的集合(自动封装成Stuinfo对象) System.out.println(list.toString()); tran.commit(); // 提交事务 session.close(); // 关闭session(养成良好的习惯) } /** * 命名占位符 */ @Test public void fun3() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); // 获取事务 /* * 此语句中的id不是数据库表中的列名,而是表所对应的类的属性名 */ String hql = "from Stuinfo where id= :id"; Query query = session.createQuery(hql); // 根据hql查询 query.setParameter("id", 1); // 设置参数,参一:问号占位符的下标(从0开始),参二:问号的值 List<Stuinfo> list = query.list(); // 获取结果的集合(自动封装成Stuinfo对象) System.out.println(list.toString()); tran.commit(); // 提交事务 session.close(); // 关闭session(养成良好的习惯) } /** * 分页查询 */ @Test public void fun4() { // 1 获得session Session session = HibernateUtils.getOpenSession(); // 2 控制事务 Transaction tx = session.beginTransaction(); // 3执行操作 // ------------------------------------------- // 1> 书写HQL语句 String hql = " from Stuinfo"; // 查询所有Customer对象 // 2> 根据HQL语句创建查询对象 Query query = session.createQuery(hql); // 设置分页信息 limit ?,? query.setFirstResult(0); query.setMaxResults(1); // 3> 根据查询对象获得查询结果 List<Stuinfo> list = query.list(); System.out.println(list); // ------------------------------------------- // 4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } }
Criteria查询
Criteria是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode。我将HQL查询分为3类:
1、基础查询
2、条件查询
3、分页查询
用户可以根据自己的喜爱自行选择
/** * 面向对象的无语句SQl查询 * * @author LX */ public class CriteriaTest { /** * Criteria基础查询 */ @Test public void fun1() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); // 查询所有的Stuinfo对象 Criteria criteria = session.createCriteria(Stuinfo.class); List<Stuinfo> list = criteria.list(); System.out.println(list.toString()); tran.commit(); session.close(); } // Criteria条件查询 // sql常用操作符 Restrictions的方法 // > gt // >= ge // < lt // <= le // == eq // != ne // in in // between and between // like like // is not null isNotNull // is null isNull // or or // and and @Test public void fun2() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); // 查询所有的Stuinfo对象 Criteria criteria = session.createCriteria(Stuinfo.class); // 添加查询参数 criteria.add(Restrictions.eq("id", 1)); // 执行查询获得结果 Stuinfo info = (Stuinfo) criteria.uniqueResult(); System.out.println(info.toString()); tran.commit(); session.close(); } /** * 分页查询 */ @Test public void fun3() { // 1 获得session Session session = HibernateUtils.getOpenSession(); // 2 控制事务 Transaction tx = session.beginTransaction(); // 3执行操作 // ------------------------------------------- // 创建criteria查询对象 Criteria criteria = session.createCriteria(Stuinfo.class); // 设置分页信息 limit ?,? criteria.setFirstResult(0); criteria.setMaxResults(1); // 执行查询 List<Stuinfo> list = criteria.list(); System.out.println(list); // ------------------------------------------- // 4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } @Test // 查询总记录数 public void fun4() { // 1 获得session Session session = HibernateUtils.getOpenSession(); // 2 控制事务 Transaction tx = session.beginTransaction(); // 3执行操作 // ------------------------------------------- // 创建criteria查询对象 Criteria criteria = session.createCriteria(Stuinfo.class); // 设置查询的聚合函数 => 总行数 criteria.setProjection(Projections.rowCount()); // 执行查询 Integer count = (Integer) criteria.uniqueResult(); System.out.println(count); // ------------------------------------------- // 4提交事务.关闭资源 tx.commit(); session.close();// 游离|托管 状态, 有id , 没有关联 } }
Native SQL(原生SQl)查询
Native SQL允许你针对数据库来使用原生的SQL,这些SQL可能是标准的SQL,也可以是某数据库特定的SQL。如果使用database-specific SQL语句,则数据库不能更换,否则请使用Open SQL。我将HQL查询分为3类:
1、基础查询
2、基础查询 (将结果封装到对象中)
3、条件查询
4、分页查询
用户可以根据自己的喜爱自行选择
/** * 原生的sql查询 * * @author LX */ public class ProtosomaticSQLTest { /** * 基础查询 */ @Test public void fun1() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); String sql = "select * from stuinfo"; SQLQuery query = session.createSQLQuery(sql); List<Object[]> list = query.list(); for (Object[] obj : list) { System.out.println(Arrays.toString(obj)); } tran.commit(); session.close(); } /** * 基础查询 (将结果封装到对象中) */ @Test public void fun2() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); String sql = "select * from stuinfo"; // 创建查询对象 SQLQuery query = session.createSQLQuery(sql); // 将结果集封装到对象中 query.addEntity(Stuinfo.class); List<Stuinfo> list = query.list(); System.out.println(list.toString()); tran.commit(); session.close(); } /** * 条件查询 */ @Test public void fun3() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); String sql = "select * from stuinfo where id = ?"; // 创建查询对象 SQLQuery query = session.createSQLQuery(sql); //传参 参一:下标 参二:值 query.setParameter(0, 1); // 将结果集封装到对象中 query.addEntity(Stuinfo.class); List<Stuinfo> list = query.list(); System.out.println(list.toString()); tran.commit(); session.close(); } /** * 分页查询 */ @Test public void fun4() { Session session = HibernateUtils.getOpenSession(); Transaction tran = session.beginTransaction(); String sql = "select * from stuinfo limit ? , ?"; // 创建查询对象 SQLQuery query = session.createSQLQuery(sql); //传参 参一:下标 参二:值 953d query.setParameter(0, 0); query.setParameter(1, 1); // 将结果集封装到对象中 query.addEntity(Stuinfo.class); List<Stuinfo> list = query.list(); System.out.println(list.toString()); tran.commit(); session.close(); } }
Demo源码下载地址(免费):
http://download.csdn.net/detail/li521wang/9828741
希望这篇博客可以帮助大家更加深入的理解Hibernate中的查询并进行灵活的运行。这一知识点的掌握可以大大加快我们的开发效率。
相关文章推荐
- Hibernate的HQL查询及原生sql查询语句写法
- Hibernate-HQL、Criteria、SQL实现查询对照以及增删改
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
- Hibernate的map映射关系查询&原生HQL转SQL
- hibernate查询方式:HQL、SQL、Criteria方法、命名、动态分离查询、例子查询
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- hibernate查询方式:HQL、SQL、Criteria方法、命名、动态分离查询、例子查询
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- hibernate HQL查询以及原生SQL查询参数类型的区别
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- Hibernate-主键查询、HQL查询,Criteria以及本地SQL查询
- Hibernate中的三种查询HQL、Criteria、Sql学习(一)
- hibernate之HQL、SQL、Criteria 三种查询简介
- jpa或bernate使用原生sql进行关联查询org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join
- hibernate----懒加载,原生 sql查询及多种hql查询,表连接查询
- Hibernate(一)HQL查询、原生sql查询