QBC (Query By Criteria)
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)相关推荐
- QBC(Query By Criteria) QBE (Query By Example)
QBC 参考:(Hibernate的QBC查询) //is empty and is not empty @Testpublic void testQBC(){Session session = s ...
- hibernate学习之四——Query和Criteria接口
Query 和 Criteria 接口是 Hibernate 的查询接口,用于向数据库查询对象以及控制执行查询的过程. Query 实例包装了一个 HQL(Hibernate Query Langua ...
- hibernate的Query和Criteria
hibernate作为持久层框架目前虽然是市场的最优选择,但是其中的设计理念与思想还是需要学习的: 这里就我自己遇到的查询部分代码做个总结. 使用Query和Criteria和标准sql都在下边了 @ ...
- hibernate教程--检索方式详解(hql,sql,QBC)
1.1 Hibernate的检索方式 1.1.1 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 * Customer custome ...
- hibernate教程--检索方式(hql,sql,QBC)
1.1Hibernate的检索方式 1.1.1Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 * Customer customer = ...
- Criteria大全
QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create( ...
- hibernate QBC和QBE精讲与案列分析(上)
转载:http://blog.sina.com.cn/s/blog_7fff746d0101ese2.html 本章的主要内容包括: ● QBC数据检索 ● 连接查询 ● Hibernate的数据检索 ...
- 【hibernate框架】面向对象的查询语法(QBE和QBC)
QBC和QBE QBC:(Query By Criteria) Criteria是Criterion的复数,是"标准.准则.约束"的意思. 用法: @Test public voi ...
- hibernate查询方式总结(四)之QBC,QBE查询
QBC(Query By Criteria) 查询方式 这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections.使用QBC查询,一般需要以下 ...
最新文章
- 二维“玄”如何“抖动”出三维世界?
- RocketMQ实战(四)
- linux打开文件命令occ,Linux系统查看文件内容的命令有哪些?
- 数据结构 2018统考题【找出数组中未出现的最小正整数】
- Xcode11 后Appdelegate自定义UIWindow对象失败详解。
- 安装Sqlserver2008的问题
- dalvik on J2EE: running tomcat on dalvik
- SQL语句查询条数不足10行时如何自动补充空行
- [翻译]No.9354 SharePoint Pages(3)之网站页面
- java 对象流 乱码,JAVA 中的 IO 流
- 链接数据库 远程事务的处理方式
- 算法设计与分析——图像的压缩
- [每日一氵] TensorRT中 GA和EA的不同
- apache poi excel word 加密,不用借助其他jxcell.jar包
- Navicat Premium MAC版本破解
- 华尔街远邻 | 解读国际清算银行对加密货币的暧昧态度
- 2015 移动技术白皮书
- 网页代码扒ppt_在网页中在线浏览ppt文档
- PHY驱动调试之 --- PHY控制器驱动(二)
- 区块链底层平台FISCO BCOS的网络压缩功能如何?