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

相关文章
Stream方法使用-filter、sorted、distinct、limit
Stream方法使用-filter、sorted、distinct、limit
162 0
|
5月前
|
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`(全表扫描,通常最差)。
|
6月前
|
SQL
[Err] 1052 - Column ‘roleId‘ in where clause is ambiguous
这篇文章解释了SQL查询中出现"Column ‘roleId’ in where clause is ambiguous"错误的原因,即在多表查询中,如果没有明确指定表名,相同的列名在where子句中会产生歧义,并提供了修正方法,即明确指定条件中所引用的列属于哪个表。
|
存储 SQL 关系型数据库
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column的解决办法
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column的解决办法
334 0
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
219 0
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
|
存储 .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,中文译成“语言集成查询”。
2148 0
|
SQL Java 数据库连接
mybatis 批量插入 Column count doesn‘t match value count at row 1
mybatis 批量插入 Column count doesn‘t match value count at row 1
199 0
SELECT 语句中的 子查询(Sub Query)
SELECT 语句中的子查询 子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。
1295 0
|
SQL 关系型数据库 MySQL
【已解决】SELECT list is not in GROUP BY clause and contains nonaggregated column
MySQL5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。
520 0
|
SQL 关系型数据库 MySQL
报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat
报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat
475 0
报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat