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 ...
随机推荐
- 剑指Offer面试题:4.从尾到头打印链表
一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...
- ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...
- 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript
同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...
- MySQL 存储过程
MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...
- yformater - chrome谷歌浏览器json格式化json高亮json解析插件
yformater是一款chrome浏览器插件,用来格式化(高亮)服务端接口返回的json数据. 实际上小菜并不是第一个写这种插件的,但是现有的chrome json格式化插件实在是不太好用,索性小菜 ...
- php后台增加删除修改跳转页面
第一步 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析
这是关于RecyclerView的第二篇,说的是如何自定义Item动画,但是请注意,本文不包含动画的具体实现方法,只是告诉大家如何去自定义动画,如何去参考源代码. 我们知道,RecyclerView默 ...
- SQL语句全
创建数据库 创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database ...
- 前端组件化Polymer入门教程(8)——事件
可以在listeners对象中监听事件 <x-custom></x-custom> <dom-module id="x-custom"> < ...
- 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 ...