Criteria进行数据查询与HQL和SQL的区别是Criteria完全是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,使用Criteria 查询数据包括以下步骤:

  1. 通过session的createCriteria创建一个Criteria 对象

  2. Criteria.add 增加约束。 在本例中增加一个对name的模糊查询(like)

  3. 调用list()方法返回查询结果的集合

  本文展示四种基本的Criteria查询用法

1.Criteria基本查询
2.Criteria条件查询
3.Criteria查询总数
4.Criteria查询用户名中带有字符'a'的总人数
package com.Gary.dao;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query; import com.Gary.domain.User;
import com.Gary.utils.HibernateUtils; public class CriteriaDao { //Criteria基本查询
public void search() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> createQuery = criteriaBuilder.createQuery(User.class);
Root<User> from = createQuery.from(User.class);
createQuery.select(from);
List<User> resultList = session.createQuery(createQuery).getResultList(); System.out.println(resultList); //模板:完成操作
beginTransaction.commit();
session.close();
} //条件查询
public void search2() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
Root<User> root = criteria.from(User.class);
//查询到数据库中所有值
criteria.select(root).where(root.get("id").in("1"));
//执行查询
List<User> resultList = session.createQuery(criteria).getResultList(); //打印出查询出来的第1个用户
System.out.println(resultList.get(0).getUsername()); //模板:完成操作
beginTransaction.commit();
session.close();
} //条件总数记录查询
public void search3() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); //createQuery-->查询条件(首先需要知道查询什么类型数据)(数Integer Long)
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
//查找哪个表
Root<User> root = criteria.from(User.class);
criteria.select(criteriaBuilder.count(root));
//执行查询
Long count = session.createQuery(criteria).uniqueResult(); //查询总数
System.out.println(count); //模板:完成操作
beginTransaction.commit();
session.close();
} //查询名字中带有a的人数总数 -- 2
public void search4() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user where username like '%i%' CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
Root<User> root = criteria.from(User.class); criteria.select(criteriaBuilder.count(root)).where(criteriaBuilder.like(root.get("username"),"%a%")); Long count = session.createQuery(criteria).uniqueResult(); System.out.println(count); //模板:完成操作
beginTransaction.commit();
session.close();
} }

CriteriaDao.java

  数据库user表

  向数据库中添加假数据

  

1、Criteria基本查询

  Root<User> from = createQuery.from(User.class);
  createQuery.select(from);

  CriteriaDao.java向数据库发起查询请求

//Criteria基本查询
public void search() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> createQuery = criteriaBuilder.createQuery(User.class);
Root<User> from = createQuery.from(User.class);
createQuery.select(from);
List<User> resultList = session.createQuery(createQuery).getResultList(); System.out.println(resultList); //模板:完成操作
beginTransaction.commit();
session.close();
}

  

package com.Gary.dao;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query; import com.Gary.domain.User;
import com.Gary.utils.HibernateUtils; public class CriteriaDao { //Criteria基本查询
public void search() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> createQuery = criteriaBuilder.createQuery(User.class);
Root<User> from = createQuery.from(User.class);
createQuery.select(from);
List<User> resultList = session.createQuery(createQuery).getResultList(); System.out.println(resultList); //模板:完成操作
beginTransaction.commit();
session.close();
} }

CriteriaDao.java

2、Criteria条件查询

     //createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
Root<User> root = criteria.from(User.class);
//查询到数据库中所有值
criteria.select(root).where(root.get("id").in("1"));
//执行查询
List<User> resultList = session.createQuery(criteria).getResultList();

  CriteriaDao.java向数据库发起查询请求

public void search2() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
Root<User> root = criteria.from(User.class);
//查询到数据库中所有值
criteria.select(root).where(root.get("id").in("1"));
//执行查询
List<User> resultList = session.createQuery(criteria).getResultList(); //打印出查询出来的第1个用户
System.out.println(resultList.get(0).getUsername()); //模板:完成操作
beginTransaction.commit();
session.close();
}

package com.Gary.dao;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query; import com.Gary.domain.User;
import com.Gary.utils.HibernateUtils; public class CriteriaDao { //Criteria基本查询
public void search() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> createQuery = criteriaBuilder.createQuery(User.class);
Root<User> from = createQuery.from(User.class);
createQuery.select(from);
List<User> resultList = session.createQuery(createQuery).getResultList(); System.out.println(resultList); //模板:完成操作
beginTransaction.commit();
session.close();
} public void search2() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
Root<User> root = criteria.from(User.class);
//查询到数据库中所有值
criteria.select(root).where(root.get("id").in("1"));
//执行查询
List<User> resultList = session.createQuery(criteria).getResultList(); //打印出查询出来的第1个用户
System.out.println(resultList.get(0).getUsername()); //模板:完成操作
beginTransaction.commit();
session.close();
} }

CriteriaDao.java

3、Criteria查询总数

  //createQuery-->查询条件(首先需要知道查询什么类型数据)(数Integer  Long)
  CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
  //查找哪个表
  Root<User> root = criteria.from(User.class);
  criteria.select(criteriaBuilder.count(root));
  //执行查询
  Long count = session.createQuery(criteria).uniqueResult();

  CriteriaDao.java向数据库发起查询请求

public void search3() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); //createQuery-->查询条件(首先需要知道查询什么类型数据)(数Integer Long)
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
//查找哪个表
Root<User> root = criteria.from(User.class);
criteria.select(criteriaBuilder.count(root));
//执行查询
Long count = session.createQuery(criteria).uniqueResult(); //查询总数
System.out.println(count); //模板:完成操作
beginTransaction.commit();
session.close();
}

package com.Gary.dao;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query; import com.Gary.domain.User;
import com.Gary.utils.HibernateUtils; public class CriteriaDao { //Criteria基本查询
public void search() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> createQuery = criteriaBuilder.createQuery(User.class);
Root<User> from = createQuery.from(User.class);
createQuery.select(from);
List<User> resultList = session.createQuery(createQuery).getResultList(); System.out.println(resultList); //模板:完成操作
beginTransaction.commit();
session.close();
} //条件查询
public void search2() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
Root<User> root = criteria.from(User.class);
//查询到数据库中所有值
criteria.select(root).where(root.get("id").in("1"));
//执行查询
List<User> resultList = session.createQuery(criteria).getResultList(); //打印出查询出来的第1个用户
System.out.println(resultList.get(0).getUsername()); //模板:完成操作
beginTransaction.commit();
session.close();
} //条件总数记录查询
public void search3() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); //createQuery-->查询条件(首先需要知道查询什么类型数据)(数Integer Long)
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
//查找哪个表
Root<User> root = criteria.from(User.class);
criteria.select(criteriaBuilder.count(root));
//执行查询
Long count = session.createQuery(criteria).uniqueResult(); //查询总数
System.out.println(count); //模板:完成操作
beginTransaction.commit();
session.close();
} }

CriteriaDao.java

4、Criteria查询用户名中带有字符'a'的总人数

criteria.select(criteriaBuilder.count(root)).where(criteriaBuilder.like(root.get("username"),"%a%"));

  CriteriaDao.java向数据库发起查询请求

    //查询名字中带有a的人数总数  -- 2
public void search4() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user where username like '%i%' CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
Root<User> root = criteria.from(User.class); criteria.select(criteriaBuilder.count(root)).where(criteriaBuilder.like(root.get("username"),"%a%")); Long count = session.createQuery(criteria).uniqueResult(); System.out.println(); //模板:完成操作
beginTransaction.commit();
session.close();
}

package com.Gary.dao;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query; import com.Gary.domain.User;
import com.Gary.utils.HibernateUtils; public class CriteriaDao { //Criteria基本查询
public void search() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> createQuery = criteriaBuilder.createQuery(User.class);
Root<User> from = createQuery.from(User.class);
createQuery.select(from);
List<User> resultList = session.createQuery(createQuery).getResultList(); System.out.println(resultList); //模板:完成操作
beginTransaction.commit();
session.close();
} //条件查询
public void search2() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select * from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
//createQuery-->查询条件(首先需要知道查询什么类型数据)
CriteriaQuery<User> criteria = criteriaBuilder.createQuery(User.class);
Root<User> root = criteria.from(User.class);
//查询到数据库中所有值
criteria.select(root).where(root.get("id").in("1"));
//执行查询
List<User> resultList = session.createQuery(criteria).getResultList(); //打印出查询出来的第1个用户
System.out.println(resultList.get(0).getUsername()); //模板:完成操作
beginTransaction.commit();
session.close();
} //条件总数记录查询
public void search3() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); //createQuery-->查询条件(首先需要知道查询什么类型数据)(数Integer Long)
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
//查找哪个表
Root<User> root = criteria.from(User.class);
criteria.select(criteriaBuilder.count(root));
//执行查询
Long count = session.createQuery(criteria).uniqueResult(); //查询总数
System.out.println(count); //模板:完成操作
beginTransaction.commit();
session.close();
} //查询名字中带有a的人数总数 -- 2
public void search4() {
Session session = HibernateUtils.getSession();
Transaction beginTransaction = session.beginTransaction(); //模板:开始Criteria操作 //操作 select count(*) from user where username like '%i%' CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
Root<User> root = criteria.from(User.class); criteria.select(criteriaBuilder.count(root)).where(criteriaBuilder.like(root.get("username"),"%a%")); Long count = session.createQuery(criteria).uniqueResult(); System.out.println(count); //模板:完成操作
beginTransaction.commit();
session.close();
} }

CriteriaDao.java

JavaWeb_(Hibernate框架)Hibernate中数据查询语句Criteria基本用法的更多相关文章

  1. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

  2. JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法

    HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...

  3. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  4. hibernate框架学习之数据查询(本地SQL)

    本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...

  5. hibernate框架学习之数据查询(QBC)

    lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...

  6. hibernate框架学习之数据查询(QBC)helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...

  7. hibernate框架学习之数据查询(HQL)helloworld

    package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...

  8. (数据科学学习手册28)SQL server 2012中的查询语句汇总

    一.简介 数据库管理系统(DBMS)最重要的功能就是提供数据查询,即用户根据实际需求对数据进行筛选,并以特定形式进行显示.在Microsoft SQL Serve 2012 中,可以使用通用的SELE ...

  9. JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

随机推荐

  1. C语言快速判断素数——不超时

    这属于算法上的问题,好好考虑一下算法,还要考虑一下素数的定义. 素数是只有1和本身能整除的整数.所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数 ...

  2. java Lesson08总结

    package com.xt.java.FirstExciple.oop; public class NokiaPhone {  //成员变量 String name="np001" ...

  3. [转载]Java序列化与反序列化

    [转载]Java序列化与反序列化 来源: https://www.cnblogs.com/anitinaj/p/9253921.html 序列化和反序列化作为Java里一个较为基础的知识点,那你能说一 ...

  4. 使用Vue CLI脚手架搭建vue项目

    本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...

  5. linux之getopts

    在编写shell脚本中,经常要处理一些输入参数,在使用过程中发现getopts更加方便,能够很好的处理用户输入的参数和参数值. getopts用于处理用户输入参数,举例说明使用方法: while ge ...

  6. C++踩坑记录(一)std:;string的析构

    之前写服务端程序有一个往消息队列里面推json的过程,然后发现推进去C#端取到的无论如何都是个空指针 简单复现一下现场 string str1 = string("hello1") ...

  7. vue.js 父子组件间 props 数据同步处理

    常见的场景: 在一个vue组件A中,使用另外一个组件B.A将自己的数据通过B组件的Props属性(propX)传递到B组件实例内部,B组件内部会修改该Props属性(propX)的值,此时在A组件内部 ...

  8. git ls-remote url,判断 url 是否存在

    git ls-remote url,判断 url 是否存在 git ls-remote <url>

  9. Pycharm建立web2py项目

    web2py是一种免费的,开源的web开发框架,用于敏捷地开发安全的,数据库驱动的web应用:web2p采用Python语言编写,并且可以使用Python编程.web2py是一个完整的堆栈框架,也就是 ...

  10. 登录网站的autohotkey脚本

    ;如果需要这个软件的代码逻辑,删除敏感信息只需要把上面3行代码删除即可. !:: ;login经过测试必须用ie浏览器,在默认软件里面浏览器设置成ie即可,其他浏览器不让send密码 ;虽然通过程序把 ...