在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语句的更多相关文章

  1. hibernate框架中注意的几个问题

    使用hibernate框架中,session.createSQLQuery创建sql语句的时候遇到的问题 1.  select e.id,d.id from emp e,dept d where e. ...

  2. 关于HttpSession 和 Hibernate框架中 session异同点的简单解析

    快速理解: HttpSession中的session是一个容器用来盛基于会话机制的信息. 比喻:我把钱放进银行的保险柜里. 解析:我的钱就是我的信息,ID等 银行的保险柜就是session容器. Hi ...

  3. 详解Java的MyBatis框架中SQL语句映射部分的编写

    这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...

  4. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  5. Hibernate框架之Criteria 详解

    自从学数据库以来,从SQL查询-HQL查询-到Criteria 查询.有人问我:掌握一种查询语句不就可以吗,为什么还要学Criteria 查询?我回答道:用到特定于数据库的SQL 语句,程序本身会依赖 ...

  6. Hibernate框架中的HibernateUtil

    对于刚学习三层框架的人来说.每个配置文件和每个类.以及功能来说都非常新奇,时常就忘记了相关类的功能. 在这里建议编程就是要多加练习,才干熟能生巧. 这里说一下HibernateUtil类,在使用Hib ...

  7. JavaWeb_(Spring框架)在Struts+Hibernate框架中引入Spring框架

    spring的功能:简单来说就是帮我们new对象,什么时候new对象好,什么时候销毁对象. 在MySQL中添加spring数据库,添加user表,并添加一条用户数据 使用struts + hibern ...

  8. 在hibernate框架中配置显示sql语句

    使用Hibernate的框架开发时,可在Hibernate.cfg.xml中加上 <property name="hibernate.show_sql">true< ...

  9. Hibernate框架之Criteria查询

    首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...

随机推荐

  1. 剑指Offer面试题:4.从尾到头打印链表

    一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...

  2. ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器

    一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...

  3. 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript

    同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...

  4. MySQL 存储过程

    MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...

  5. yformater - chrome谷歌浏览器json格式化json高亮json解析插件

    yformater是一款chrome浏览器插件,用来格式化(高亮)服务端接口返回的json数据. 实际上小菜并不是第一个写这种插件的,但是现有的chrome json格式化插件实在是不太好用,索性小菜 ...

  6. php后台增加删除修改跳转页面

    第一步 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  7. Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析

    这是关于RecyclerView的第二篇,说的是如何自定义Item动画,但是请注意,本文不包含动画的具体实现方法,只是告诉大家如何去自定义动画,如何去参考源代码. 我们知道,RecyclerView默 ...

  8. SQL语句全

    创建数据库 创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database ...

  9. 前端组件化Polymer入门教程(8)——事件

    可以在listeners对象中监听事件 <x-custom></x-custom> <dom-module id="x-custom"> < ...

  10. LINQ系列:LINQ to SQL Group by/Having分组

    1. 简单形式 var expr = from p in context.Products group p by p.CategoryID into g select g; foreach (var ...