hibrenate之Query,Criteria,SQLQuery

简介: hibrenate之Query,Criteria,SQLQuery

1.Query对象

通过写hql语句来对数据库进行crud操作,hql语句和普通sql语句很相似,区别在于hql语句操作的对象是实体类和属性,而sql操作的对象是数据库的表和字段。

演示例子:

image.png

结果:image.png

2.Criteria对象

使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现

实现过程

(1)创建criteria对象

(2)调用对象里面的方法得到结果

//使用criteria对象
  @Test
  public void testCriteria() {
    SessionFactory sessionFactory = null;
    Session session = null;
    Transaction tx = null;
    try {
      sessionFactory = HibernateUtils.getSessionFactory();
      session = sessionFactory.openSession();
      //开启事务
      tx = session.beginTransaction();
      //1 创建criteria对象
      //方法里面参数是实体类class
      Criteria criteria = session.createCriteria(User.class);
      /**
         * 作用:or()用法
         * 说明:通过or()返回的是实体对象集合
         *      add(Criterion criterion)用来添加查询条件
         *      Restrictions通过内置的静态方法,可以创建criterion
         */
      //2 调用方法得到结果
      List<User> list = criteria.add(Restrictions.or(Restrictions.eq("username", "小明"),
                    Restrictions.eq("username", "小红") ))
                   .list();
      for (User user : list) {
        System.out.println(user);
      }
      //提交事务
      tx.commit();
    }catch(Exception e) {
      e.printStackTrace();
      //回滚事务
      tx.rollback();
    }finally {
      //关闭操作
      session.close();
      sessionFactory.close();
    }
  }

image.png

常用的Restrictions方法:

    Restrictions.eq 等于
  Restrictions.allEq 使用Map,使用key/value进行多个等于的比对
  Restrictions.gt 大于 >
  Restrictions.ge 大于等于 >=
  Restrictions.lt 小于 <
  Restrictions.le 小于等于 <=
  Restrictions.between 对应SQL的BETWEEN子句
  Restrictions.like 对应SQL的LIKE子句
  Restrictions.in 对应SQL的in子句
  Restrictions.and and关系
  Restrictions.or or关系

3.SQLQuery对象

调用底层sql实现

//使用SQLQuery对象
  @Test
  public void testSQLQuery() {
    SessionFactory sessionFactory = null;
    Session session = null;
    Transaction tx = null;
    try {
      sessionFactory = HibernateUtils.getSessionFactory();
      session = sessionFactory.openSession();
      //开启事务
      tx = session.beginTransaction();
      //1 创建对象
      //参数普通sql语句
      SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
      //返回的list中每部分是对象形式
      sqlQuery.addEntity(User.class);
      //调用sqlQuery里面的方法
      List<User> list = sqlQuery.list();
      for (User user : list) {
        System.out.println(user);
      }
      //提交事务
      tx.commit();
    }catch(Exception e) {
      e.printStackTrace();
      //回滚事务
      tx.rollback();
    }finally {
      //关闭操作
      session.close();
      sessionFactory.close();
    }
  }

结果:201804061503019.png

相关文章
|
8月前
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
154 1
|
2月前
|
SQL
SELECT DISTINCT
【11月更文挑战第02天】
52 1
|
4月前
|
JSON 关系型数据库 MySQL
EXPLAIN Join Types
`EXPLAIN` 输出的 `type` 列描述了表连接方式,从最优到最差包括:`system`(单行系统表)、`const`(最多一行,视为常量)、`eq_ref`(最佳连接类型,用于主键或唯一索引)、`ref`(基于索引的部分匹配)、`fulltext`(全文索引)、`ref_or_null`(包含 NULL 值的行)、`index_merge`(索引合并优化)、`unique_subquery` 和 `index_subquery`(索引查找替代子查询)、`range`(索引范围内检索)、`index`(索引扫描)、`ALL`(全表扫描,通常最差)。
|
存储 .NET C#
C# LINQ 详解 From Where Select Group Into OrderBy Let Join
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述     LINQ的全称是Language Integrated Query,中文译成“语言集成查询”。
2133 0
SELECT 语句中的 子查询(Sub Query)
SELECT 语句中的子查询 子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。
1288 0
使用RresultMap中collection做嵌套查询
注意:<collection>标签中的column:是要传递给select查询语句的参数,如果传递多个参数,格式为column= " {参数名1=表字段1,参数名2=表字段2}"
291 0
|
SQL 关系型数据库 MySQL
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
397 0
|
Java 数据库连接
Hibernate Criteria 模糊查询
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82732076 ...
1361 0
|
关系型数据库