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 ...
随机推荐
- Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)
本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID mysql_insert_id ...
- publish over ssh 实现 Jenkins 远程部署
Jenkins远程部署,一开始没有任何头绪,想了很多方案. 因为两台机器都是windows系统,所以想到publish over cifs, 但是这个网上资料太少,貌似只能内网使用.又想到了Jenki ...
- hibernate 注解之 SequenceGenerator
hibernate 注解之 SequenceGenerator https://blog.csdn.net/zgf19930504/article/details/54694807 JPA @Id 和 ...
- 使用JMeter测试Java项目
一. Apache JMeter工具 1)简介 JMeter——一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态资 ...
- 大数据hadoop之zookeeper
一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...
- phalcon builder 用法
$rawSql = $builder->columns(["aa","bb"]) ->from("TableName") -&g ...
- Linux与本地上传下载文件
当出于安全原因,客户的服务器不允许使用windows第三方插件连接的时候,本地windows跟远程的linux服务器进行文件的上下传受到了限制,此时可以在linux服务器上安装一个工具:lrzsz.安 ...
- 股神小L 2016Vijos省选集训 day1
股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型 ...
- 【BZOJ2790】[Poi2012]Distance 筛素数+调和级数
[BZOJ2790][Poi2012]Distance Description 对于两个正整数a.b,这样定义函数d(a,b):每次操作可以选择一个质数p,将a变成a*p或a/p, 如果选择变成a/p ...
- 软RAID5制作流程
说明:本实验没有用到多个磁盘,而是利用单个磁盘划分出的多个分区来仿真的,如果在实际项目中,请依情况而定. 1. 分区 我这里划分6个分区,用4个分区组成RAID 5,用1个分区作为spare disk ...