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

相关文章
|
5月前
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
59 1
|
7月前
|
SQL 数据库
解决Can not issue executeUpdate() or executeUpdate() with statement that produce result sets问题~
解决Can not issue executeUpdate() or executeUpdate() with statement that produce result sets问题~
130 0
|
5月前
|
Java 数据库连接
Hibernate query.list()
在Hibernate中,用hql语句查询实体类,采用List方法的返回结果为一个List,该List中封装的对象分为以下三种情况。
|
8月前
|
SQL Java
[已解决]SpringDataJPA+Hibernate在执行executeUpdate()的时候报错 Executing an update/delete query
[已解决]SpringDataJPA+Hibernate在执行executeUpdate()的时候报错 Executing an update/delete query
|
8月前
|
SQL 关系型数据库 MySQL
mysql查询出现QSqlQuery::value: not positioned on a valid record
mysql查询出现QSqlQuery::value: not positioned on a valid record
130 0
One order search dynamic sql statement生成位置
One order search dynamic sql statement生成位置
One order search dynamic sql statement生成位置
|
SQL 关系型数据库
get_locked_objects_rpt.sql
在metalink上看到一个脚本(get_locked_objects_rpt.sql),非常不错,如下所示 /*----------------------------------------------------------------------------+ | MODULE: get_locked_objects_rpt.
875 0