创建实体类对象:

package domain;import java.util.HashSet;
import java.util.Set;//客户实体
public class Customer {private Long cust_id;private String cust_name;private String cust_source;private String cust_industry;private String cust_level;private String cust_linkman;private String cust_phone;private String cust_mobile;//使用set集合,表达一对多关系private Set<LinkMan> linkMens = new HashSet<LinkMan>();public Set<LinkMan> getLinkMens() {return linkMens;}public void setLinkMens(Set<LinkMan> linkMens) {this.linkMens = linkMens;}public Long getCust_id() {return cust_id;}public void setCust_id(Long cust_id) {this.cust_id = cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name = cust_name;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source = cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry = cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level = cust_level;}public String getCust_linkman() {return cust_linkman;}public void setCust_linkman(String cust_linkman) {this.cust_linkman = cust_linkman;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone = cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile = cust_mobile;}@Overridepublic String toString() {return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]";}
}

View Code

自定义工具类:

package utils;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class HibernateUtils {private static SessionFactory sf;static{//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象sf = conf.buildSessionFactory();}//获得session => 获得全新sessionpublic static Session openSession(){//3 获得sessionSession session = sf.openSession();return session;}//获得session => 获得与线程绑定的sessionpublic static Session getCurrentSession(){//3 获得sessionSession session = sf.getCurrentSession();return session;}
}

View Code

测试类示例:

基本语法:

package criteria;import java.util.List;import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;import domain.Customer;
import utils.HibernateUtils;//学习Criteria语法
public class Demo {@Test//基本语法public void fun1(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//----------------------------------------------------
        Criteria c = session.createCriteria(Customer.class);List<Customer> list = c.list();System.out.println(list);//----------------------------------------------------
        tx.commit();session.close();}@Test//条件语法// >                 gt// >=                ge// <                lt// <=                le// ==                eq// !=                ne// in                in// between and        between// like             like// is not null         isNotNull// is null            isNull// or                or// and                andpublic void fun2(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//----------------------------------------------------
        Criteria c = session.createCriteria(Customer.class);//        c.add(Restrictions.idEq(2l));c.add(Restrictions.eq("cust_id",2l));List<Customer> list = c.list();System.out.println(list);//----------------------------------------------------
        tx.commit();session.close();}@Test//分页语法 - 与HQL一样public void fun3(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//----------------------------------------------------
        Criteria c = session.createCriteria(Customer.class);//limit ?,? c.setFirstResult(0);c.setMaxResults(2);List<Customer> list = c.list();System.out.println(list);//----------------------------------------------------
        tx.commit();session.close();}@Test//排序语法 public void fun4(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//----------------------------------------------------
        Criteria c = session.createCriteria(Customer.class);c.addOrder(Order.asc("cust_id"));//升序//c.addOrder(Order.desc("cust_id"));降序
        List<Customer> list = c.list();System.out.println(list);//----------------------------------------------------
        tx.commit();session.close();}@Test//统计语法 public void fun5(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//----------------------------------------------------
        Criteria c = session.createCriteria(Customer.class);//设置查询目标(聚合函数)
        c.setProjection(Projections.rowCount());List list = c.list();System.out.println(list);//----------------------------------------------------
        tx.commit();session.close();}}

离线查询:

传统criteria对象创建依赖于session,前端传递查询条件依次经过WEB、SERVICE层到DAO层,

在DAO层组装查询条件到criteria后执行查询

离线的criteria对象,于session无关,凭空创建,可以在WEB层创建criteria对象并组装查询条件,

这时候直接传递criteria对象到DAO层查询即可,这时候就做到了一个DAO方法适用于所有查询

package criteria;import java.util.List;import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;import domain.Customer;
import utils.HibernateUtils;//学习离线Criteria
public class Demo2 {@Testpublic void fun1(){//Service/web层DetachedCriteria dc  = DetachedCriteria.forClass(Customer.class);dc.add(Restrictions.idEq(5l));//拼装条件(全部与普通Criteria一致)//----------------------------------------------------Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();//----------------------------------------------------//Dao层Criteria c = dc.getExecutableCriteria(session);List list = c.list();System.out.println(list);//----------------------------------------------------
        tx.commit();session.close();}}

转载于:https://www.cnblogs.com/xuyiqing/p/8454906.html

hibernate框架学习笔记11:Criteria查询详解相关推荐

  1. hibernate框架学习笔记2:配置文件详解

    实体类: package domain;public class Customer {private Long cust_id;private String cust_name;private Str ...

  2. spring框架学习笔记2:配置详解

    简单写一个类做示例: package bean;public class User {private String name;private Integer age;public String get ...

  3. 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!

    从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...

  4. 【学习笔记】线段树详解(全)

    [学习笔记]线段树详解(全) 和三个同学一起搞了接近两个月的线段树,头都要炸了T_T,趁心态尚未凉之前赶快把东西记下来... [目录] [基础]作者:\((Silent\)_\(EAG)\) [懒标记 ...

  5. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  6. Laravel学习笔记汇总——Collection方法详解

    ## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...

  7. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  8. [原创]Saltstack学习笔记:命令参数详解以及配置文件说明

    很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...

  9. Hibernate框架--学习笔记(上):hibernate项目的搭建和常用接口方法、对象的使用

    一.什么是Hibernate框架: 1.Hibernate是一个操作数据库的框架,实现了对JDBC的封装: 2.Hibernate是一个ORM(对象关系映射)框架,我们在写程序时 ,用的是面向对象的方 ...

最新文章

  1. 用原生JavaScript实现图片瀑布流的浏览效果
  2. 深入理解Linux软件包的配置、编译与安装
  3. ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》
  4. hdu_2089 不要62
  5. cisco服务器维修,面向终端的AMP控制台的思科维护的排除列表更改
  6. 【历史回顾】Linux发展一览
  7. 一分钟,六张图让您看懂Linux系统对程序员的重要性。
  8. oracle+基本内置函数,oracle 内置函数
  9. 揭开面纱:Kubernetes架构详解
  10. JavaScript的实现
  11. SQL语言学习随手记——二进制与十六进制之间的转换
  12. CASS11.0.0.8 for AutoCAD2010-2023安装教程
  13. RSA非对称加密算法详解
  14. 微信小程序父子组件之间传值
  15. 启科量子在2022全球数字经济大会量子信息技术与应用论坛公布量子计算机工程化进展
  16. 2020-4-18 深度学习笔记20 - 深度生成模型 2 (深度信念网络DBN,深度玻尔兹曼机DBM)
  17. django静态页面
  18. 文字生成视频,清华出品
  19. 爬虫之 --爬取豆瓣电影
  20. Facebook北京大学2015年宣讲会小记【Facebook Technical Talk】

热门文章

  1. 高效程序员常用的工具
  2. Android 文件的上传
  3. 驱动开发中的常用操作
  4. List集合和set集合
  5. android WebView总 结
  6. eclipse插件:打开选中文件所在的目录
  7. ios-实现ARC与MRC混编
  8. nginx 限制某些类型的客户端的访问
  9. 阿拉伯数字转换英文数字表示算法解析及其实现
  10. css32D、3D、动画、过渡