package cn.itcast.h3.query.hql;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions; import cn.itcast.h3.query.hql.vo.StudentModel;
import cn.itcast.h3.query.hql.vo.TeacherModel;
import cn.itcast.util.HibernateUtil; //Criteria查询(QBC)
public class CriteriaApp {
// 简单查询
void testSimpleCriteria() {
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(TeacherModel.class);
List<TeacherModel> queryList = c.list();
for (TeacherModel tm : queryList) {
System.out.println(tm);
}
s.close();
} // 查询排序
void testCriteriaOrder() {
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(StudentModel.class);
c.addOrder(Order.asc("age"));
c.addOrder(Order.desc("studentName"));
List<StudentModel> queryList = c.list();
for (StudentModel tm : queryList) {
System.out.println(tm);
}
s.close();
} // 按条件查询
void testCriteriaCondition() {
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(StudentModel.class);
// 从上向下,全部默认为并且关系
// c.add(Restrictions.like("studentName", "%虎%"));
// c.add(Restrictions.gt("age", 22));
// 使用关系描述条件
// c.add(Restrictions.or(Restrictions.like("studentName", "%虎%"),
// Restrictions.lt("age", 22)));
// c.add(
// Restrictions.and(
// Restrictions.eq("aa", 123),
// Restrictions.and(
// Restrictions.lt("aa", 232),
// Restrictions.eq("", 123)
// )
// )
// ); List<StudentModel> queryList = c.list();
for (StudentModel tm : queryList) {
System.out.println(tm);
}
s.close();
} // 链式风格
void testCriteriaLink() {
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(StudentModel.class);
c.add(Restrictions.like("studentName", "%虎%")).add( Restrictions.gt("age", 22));
List<StudentModel> queryList = c.list();
for (StudentModel tm : queryList) {
System.out.println(tm);
}
s.close();
}
// 投影风格
void testCriteriaShadow() {
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(StudentModel.class);
// 投影单个字段
// c.setProjection(Property.forName("age"));
// List<Integer> queryList = c.list();
// for (Integer age : queryList) {
// System.out.println(age);
// }
// 投影多个字段
c.setProjection(
Projections.projectionList()
.add(Property.forName("studentName"))
.add(Property.forName("age"))
);
List<Object[]> queryList =c.list();
for(Object[] objs:queryList){
for(Object obj:objs){
System.out.println(obj);
}
System.out.println("----------------");
}
s.close();
}
//多表关联查询
void testMulQuery(){
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(StudentModel.class);
c.createAlias("teacher", "t");
c.add(Restrictions.eq("t.teacherName", "李若亮"));
List<StudentModel> queryList = c.list();
for (StudentModel tm : queryList) {
System.out.println(tm);
}
s.close();
}
//离线查询DetachedCriteria
void testDetachedCriteria(){
DetachedCriteria dc = DetachedCriteria.forClass(StudentModel.class);
dc.createAlias("teacher", "t");
dc.add(Restrictions.eq("t.teacherName", "雅典娜"));
//..一路传递到数据层 Session s = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(s);
List<StudentModel> queryList = c.list();
for (StudentModel tm : queryList) {
System.out.println(tm);
}
s.close();
} public static void main(String[] args) {
new CriteriaApp().testDetachedCriteria();
}
}

hibernate框架学习之数据查询(QBC)helloworld的更多相关文章

  1. hibernate框架学习之数据查询(HQL)

    lHibernate共提供5种查询方式 •OID数据查询方式 •HQL数据查询方式 •QBC数据查询方式 •本地SQL查询方式 •OGN数据查询方式 OID数据查询方式 l前提:已经获取到了对象的OI ...

  2. hibernate框架学习之数据查询(QBC)

    lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...

  3. hibernate框架学习之数据查询(HQL)helloworld

    package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...

  4. hibernate框架学习之数据查询(本地SQL)

    本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...

  5. hibernate框架学习之增删改查helloworld

    插入数据删除数据修改数据查询单条数据查询多条数据 HelloWorldApp.java package cn.itcast.h3.helloworld; import org.hibernate.Se ...

  6. hibernate框架学习之数据抓取(加载)策略helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Query; import org.hibern ...

  7. hibernate框架学习之数据抓取(加载)策略

    Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...

  8. Hibernate框架学习(五)——批量查询(概述)

    一.HQL查询(Hibernate Query Language)多表查询,但不复杂时使用 Hibernate独家查询语言,属于面向对象的查询语言 1.基本查询 2.条件查询 注意:HQL语句中不可能 ...

  9. hibernate框架学习第六天:QBC、分页查询、投影、数据加载策略、二级缓存

    QBC查询 1.简单查询 Criteria c = s.createCriteria(TeacherModel.class); 2.获取查询结果 多条:list 单挑:uniqueResult 3.分 ...

随机推荐

  1. 关于Android Studio开发环境变量的设置(avd启动黑屏)

    之前因为乱按网上的设置导致启动avd启动黑屏,查了很久原来是ANDROID_AVD_HOME变量没有加$符号 以下是正确的环境变量配置 添加环境变量(注意avd中有一个$符号) ANDROID_SDK ...

  2. ant design环境搭建过程中遇到的问题--Windows-dva-cli

    基础的此处略去,nodejs和npm是前提. 1.官网介绍的是脚手架工具是antd-init,但是又建议真实项目中用dva-cli,所以博主就直接装的是dva-cli,这里主要是简单介绍下博主在Win ...

  3. 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、Git/SVN)

    一. 各类概念和指令介绍 1. NVM (1).  全称:Node Version Manager,是一款针对Nodejs的版本管理工具,由于Node的版本很多,很多时候我要需要依赖多个版本,并且要求 ...

  4. es6模块化导入导出

    模块化指的就是将一个大程序拆分成若干个互相依赖的小文件,然后在用简单的方法拼装起来. 在 ES6 之前,JS没有模块化系统,社区制定了一些模块加载方案 最主要的有 CommonJS(Asynchron ...

  5. 068、Calico的网络结构是什么?(2019-04-11 周四)

    参考https://www.cnblogs.com/CloudMan6/p/7520164.html     root@host1:~# docker run -itd --name bbox1 -- ...

  6. Install Ubuntu Server

    进入引导程序以后, 选择Install Ubuntu Server, 安装主菜单如下: 依次配置: 接着 https://www.youtube.com/watch?v=gqLaT01yei0

  7. 苹果手机上点击WEUI日期控件不容易点中

    主要问题是WEUI cells有Padding,而苹果手机一般屏幕较小,容易点不中导致的 <div class='weui_cell' style="padding-bottom:0p ...

  8. Redis基础知识 之——发布/订阅

    一.说明: 订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅 ...

  9. Docker(五)如何构建Dockerfile

    摘自 https://mp.weixin.qq.com/s/_hq9dPe6390htN8BTkoQeQ 一.Dockerfile的指令集 由于Dockerfile中所有的命令都是以下格式:INSTR ...

  10. Restful API学习Day4 - DRF版本控制和认证

    参考文档: Django REST framework基础:版本控制 Django REST framework基础:认证.权限.限制 为什么要有版本? 某些客户端 使用低版本只维护不开发新功能 v1 ...