Hibernate框架中Criteria语句
在Hibernate中有一种查询语句是Criteria查询(QBC查询),今天呢 我们就一个个的详细的跟大家一起探讨Criteria语句的相关知识点
案例前的准备
//插入测试数据,构建数据库
public static void insertInfo(){
//获取Session
Session session=HibernateUtil.currentSession(); //开启事务
Transaction tx = session.beginTransaction(); //构建班级
Grade grade=new Grade("超级无敌宇宙班","炒鸡不错");
//构建第二个班级
Grade grade2=new Grade("超级班","很不错");
//构建学生
Student stu1=new Student("高冷小伙3","男");
Student stu2=new Student("高冷小伙4","女");
//指定关系
grade.getStus().add(stu1);
grade.getStus().add(stu2);
//保存班级
session.save(grade);
session.save(grade2);
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
案例一:查询所有学生信息(Criteria)
//使用Criteria语句查询所有学生信息
public static void selectStu(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class);
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
System.out.println(stu.getSex());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
经过以上语句我们可以看到的查询结果如下:

案例二:查询男生的信息(带条件查询)(Restrictions.eq())
//使用Criteria语句带条件查询学生信息
public static void selectStuWhere(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class).add(Restrictions.eq("sex", "男"));
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
System.out.println(stu.getSex());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如下:

案例三:关联查询,查询班级下的学生信息(Restrictions.eq())
//查询班级为超级无敌宇宙班的班级学生信息
public static void selectStuWhereGrade(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Grade.class).add(Restrictions.eq("gname", "超级无敌宇宙班"));
List<Grade> list = criteria.list();
for (Grade gra : list) {
for(Student stu:gra.getStus()){
System.out.println(stu.getSname());
}
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图:

案例四:关联查询,查询班级下的学生信息(取别名的方式)(Restrictions.eq())
//查询班级为超级无敌宇宙班的班级学生信息(方式二:取别名)
public static void selectStuWhereGradeAsName(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class);
//取别名
criteria.createAlias("grade", "g");
Criterion criterion= Restrictions.eq("g.gname", "超级无敌宇宙班");
criteria.add(criterion);
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例五:范围查询 查询名字是高冷小伙3和高冷小伙4的学生信息(Restrictions.in())
//范围查询 查询名字是高冷小伙3和高冷小伙4的学生信息
public static void selectStuWhereName(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class);
List lists=new ArrayList();
lists.add("高冷小伙3");
lists.add("高冷小伙4");
Criterion criterion= Restrictions.in("sname", lists);
criteria.add(criterion);
List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例六:模糊查询,查询学生姓名中有3的学生名称(Restrictions.like())
//模糊查询,查询学生姓名中有3的学生名称
public static void selectStuLike(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class);
//如果是 ilike的话是不区分大小写的
//Criterion criterion= Restrictions.like("sname", "%3%");
//或者是采用如下方式,则可以省略%%
Criterion criterion= Restrictions.like("sname", "",MatchMode.ANYWHERE);
criteria.add(criterion); List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例七:逻辑控制 多条件查询 查询性别为男 名字中有 3的学生信息(Restrictions.and())
//逻辑控制 多条件查询 查询性别为男 名字中有 3的学生信息
public static void selectStuManyWhere(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class); //条件1
Criterion c1= Restrictions.like("sname", "",MatchMode.ANYWHERE);
//条件2
Criterion c2= Restrictions.eq("sex","男");
//整合条件 and
Criterion criterion=Restrictions.and(c1, c2); criteria.add(criterion); List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例八:非空检查 查询没有学生的班级(Restrictions.isEmpty())
//非空检查 查询没有学生的班级
public static void selectNotStuGrade(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Grade.class); Criterion criterion=Restrictions.isEmpty("stus"); criteria.add(criterion); List<Grade> list = criteria.list();
for (Grade grade : list) {
System.out.println(grade.getGname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例九:动态查询 查询 学号大于0 名字中有3的学生信息(Criteria.add())
//动态查询 查询 学号大于0 名字中有3的学生信息
public static void selectStuDynamic(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class); //准备两个变量当成是前台穿过来的条件
Integer stuno=;
String stuname=""; //动态拼接
if(stuno!=null){
criteria.add(Restrictions.gt("sid",stuno));
}
if(stuname!=null){
criteria.add(Restrictions.ilike("sname",stuname,MatchMode.ANYWHERE));
} List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例十:排序 查询学号大于0的学生按照学号降序排列(criteria.addOrder())
//排序 查询学号大于0的学生按照学号降序排列
public static void selectStuOraderby(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class); Criterion criterion=Restrictions.gt("sid", ); criteria.add(criterion).addOrder(Order.desc("sid")); List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例十一:分页查询 查询第二页数据 每页显示一条记录(criteria.setMaxResults()和criteria.setFirstResult())
//分页查询 查询第二页数据 每页显示一条
public static void selectStuPage(){
//获取session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx = session.beginTransaction();
//使用Criteria查询
Criteria criteria = session.createCriteria(Student.class); /*//显示总记录数
Projection projection = Projections.count("sid");
criteria.setProjection(projection);
int count = ((Long)criteria.uniqueResult()).intValue();
System.out.println("总记录数为:"+count);*/ //准备两个变量
int pageSize=;//每页显示的条数
int pageIndex=;//第几页 criteria.setMaxResults(pageSize);
criteria.setFirstResult((pageIndex-)*pageSize); List<Student> list = criteria.list();
for (Student stu : list) {
System.out.println(stu.getSid());
System.out.println(stu.getSname());
}
//提交事务
tx.commit();
//关闭连接
HibernateUtil.closeSession();
}
查询结果如图

案例十二:使用DetachedCriteria查询超级无敌宇宙班的所有学生信息(DetachedCriteria)
//使用DetachedCriteria查询超级无敌宇宙班的所有学生信息
public static void detachedCriteria(){
//获取session
Session session=HibernateUtil.currentSession(); //构建一个DetachedCriteria对象
DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Student.class);
//取别名
detachedCriteria.createAlias("grade", "g");
//查询
Criterion criterion= Restrictions.eq("g.gname", "超级无敌宇宙班");
//绑定
detachedCriteria.add(criterion); //引入session
List<Student> list = detachedCriteria.getExecutableCriteria(session).list(); for (Student stu : list) {
System.out.println(stu.getSid());
System.out.println(stu.getSname());
}
}
结果如图

通过以上几种方式就差不多完成了Criteria查询的常用的知识点了!
Hibernate框架中Criteria语句的更多相关文章
- hibernate框架中注意的几个问题
使用hibernate框架中,session.createSQLQuery创建sql语句的时候遇到的问题 1. select e.id,d.id from emp e,dept d where e. ...
- 关于HttpSession 和 Hibernate框架中 session异同点的简单解析
快速理解: HttpSession中的session是一个容器用来盛基于会话机制的信息. 比喻:我把钱放进银行的保险柜里. 解析:我的钱就是我的信息,ID等 银行的保险柜就是session容器. Hi ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
- Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)
写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...
- Hibernate框架之Criteria 详解
自从学数据库以来,从SQL查询-HQL查询-到Criteria 查询.有人问我:掌握一种查询语句不就可以吗,为什么还要学Criteria 查询?我回答道:用到特定于数据库的SQL 语句,程序本身会依赖 ...
- Hibernate框架中的HibernateUtil
对于刚学习三层框架的人来说.每个配置文件和每个类.以及功能来说都非常新奇,时常就忘记了相关类的功能. 在这里建议编程就是要多加练习,才干熟能生巧. 这里说一下HibernateUtil类,在使用Hib ...
- JavaWeb_(Spring框架)在Struts+Hibernate框架中引入Spring框架
spring的功能:简单来说就是帮我们new对象,什么时候new对象好,什么时候销毁对象. 在MySQL中添加spring数据库,添加user表,并添加一条用户数据 使用struts + hibern ...
- 在hibernate框架中配置显示sql语句
使用Hibernate的框架开发时,可在Hibernate.cfg.xml中加上 <property name="hibernate.show_sql">true< ...
- Hibernate框架之Criteria查询
首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...
随机推荐
- ABP理论学习之应用服务
返回总目录 本篇目录 IApplicationService接口 ApplicationService类 工作单元 数据库连接和事务管理 自动保存更改 更多 应用服务的生命周期 应用服务用于将领域逻辑 ...
- ABP理论学习之MVC视图
返回总目录 本篇目录 介绍 AbpWebViewPage基类 介绍 ABP通过Abp.Web.Mvc Nuget包集成了MVC视图.因此你可以像常规那样创建MVC视图. AbpWebViewPage基 ...
- Backbone源码分析(一)
距离上一篇博客有一段时间了,期间各种琐事萦绕.最主要的一件是,当我差不多将整个dojo核心源码看完,惊讶的发现dojo1.*的设计以是老态龙钟之象,而我沉溺在dojo中太久,已经不知道前端世界变成了什 ...
- Repository 仓储,你的归宿究竟在哪?(二)-这样的应用层代码,你能接受吗?
写在前面 关于"Repository 仓储,你的归宿究竟在哪?"这个系列,本来是想写个上下篇,但是现在觉得,很有多东西需要明确,我也不知道接下来会写多少篇,所以上一篇的标题就改成了 ...
- RAID 概述
原创地址:http://www.cnblogs.com/jfzhu/p/3999283.html 转载请注明出处 独立硬盘冗余阵列(RAID, Redundant Array of Indep ...
- Module-Zero之启动模板
返回<Module Zero学习目录> 概览介绍 社交登录 基于Token的认证 单元测试 概览介绍 使用ABP和Module-Zero开始一个新的项目最简单的方式通过ABP官网的模板页面 ...
- LeetCode Note 1st,practice makes perfect
1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...
- Lightmaping
一.基本知识点 1.Baked Only:不会传入shader,只有烘焙时才有用,也就是_LightColor0等这种变量不会表示一个Baked Only Light(前提是场景有lightmap,如 ...
- javascript运动系列第四篇——抖动
× 目录 [1]原理介绍 [2]代码实现 [3]实例应用 前面的话 在运动系列中,前面分别介绍了匀速运动.变速运动和曲线运动.下面介绍一种特殊的运动形式——抖动 原理介绍 抖动其实是往复运动的一种特殊 ...
- Android之计算缓存大小并且清空缓存
转载博客:http://www.2cto.com/kf/201503/385492.html 项目中碰到了计算缓存大小和清空缓存的功能,这个很常见的功能,几乎每个APP都有,以为实现很简单,网上搜了一 ...