在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. .NET项目版本号的小随笔

    [题外话] 一直以来都对.NET项目中的几个版本号(AssemblyVersion.AssemblyFileVersion.AssemblyInformationalVersion)以及版本号中的Re ...

  2. [转]各种移动GPU压缩纹理的使用方法

    介绍了各种移动设备所使用的GPU,以及各个GPU所支持的压缩纹理的格式和使用方法.1. 移动GPU大全 目前移动市场的GPU主要有四大厂商系列:1)Imagination Technologies的P ...

  3. CentOS 7 网络配置

    Virtual box 安装了CentOS 7最小模式后马上用ifconfig命令查看网络情况,发现该命令不存在. [root@centos1 ~]# ifconfig -bash: ifconfig ...

  4. iOS开发-应用崩溃日志揭秘(一)

    作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...

  5. 分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)

    partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指 ...

  6. Highchart.js

    Highcharts所有的源代码及例子均可通过官网下载得到.初学者只需要简单的修改官方提供的例子即可了解Highcharts. 下载 最新版本:Highcharts 3.0.10.Highstock ...

  7. html 生成pdf

    HTML生成PDF(c#) 最近因为工作需要,小小的研究了一下HTML生成PDF的方法,这方面的内容很多,但要么是不尽如人意的方法,要么就是那种收费的类库!为了广大.neter的福利,把自己的一点小小 ...

  8. Spill data to tempdb

    查看Execution Plan时,在Sort Operator上,发现一个Warning:Operator used tempdb to spill data during execution wi ...

  9. 小谈MVC 模式

    MVC (Modal View Controler) 本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使 ...

  10. OPEN CASCADE Gauss Least Square

    OPEN CASCADE Gauss Least Square eryar@163.com Abstract. The least square can be used to solve a set ...