Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取
1、hibernate 也可以通过标准的 SQL 进行查询
(1)、将SQL查询写在 java 代码中
/**
* 查询所有
*/
@Test
public void testQuery(){
// 基于标准的 sql 语句查询
String sql = "select * from t_person";
// 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类
SQLQuery query = session.createSQLQuery(sql);
// 因为是基于表的操作,所以返回的是标准值的Object数组
List<Object[]> list = query.list();
for(Object[] objs : list){
System.out.println(Arrays.toString(objs));
}
} @Test
public void testQuery2(){
// 基于标准的 sql 语句查询
String sql = "select * from t_person";
// 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类
SQLQuery query = session.createSQLQuery(sql);
// 指定查询结果与某个持久化类绑定
query.addEntity(Person.class);
List<Person> list = query.list();
for(Person p : list){
System.out.println(p);
}
} @Test
public void testQuery3(){
// 基于标准的 sql 语句查询
String sql = "select * from t_person where id in (:ids)";
// 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类
SQLQuery query = session.createSQLQuery(sql);
// 指定查询结果与某个持久化类绑定
query.addEntity(Person.class);
// 绑定参数
query.setParameterList("ids", new Object[]{3,6,9});
List<Person> list = query.list();
for(Person p : list){
System.out.println(p);
}
}(2)、将SQL语句写在配置文件中
配置文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="learn.hibernate.bean">
<sql-query name="mysqlquery">
<![CDATA[select * from t_person where id < :id]]>
</sql-query>
</hibernate-mapping>java 代码:
@Test
public void testQuery4(){
Query query = session.getNamedQuery("mysqlquery");
query.setInteger("id", 8);
List<Object[]> list = query.list();
for(Object[] objs : list){
System.out.println(Arrays.toString(objs));
}
}
2、数据抓取策略
数据抓取通过持久化映射文件来配置,代码如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="learn.hibernate.bean">
<class name="Person" table="t_person">
<id name="id" column="person_id">
<generator class="native"/>
</id>
<property name="name" column="t_name"/>
<property name="age"/>
<property name="passwork"/>
<property name="birthday"/>
<!--
fetch 数据抓取策略
join 表示通过连接语句,将关联的数据获取到,立即查询
select(默认) 表示通过另外的一条sql语句查询出关联数据,要用到的时候才会发起查询,延迟查询
subselect 通过另外的一条SQL语句查询,要用到时候才会发起查询,延迟查询
-->
<set name="addres" cascade="all" inverse="true" fetch="join">
<!-- 指定 addres 集合中的数据对应t_person的的一个外键 -->
<key column="p_id"/>
<!-- 指定Person 关联的实例类型 -->
<one-to-many class="Address"/>
</set>
</class>
<class name="Address" table="t_address">
<id name="id">
<generator class="native"/>
</id>
<property name="zipCode"/>
<property name="address"/>
<!--
多的一端使用 many-to-one 进行配置
-->
<many-to-one name="person" column="p_id"/>
</class>
</hibernate-mapping>
java代码如下:
/**
* 批量写入数据
*/
@Test
public void testAdd(){
tx = session.beginTransaction();
for(int i = 0; i < 10; i++){
Person person = new Person("ldh_"+i, 22+i, 123456+i, new Date()); Set<Address> addSet = new HashSet<Address>();
for(int j = 0; j < 10; j++){
Address add = new Address("5000"+i+j,"湖南郴州"+j);
add.setPerson(person);
addSet.add(add);
}
person.setAddres(addSet); session.persist(person);
if(i % 10 == 0){
session.flush();
session.clear();
}
}
tx.commit();
} @Test
public void testQuery(){
Person p = (Person)session.get(Person.class, 1);
System.out.println(p);
System.out.println(p.getAddres().size());
}
3、批量抓取
持久化映射文件代码如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="learn.hibernate.bean">
<class name="Person" table="t_person">
<id name="id" column="person_id">
<generator class="native"/>
</id>
<property name="name" column="t_name"/>
<property name="age"/>
<property name="passwork"/>
<property name="birthday"/>
<!--
fetch 数据抓取策略
join 表示通过连接语句,将关联的数据获取到,立即查询
select(默认) 表示通过另外的一条sql语句查询出关联数据,要用到的时候才会发起查询,延迟查询
subselect 通过另外的一条SQL语句查询,要用到时候才会发起查询,延迟查询 如果查询的数据比较多可以用 batch-size 来提高搜索
例如:batch-size="3" 批量抓取,表示每次查询出三条关联数据,如果有10条记录,那么会分四次查询出来
-->
<set name="addres" cascade="all" inverse="true" batch-size="3">
<!-- 指定 addres 集合中的数据对应t_person的的一个外键 -->
<key column="p_id"/>
<!-- 指定Person 关联的实例类型 -->
<one-to-many class="Address"/>
</set>
</class>
<class name="Address" table="t_address">
<id name="id">
<generator class="native"/>
</id>
<property name="zipCode"/>
<property name="address"/>
<!--
多的一端使用 many-to-one 进行配置
-->
<many-to-one name="person" column="p_id"/>
</class>
</hibernate-mapping>
java 代码如下:
@Test
public void testQuery2(){
Query query = session.createQuery("from Person");
List<Person> list = query.list();
for(Person p : list){
System.out.println(p);
System.out.println("------------------------");
Set<Address> adds = p.getAddres();
Address[] arr = new Address[adds.size()];
adds.toArray(arr);
System.out.println(Arrays.toString(arr));
}
}
可以查看:http://www.cnblogs.com/rongxh7/archive/2010/05/12/1733088.html
Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取的更多相关文章
- 风炫安全WEB安全学习第二十一节课 存储型XSS讲解
风炫安全WEB安全学习第二十一节课 存储型XSS讲解 存储型XSS演示 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存 ...
- 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缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...
- Hibernate学习---第十二节:Hibernate之锁机制&乐观锁实现
1.悲观锁 它指的是对数据被外界修改保持保守态度,因些,在整个数据处理过程中,将数据牌锁定状态.悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层的锁机制才能保证数据访问的排他性,否则,即使在本 ...
- 【mongodb系统学习之十一】mongodb删除数据
十一.mongodb删除数据: 1).删除全部文档:remove,语法db.collectionName.remove({}):小括号里边必须要有条件,否则不成功:如果只是一个空的{},则会删除集合内 ...
- Hibernate学习---第五节:普通组件和动态组件
一.普通组件映射配置 1.创建组件类,代码如下: package learn.hibernate.bean; /** * 组件类 */ public class Phones { private St ...
- Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询
一.QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成 1.java 代码如下: /** * 查询所有 */ @Tes ...
- Hibernate学习笔记--第一个Hibernate框架程序
一般使用集成开发环境是,把所需的类库添加到项目属性的库路径中,开发工具在部署时会自动复制所需要的类包到WEB-INF\lib目录下 MyEclipse中: 创建项目,右击项目->myeclips ...
随机推荐
- MapReduce源码分析之InputFormat
InputFormat描述了一个Map-Reduce作业中的输入规范.Map-Reduce框架依靠作业的InputFormat实现以下内容: 1.校验作业的输入规范: 2.分割输入文件(可能为多个), ...
- 七. PHP模式设计----运行及描写叙述任务
1. 解析器模式 //解析器内容类 //用于存放表达式的运算结果,并且能依据传入的表达式返回当初记录的结果 class InterpreterContext{ private $expressions ...
- EhCache 集群 配置(RMI方式)
这里先说明下环境:JDK1.6.ehcache-core-2.1.0.jar.Tomcat6.Spring3.0.2.使用的是RMI方式配置集群的,这里先吐槽下遇到的情况,在搜相关知识的时候发现到处都 ...
- Myeclipse 文件注释和解注释
我用的是myeclipse10.6, 在xml中 注释可以用: ctrl+shift+/ (段落注释) ctrl+shift+c (行注释) 解除注释可以用: ctrl+shift+\ 在proper ...
- 爬虫入门【2】Requests库简介
发送请求 使用Requests发送网络请求很简单 #首先要导入requests库 import requests #返回一个Response对象 r=requests.get('https://git ...
- 爬虫入门【1】urllib.request库用法简介
urlopen方法 打开指定的URL urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, ca ...
- HBase核心技术点
表的rowkey设计核心思想: 依据rowkey查询最快 对rowkey进行范围查询range 前缀匹配 预分区创建的三种方式 create 'ns1:t1', 'f1', SPLITS => ...
- WCF基础之承载服务和生成客户端
wcf的承载有三种iis.was和自承载,它们如何承载园子里有很多,就不多赘述. 自iis7以后iis支持http和非http的协议,使用iis承载服务与其他两种承载相比,我觉的最明显的是was和自承 ...
- ABAP OO 开发语法整理
[转自 http://blog.csdn.net/saphome/article/details/6956933] 在类中,只能用TYPE 附加关键字指定数据类型. •TYPES: 一般的类型定义方法 ...
- 电脑Svchost.exe 进程占CPU100% 的解决办法
Windows Update诊断和修复修复工具 http://support.microsoft.com/mats/windows_update/zh-cn Svchost.exe占用CPU100%的 ...