Criteria  通用规则

Criterrion   部分规则  自定义

Restrictions 限制条件

Projection 投影(返回Object数组)

运算符号
= eq
!=ne
>gt
<lt
>=ge
<=le
in
is null
is not null

查询所有

 @Testpublic  void  queryAll(){Criteria criteria=s.createCriteria(Product.class);//     Criteria criteria=s.createCriteria("com.oracle.entity.Product");//方法2List<Product> list=criteria.list();for (Product p:list){System.out.println(p.getPname());}}

分页

criteria.setFirstResult(0);
criteria.setMaxResult(3);

@Testpublic void queryByPage(){Criteria criteria=session.createCriteria(Product.class);criteria.setFirstResult(0);criteria.setMaxResults(3);List<Product> list=criteria.list();for (Product p:list){System.out.println(p.getPname());}}

排序

criteria.add(Restrictions.gt("属性",条件))

排序
criteria.addOrder(Order.desc("属性"));

 @Testpublic void queryAll3(){Criteria criteria=session.createCriteria(Product.class);criteria.addOrder(Order.desc("salecount"));//paixucriteria.addOrder(Order.asc("collect"));/***多个条件排序**/SimpleExpression expression1= Restrictions.lt("salecount",7l);//<  属性  条件SimpleExpression expression2=Restrictions.gt("collect",5l);//>  criteria.add(Restrictions.and(expression1,expression2));criteria.setFirstResult(0);criteria.setMaxResults(3);List<Product> list = criteria.list();for (Product p:list){System.out.println(p.getPname());System.out.println(p.getSalecount());System.out.println(p.getCollect());}}

多个条件排序

规则:二次排序 先按第一个条件进行排序 如果第一次没有相同的数据 第二个条件不起作用;如果第一次有相同的数据 第二次只排重复的按第二个条件进行排序

模糊查询

criteria.add(Restrictions.like("属性","%条件%"))

 @Testpublic void queryByLike(){Criteria criteria=session.createCriteria(Product.class);criteria.addOrder(Order.desc("salecount"));//排序criteria.addOrder(Order.asc("collect"));criteria.add(Restrictions.like("pname","%小米%"));List<Product> list=criteria.list();for (Product p:list){System.out.println(p.getPname());System.out.println(p.getCollect());System.out.println(p.getSalecount());}}

投影查询

@Testpublic void queryAllByProject(){Criteria criteria=session.createCriteria(Product.class);criteria.addOrder(Order.desc("salecount"));criteria.addOrder(Order.asc("collect"));ProjectionList projectionList = Projections.projectionList();projectionList.add(Projections.property("pname"));projectionList.add(Projections.property("salecount"));projectionList.add(Projections.property("collect"));criteria.setProjection(projectionList);List<Object[]> list=criteria.list();for (Object[] o:list){System.out.println(o[0]);System.out.println(o[1]);System.out.println(o[2]);}}

分组查询      不支持having

Projections.groupProperty("属性")

 /*** 分组=合并 把相同的数据合并为一条 一个字段 多个字段来分组* SELECT  SALECOUNT,USID,count(SALECOUNT) FROM TPRODUCT GROUP BY SALECOUNT,USID* 在QBC中不支持having 查询 自己通过java代码去过滤*/@Testpublic void queryAllByGroup(){Criteria criteria=s.createCriteria(Product.class);ProjectionList projectionList=Projections.projectionList();//分类projectionList.add(Projections.groupProperty("salecount"));//对象projectionList.add(Projections.groupProperty("user"));projectionList.add(Projections.count("salecount"));criteria.setProjection(projectionList);List<Object[]> list=criteria.list();for (Object[] o:list){System.out.println(o[0]);System.out.println(((User)o[1]).getPk());System.out.println(o[2]);}}

多表查询

Criteria criteria=s.createCriteria(类名.class);

左外连接
criteria.createCriteria("想要连接的类名",JoinType.LEFT_OUTER_JOIN);

/*** SELECT T.*,C.CNAME FROM TPRODUCT T LEFT JOIN TCATALOG C ON T.CID=C.PK* 左连接*/@Testpublic void queryallbyleftjoin(){Criteria criteria = s.createCriteria(Product.class);criteria.createCriteria("catalog", JoinType.LEFT_OUTER_JOIN);List<Product> list=criteria.list();for (Product p:list){System.out.println(p.getPname());System.out.println(p.getCatalog().getCname());}}

内连接

criteria.createCriteria("想要连接的类名",JoinType.INNER_JOIN);

 /*** SELECT T.*,C.CNAME FROM TPRODUCT T LEFT JOIN TCATALOG C ON T.CID=C.PK* 一般来说 开发的是hibernate  连接查询没有意义 类和类本身存在关联关系* 查询 Fetch的规则 抓取策略 去查询 即时加载 (一条多表查询的sql) 懒加载(只发一条sql)*/@Testpublic void queryallbyinnerjoin(){Criteria criteria = s.createCriteria(Product.class);criteria.createCriteria("catalog", JoinType.INNER_JOIN);List<Product> list=criteria.list();for (Product p:list){System.out.println(p.getPname());System.out.println(p.getCatalog().getCname());}}

QBC (Query By Criteria)相关推荐

  1. QBC(Query By Criteria) QBE (Query By Example)

    QBC  参考:(Hibernate的QBC查询) //is empty and is not empty @Testpublic void testQBC(){Session session = s ...

  2. hibernate学习之四——Query和Criteria接口

    Query 和 Criteria 接口是 Hibernate 的查询接口,用于向数据库查询对象以及控制执行查询的过程. Query 实例包装了一个 HQL(Hibernate Query Langua ...

  3. hibernate的Query和Criteria

    hibernate作为持久层框架目前虽然是市场的最优选择,但是其中的设计理念与思想还是需要学习的: 这里就我自己遇到的查询部分代码做个总结. 使用Query和Criteria和标准sql都在下边了 @ ...

  4. hibernate教程--检索方式详解(hql,sql,QBC)

    1.1 Hibernate的检索方式 1.1.1 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式:  根据已经加载的对象导航到其他对象 * Customer custome ...

  5. hibernate教程--检索方式(hql,sql,QBC)

    1.1Hibernate的检索方式 1.1.1Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 * Customer customer = ...

  6. Criteria大全

    QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create( ...

  7. hibernate QBC和QBE精讲与案列分析(上)

    转载:http://blog.sina.com.cn/s/blog_7fff746d0101ese2.html 本章的主要内容包括: ● QBC数据检索 ● 连接查询 ● Hibernate的数据检索 ...

  8. 【hibernate框架】面向对象的查询语法(QBE和QBC)

    QBC和QBE QBC:(Query By Criteria) Criteria是Criterion的复数,是"标准.准则.约束"的意思. 用法: @Test public voi ...

  9. hibernate查询方式总结(四)之QBC,QBE查询

    QBC(Query By Criteria) 查询方式 这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections.使用QBC查询,一般需要以下 ...

最新文章

  1. 二维“玄”如何“抖动”出三维世界?
  2. RocketMQ实战(四)
  3. linux打开文件命令occ,Linux系统查看文件内容的命令有哪些?
  4. 数据结构 2018统考题【找出数组中未出现的最小正整数】
  5. Xcode11 后Appdelegate自定义UIWindow对象失败详解。
  6. 安装Sqlserver2008的问题
  7. dalvik on J2EE: running tomcat on dalvik
  8. SQL语句查询条数不足10行时如何自动补充空行
  9. [翻译]No.9354 SharePoint Pages(3)之网站页面
  10. java 对象流 乱码,JAVA 中的 IO 流
  11. 链接数据库 远程事务的处理方式
  12. 算法设计与分析——图像的压缩
  13. [每日一氵] TensorRT中 GA和EA的不同
  14. apache poi excel word 加密,不用借助其他jxcell.jar包
  15. Navicat Premium MAC版本破解
  16. 华尔街远邻 | 解读国际清算银行对加密货币的暧昧态度
  17. 2015 移动技术白皮书
  18. 网页代码扒ppt_在网页中在线浏览ppt文档
  19. PHY驱动调试之 --- PHY控制器驱动(二)
  20. 区块链底层平台FISCO BCOS的网络压缩功能如何?

热门文章

  1. Ubuntu 18.04 右上角音量图标消失问题解决方法
  2. Ceph高版本对象存储服务修改参数导致无法写入
  3. Python序列——字典
  4. 【日期时间合法性校验—C语言】
  5. 工具类在线教育走向何处
  6. 泰凌微8258入门教程 BLE篇②——BLE Single Connection 蓝牙BLE 软件架构
  7. linux patch解析
  8. Shiro-编程不良人
  9. iOS----如何添加背景图片 并使图片可以一直在背景中显示
  10. 【3】机器学习之华山论剑:贝叶斯方法