Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询
一、QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成
1、java 代码如下:
/**
* 查询所有
*/
@Test
public void testQuery(){
// 获取 Criteria 对象
Criteria criteria = session.createCriteria(Person.class);
List<Person> list = criteria.list();
for(Person p : list){
System.out.println(p);
}
} /**
* 条件查询
*/
@Test
public void testQuery2(){
// 获取 Criteria 对象
Criteria criteria = session.createCriteria(Person.class);
// 查询 id 属性小于等于 5 的记录
criteria.add(Restrictions.le("id", 5));
// 查询 id 属性等于 5 的记录
criteria.add(Restrictions.eq("id", 5));
// 模糊查询 name 属性包含 -8 的记录
criteria.add(Restrictions.like("name", "%-8%"));
// 查询 age 属性 21 岁到 24 岁之间的记录
criteria.add(Restrictions.between("age", 21, 24));
// 查询 id 属性等于 2,5,7的记录
criteria.add(Restrictions.in("id", new Object[]{2,5,7}));
// 对 id 属性做升序
criteria.addOrder(Order.asc("id"));
// 对 id 属性做降序
criteria.addOrder(Order.desc("id"));
List<Person> list = criteria.list();
for(Person p : list){
System.out.println(p);
}
} /**
* 条件查询
* 通过 Property 类的静态方法进行查询条件的绑定
* 其实底层是对 Restrictions 的封装
*/
@Test
public void testQuery3(){
// 获取 Criteria 对象
Criteria criteria = session.createCriteria(Person.class);
// 查询 id 属性小于等于 5 的记录
criteria.add(Property.forName("id").le(5));
// 查询 age 属性 21 岁到 24 岁之间的记录
criteria.add(Property.forName("id").between(3, 6));
List<Person> list = criteria.list();
for(Person p : list){
System.out.println(p);
}
}
QBC:http://blog.csdn.net/agromach/article/details/1932290
二、样例查询
1、java 代码如下:
/**
* 样例查询
* 根据给定了值的属性作为查询条件进行查询
* 注意:一个对象的属性是基本类型,因为有默认值,所有也会拼装到查询条件中
*/
@Test
public void testQuery4(){
Person p = new Person();
p.setName("ldh-8");
p.setPasswork(131);
Criteria criteria = session.createCriteria(Person.class);
criteria.add(Example.create(p));
List<Person> list = criteria.list();
for(Person person : list){
System.out.println(person);
}
}
三、离线查询
/**
* 离线查询
* 可以在绑定查询数据和条件之前不需要session(最晚打开session)
* 当真正使用的时候才传递一个当前的session
*
* session使用的技巧:
* 最晚打开
* 最早关闭
* 不用长时间的打开
*/
@Test
public void testQuery5(){
DetachedCriteria dc = DetachedCriteria.forClass(Person.class);
dc.add(Restrictions.between("id", 5, 8));
Criteria criteria = dc.getExecutableCriteria(session);
List<Person> list = criteria.list();
for(Person person : list){
System.out.println(person);
}
}
Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询的更多相关文章
- 风炫安全WEB安全学习第二十节课 反射型XSS讲解
风炫安全WEB安全学习第二十节课 反射型XSS讲解 反射性xss演示 原理讲解 如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞.通常,该页面会使用一个包含消息文本的参数, ...
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- Hibernate学习---第十五节:hibernate二级缓存
1.二级缓存所需要的 jar 包 这三个 jar 包实在 hibernate 解压缩文件夹的 lib\optional\ehcache 目录下 2.配置 ehcache.xml <ehcache ...
- Hibernate学习---第十四节:hibernate之session线程安全
1.hibernate.cfg.xml 文件中添加如下代码开启线程安全: <property name="hibernate.current_session_context_class ...
- Hibernate学习---第十三节:hibernate过滤器和拦截器的实现
一.hibernate 过滤器 1.在持久化映射文件中配置过滤器,代码如下: <?xml version="1.0"?> <!DOCTYPE hibernate- ...
- Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取
1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // ...
- Hibernate学习---第七节:关联关系
一.关联关系一对一外键(双向) 1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; /** * 持久化类设计 * 注意: ...
- Hibernate学习---第六节:数组&list&map&set的映射配置
1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; import java.util.HashMap; import ja ...
- Hibernate学习(七)———— hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等 --WH 一.hibernate中的5种 ...
随机推荐
- 内核源码之Kconfig和Makefile
转自:http://www.cnblogs.com/image-eye/archive/2011/08/28/2156005.html 内核源码之Kconfig和Makefile Linux内核源码树 ...
- appium mac 下 安装及踩坑
Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver的json ...
- python带setup.py的包的安装
如psutil-4.2.0.tar.gz tar -zxvf psutil-4.2.0.tar.gz psutil-4.2.0 cd psutil-4.2.0 sudo python setup.py ...
- php-fpm重启失败报错
php-fpm启动命令:/usr/local/php5/sbin/php-fpm 报错:ERROR: unable to bind listening socket for address '127. ...
- cocos2d-x 3.0rc1 使用iconv库 解决UTF8乱码问题
多国语言要用到开源字符转换 iconv 先贴出自己的使用代码 你能够做成头文件 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include &qu ...
- 服务器端获取表单数据的编码解码问题(servlet)
首先需要明确指出的是,这里的服务器是指tomcat. 在页面没有明确指定编码的情况下,客户端通过input标签和字符串向服务器传递两个值param1和param2.如果直接使用request.getP ...
- 成功扩展live555支持ipv6,同时支持RTSPServer & RTSPClient
live555对ipv6的扩展 从live555的官网看live555的发展历史,实在是历史悠久,保守估计已经发展了至少16年以上了,同时,这也导致了live555在很多架构和考虑上面不能满足现代化的 ...
- 九度OJ 1342:寻找最长合法括号序列II (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:898 解决:366 题目描述: 假如给你一个由'('和')'组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给 ...
- JavaScript 中 onload 事件绑定多个方法的优化建议
页面加载完毕时会触发 onload 事件.基于内容(HTML)要与行为(JavaScript)分离的编码思想,我们需要将一些对页面的初始化操作写在方法内,并通过window.onload = func ...
- 为什么要对url进行encode
发现现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作,也就是: http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/bl ...