hibernate检索方式

Hibernate提供以下几种检索对象的方式。

l 导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)

l OID检索方式。(按照对象的OID来检索对象。)

l HQL检索方式。(使用面向对象的HQL查询语言。)

l QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。)

l 本地SQL检索方式。(使用本地数据库的SQL查询语句。)

 

一、Hibernate的检索方式简介

1、HQL检索方式

HQL(Hibernate Query Language)是面向对象的查询语言,它和SQL查询语言有些相识。在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。它具有以下功能:

l 在查询语句中设定各种查询条件。

l 支持投影查询,即仅检索出对象的部分属性。

l 支持分页查询。

l 支持分组查询,允许使用having和group by关键字。

l 提供内置聚集函数,如sum()、min()和mac()。

l 能够调用用户定义的SQL函数。

l 支持子查询,即嵌入式查询。

l 支持动态绑定参数。

Session类的find方法及Qurey接口都支持HQL检索方式。区别在于,前者只是执行一些简单HQL查询语句的便捷方法,它不具有动态绑定参数的功能,而且在将来新的Hibernate版本中,有可能淘汰find方法;而Qurey接口才是真正的HQL查询接口,它提供了以上列出的各种查询功能。

注:Qurey接口支持方法链编程风格,它的set方法都返回自身实例,而不是返回void类型。方法链编程风格能使程序代码更加简洁。

示例代码:

Java代码 复制代码
  1. Queryquery=session.createQuery("fromCustomerascwhere"+"c.name=:customerNameandc.age=:customerAge");//动态绑定参数query.setString("customerName","Test");query.setInteger("customerAge",21);//执行检索Listresult=query.list();//方法链编程风格Listresult1=session.createQuery("fromCustomerascwherec.name=:customerName"+"andc.age=:customerAge").setString("customerName","Test").setInteger("customerAge",21)
  2. .list();
    Query query = session.createQuery("from Customer as c where " +"c.name=:customerName and c.age=:customerAge");    // 动态绑定参数    query.setString("customerName", "Test");    query.setInteger("customerAge", 21);    // 执行检索    List result = query.list();     // 方法链编程风格    List result1 = session.createQuery(           "from Customer as c where c.name=:customerName"                  + " and c.age=:customerAge").setString(           "customerName", "Test").setInteger("customerAge", 21) 

           .list();  

 

2、QBC(Qurey By Criteria)检索方式

采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句。QBC API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expression类组成,它支持在运行时动态生成查询语句。

示例代码:

Java代码 复制代码
  1. Criteriacriteria=session.createCriteria(Customer.class);
 Criteria criteria = session.createCriteria(Customer.class);   
 
Java代码 复制代码
  1. Criterioncriterion1=Expression.like("namr","T%");<SPAN></SPAN>
 Criterion criterion1 = Expression.like("namr", "T%");   
Java代码 复制代码
  1. Criterioncriterion2=Expression.eq("age",newInteger(21));
 Criterion criterion2 = Expression.eq("age", new Integer(21));  
 
Java代码 复制代码
  1. criteria=criteria.add(criterion1);
 criteria = criteria.add(criterion1);    
 
Java代码 复制代码
  1. criteria=criteria.add(criterion2);//执行检索
criteria = criteria.add(criterion2);    // 执行检索    
 
Java代码 复制代码
  1. Listresult=criteria.list();//方法链编程风格<SPAN></SPAN>
List result = criteria.list();     // 方法链编程风格    
Java代码 复制代码
  1. Listresult1=session.createCriteria(Customer.class).add(Expression.like("namr","T%")).add(Expression.eq("age",newInteger(21))).list();
List result1 = session.createCriteria(Customer.class).add(Expression.like("namr", "T%")).add( Expression.eq("age", new Integer(21))).list();  

 

Hibernate还提供了QBE(Qurey By Example)检索方式,它是QBC的子功能。QBE允许先创建一个随想模板,然后检索出和这个样板相同的对象。

示例代码:

Java代码 复制代码
  1. CustomerexampleCustomer=newCustomer();
  2. exampleCustomer.setAge(21);
  3. Listresult1=session.createCriteria(Customer.class).add(
  4. Example.create(exampleCustomer)).list();
Customer exampleCustomer=new Customer();
exampleCustomer.setAge(21); 
List result1 = session.createCriteria(Customer.class).add( 
           Example.create(exampleCustomer)).list();

 

QBE的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的查询条件,然后返回匹配的对象。QBE只支持“” 和“”比较运算符,无法不大区间值,及其或的匹配。在这种情况下,还是采用HQL检索方式或QBC检索方式。

3、SQL检索方式

采用HQL或QBC检索方式时,Hibernate生成标准的SQL查询语句,使用于所有的数据库平台,因此这两种检索方式都是跨平台的

有的应用程序可能需要根据底层数据库的SQL方言,来生成一些特殊的查询语句。在这种情况下,可以利用Hibernate提供的SQL检索方式。

示例代码:

Java代码 复制代码
  1. Queryquery=session.createSQLQuery(
  2. "select{c.*}fromCUSTOMERascwherec.NAMElike:customerNameandc.AGE=:customerAge");//动态绑定参数query.setString("customerName","Test");
  3. query.setInteger("customerAge",21);//执行检索
  4. Listresult=query.list();
Query query = session.createSQLQuery(
"select {c.*} from CUSTOMER as c where c.NAME like :customerName and c.AGE=:customerAge");    // 动态绑定参数    query.setString("customerName", "Test");    
query.setInteger("customerAge", 21);    // 执行检索 

 List result = query.list();

 

4、使用别名

通过HQL检索一个类时,如果查询语句的其他地方需要引用它,应该为这个类指定一个别名,as关键字用于设定别名,也可以将as关键字省略。

QBC检索不需要由应用程序显式指定类的别名,Hibernate会自动把查询语句中的跟结点实体赋予别名“this”。

5、多态查询

HQL和QBC都支持多态查询,多态查询是指查询出当前类及所有子类的实例。多态查询对接口也使用。Hibernate不仅对from子句显式指定的类进行多态查询,而且对其他关联的类也会进行多态查询。

6、对查询结果排序

HQL和QBC都支持对查询结果进行排序。

Java代码 复制代码
  1. query=session.createQuery("fromCustomerascorderbyc.name");//排序
  2. criteria.addOrder(Order.asc("name"));
  3. criteria.addOrder(Order.desc("age"));
query = session.createQuery("from Customer as c order by c.name");    //排序    
criteria.addOrder(Order.asc("name")); 
 criteria.addOrder(Order.desc("age")); 

 

7、分页查询

Query和Criteria接口都提供了用于分页显式查询结果的方法。

l setFirstResult(int firstResult):设置从那个对象开始检索,参数表示这个对象在查询结果中的索引位置,索引位置的起始值为0。默认从0检索。

l setMaxResult(int maxResults):设置一次最多检索出的对象数目。默认检索所有。

示例代码:

Java代码 复制代码
  1. criteria=criteria.add(criterion1);
  2. criteria=criteria.add(criterion2);
  3. criteria.setFirstResult(0);
  4. criteria.setMaxResults(10);//执行检索
  5. Listresult=criteria.list();
  6. query.setString("customerName","Test");
  7. query.setInteger("customerAge",21);
  8. query.setFirstResult(0);
  9. query.setMaxResults(10);//执行检索
  10. Listresult=query.list();
criteria = criteria.add(criterion1);   
 criteria = criteria.add(criterion2);    
criteria.setFirstResult(0);    
criteria.setMaxResults(10);            // 执行检索 
List result = criteria.list();  
   query.setString("customerName", "Test");  
   query.setInteger("customerAge", 21);   
   query.setFirstResult(0);  
   query.setMaxResults(10);            // 执行检索 

  List result = query.list(); 

 

8、检索单个对象

Query和Criteria接口都提供了以下用于查询语句并返回查询结果的方法。

l list()方法:返回一个List类型的查询结果。

l uniqueResult()方法:返回单个对象。

注:Query接口还提供了一个iterate()方法,它和list()方法一样,能返回所有满足条件的持久化对象,但是两者使用不同的SQL查询语句。

示例代码: // 单个检索 Customer customer = (Customer) session.createQuery( "from Customer as c order by c.name").setMaxResults(1)

.uniqueResult(); // 单个检索 Customer customer = (Customer) session.createCriteria(

Customer.class).setMaxResults(1).uniqueResult();

如果明明知道一个对象,可以不调用setMaxResults(1)方法。

9、在HQL查询语句中绑定参数

A、按参数名字绑定。咋HQL中定义命名参数以“:”开头。

B、按照参数位置绑定。在HQL查询语句中用“?”来定义参数的位置。

示例代码: Query query = session.createQuery("from Customer as c where " + "c.name=? and c.age=?"); // 动态绑定参数 query.setString(0, "Test");

query.setInteger(1, 21);

除了以上用于绑定映射类型的参数的方法,Hibernate还提供了以下三个特殊的参数绑定方法。

(1)setEntity()方法:把参数与一个持久化类的实例绑定。(用id关联)

(2)setParameter()方法:绑定任意类型的参数。

(3)setProperties()方法:用于把命名参数与一个对象的属性值绑定。

10、在映射文件中定义命名查询语句(略)

二.设定查询条件

在where子句中给出的是对象的属性名,而不是字段名。

HQL和QBC支持的各种运算

 

 

运算类型

 

HQL运算符

 

QBC运算符

 

含义

 

比较运算

 

=

 

Expression.eq()

 

等于

<>

 

Expression.not(Expression.eq())

 

不等于

>

 

Expression.gt()

 

大于

 

>=

 

Expression.ge()

 

大于等于

<

 

Expression.lt()

 

小于

 

<=

 

Expression.le()

 

小于等于

 

is null

 

Expression.isNull()

 

等于空值

 

is not null

 

Expression.isNotNull()

 

非空值

 

范围运算

 

in (列表)

 

Expression.in()

 

等于列表中的某一个值

 

not in (列表)

 

Expression.not(Expression.in())

 

不等于列表中的任意一个值

 

between 值1 and 值2

 

Expression.between()

 

大于等于值1并且小于等于值2

 

not between 值1 and 值2

 

Expression.not(Expression.between())

 

小于值1或者大于值2

 

字符串模式匹配

 

like

Expression.like()

 

字符串模式匹配

 

逻辑运算

 

and

Expression.add()或者Expression.conjunction()

 

逻辑与

 

or

Expression.or()或者Expression.disjunction()

 

逻辑或

 

not

Expression.not()

 

逻辑非

1、比较运算

(1)不区分大小写:HQL使用lower()或者 upper()来实现(如:”…lower(c.name)=’tom’”);

QBC使用.ignoreCase()来实现(如:Expression.eq(“”,””) .ignoreCase())。

注:在HQL中,可以调用SQL函数。lower()转小写,upper()转大写。

QBC不支持直接调用SQL函数。

 

(2)HQL查询支持数学运算表达式,而QBC不支持。

 

2、范围运算

HQL中的in示例: c.name in (‘aa’,’bb’);

QBC中的in示例: String[] names={‘aa’,’bb’}; Expression.in(‘name’,names); 。

 

3、字符串模式匹配

HQL和QBC通用:字符串模式中的通配符

 

 

通配符名称

 

通配符

 

作用

 

百分号

 

%

 

匹配任意类型且任意长度(长度可以为0)的字符串,如果是中文,需要两个百分号,即“%%”

 

下划线

 

_

 

匹配单个任意字符,常用来限制字符串表达式的长度

 

QBC:MatchMode类包含的各个静态常量实例

 

 

匹配模式

 

举例

 

MatchMode.START

 

Expression.like(“name”,”y”, MatchMode.START)

姓名以y开头

 

MatchMode.END

 

Expression.like(“name”,”y”, MatchMode. END)

姓名以y结尾

 

MatchMode.ANYWHERE

 

Expression.like(“name”,”y”, MatchMode. ANYWHERE)

姓名中包含y

 

MatchMode.EXACT

 

Expression.like(“name”,”y”, MatchMode. EXACT)

精确匹配,姓名必须为y

 

4、逻辑运算

三、连接查询

HQL和QBC支持的各种连接类型

 

 

在程序中指定的链接查询类型

 

HQL语法

 

QBC语法

 

使用范围

 

内连接

 

inner join 或者 join

 

Criteria.createAlias()

 

适用于有关联的持久化类,并且在映射文件中对这种关联关系作了映射。

 

迫切内连接

 

inner join fetch 或者 join fetch

 

不支持

 

隐式内连接

 

 

不支持

 

左外连接

 

left outer join 或者 left join

 

不支持

 

迫切左外连接

 

left outer join fetch 或者 left join fetch

 

FetchMode.EAGER

 

右外连接

 

right outer join 或者 right join

 

不支持

 

交叉连接

 

ClassA,ClassB

 

不支持

 

适用于不存在关联关系的持久化类

 

1、默认情况下关联级别的运行时检索策略

采用配置文件中设置的检索策略,但有一个例外,那就是HQL会忽略映射文件设置的迫切左外连接策略,改用立即检索。

 

2、迫切左外连接

显式指定对象的关联关系为迫切左外连接检索策略,可以覆盖映射文件中指定的检索策略。

例HQL

"from Customer c left join fetch c.orders o where c.name like 't%'"

+" o.name like 't%'"

例QBC

List reslut=session.createCriteria(Customer.class) .setFetchMode("orders",FetchMode.EAGER) .add(Expression.like("name","t",MatchMode.START))

.list();

 

当使用迫切左外连接检索策略时,查询结果中可能会包含重复元素,可以通过一个HashSet来过滤重复元素:List result=….list(); HashSet set=new HashSet(result);

Hibernate允许在一条查询语句中迫切左外连接多个多对一或一对一关联的类。

List reslut=session.createCriteria(A.class) .setFetchMode("this.b",FetchMode.EAGER) .setFetchMode("this.c",FetchMode.EAGER) .add(Expression.isNotNull("this.b")) .add(Expression.isNotNull("this.c"))

.list();

 

当存在传递关联时,可以通过HQL来同时迫切左外连接关联类和依赖关联类,但QBC无法表达这种形式的迫切左外连接。

 

3、左外连接

使用左外连接查询时,将根据映射文件的配置来决定关联的检索策略。

 

4、内连接

QBC也支持内连接查询

List reslut=session.createCriteria(Customer.class) .add(Expression.like("name","t",MatchMode.SRART)) .createCriteria("orders") .add(Expression.like("orderNumber","t",MatchMode.SRART))

.list();

默认情况下,QBC只检索出Customer对象,以上代码等同于以下HQL查询语句:

"select c from Customer c join c.orders o where c.name like 't%'"

+ " and o.orderNumber like 't%'";

 

createAlias()方法为关联属性(集合)赋予别名。如果希望QBC返回的集合也包含成对的Customer和Order对象,可以调用returnMaps()方法:

List reslut=session.createCriteria(Customer.class) .createAlias("orders","o") .add(Expression.like("this.name","t",MatchMode.SRART)) .add(Expression.like("o.orderNumber","t",MatchMode.SRART)) .returnMaps()

.list();

 

采用内连接查询时,HQL与QBC有不同的默认行为,前者检索成对的对象,后者仅检索出要检索的单个对象(不包含关联的对象)。

 

5、迫切内连接

显式指定对象的关联关系为迫切内连接检索策略,可以覆盖映射文件中指定的检索策略。

 

6、隐式内连接

一对一

"from Cunstomer c where c.homeAddress.provice like '%hai%'"

List reslut=session.createCriteria(Customer.class) .add(Expression.like("homeAddress.provice","t",MatchMode.SRART))

.list();

 

多对一

"from Order o where o.customer.name like '%hai%'"

QBC 不支持隐式内连接,下边是不正确的,:

List reslut=session.createCriteria(Order.class) .add(Expression.like("customer.name","t",MatchMode.SRART))

.list();

对于QBC,必须显式指定内连接查询:

List reslut=session.createCriteria(Order.class) .createAlias("customer","c") .add(Expression.like("c.name","t",MatchMode.SRART))

.list();

 

一对多或多对多

隐式内连接不适用。

 

7、右外连接

 

8、使用SQL风格的交叉连接和隐式内连接

HQL支持SQL风格的交叉连接查询。如: from Customer c, Order o

 

在SQL语言中,显式内连接查询的语句使用inner join关键字,并且用on字句设定连接条件,形式为:

"select * from CUSTOMER c inner join ORDER o on c.ID=o.CUSTOMER_ID"

隐式内连接查询语句不包含关键字阿,并且用where字句设定连接条件:

"select * from CUSTOMER c ,ORDER o where c.ID=o.CUSTOMER_ID"

 

9、关联级别运行是的检索策略

(1)没有显式指定,使用配置文件的,但有一个例外,那就是HQL会忽略映射文件设置的迫切左外连接策略,改用立即检索。

(2)如果显式指定,就会覆盖映射文件配置的检索策略。在HQL查询语句中显式指定检索策略包括以下内容。

l left join fetch

l inner join fetch

QBC通过FetchMode类来显式指定检索策略,有以下3个静态实例。

l FetchMode.DEFAULT:默认,采用配置;

l FetchMode.EAGER:覆盖,指定迫切左外连接检索策略;

l FetchMode.LAZY:覆盖映射配置文件的检索策略,在程序中指定延迟检索策略。

RK3568平台开发系列讲解:UBOOT详细介绍 U-boot是一款广泛使用的开源引导加载程序,支持多种嵌入式操作系统和处理器架构。其主要功能包括系统上电时的硬件初始化、引导操作系统内核等。U-boot的引导流程通常包括Boot Code、idbloader.img、uboot.img、boot.img和rootfs.img等步骤。启动U-boot时,通过Debug串口连接板卡,按下ctrl+c键可进入U-Boot命令行模式。U-boot启动过程中会执行一系列初始化操作,如打印系统信息、初始化内存、加载内核设备树、初始化I2C、PMIC电源芯片、DRM框架 阅读详情

相关推荐

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 277

Hibernate的检索方式详解

       Hibernate提供以下几种检索对象的方式。l         导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)l         OID检索方式。(按照对象的OID来检索对象。)l         HQL检索方式。(使用面向对象的HQL查询语言。)l         QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。)l         本地SQL检索方式。(使用本地数据库的SQL查询语句。)一、Hibernate的检索方式简介1、HQL检索

chssheng2007的专栏 880

视频监控设备(NVR、IPC等)如何通过国标GB28181接入到视频监控平台,以及接入过程如何测试视频接入是否成功

GB/T28181标准广泛的应用,视频监控设备通过国标GB28181接入视频监控平台的过程变成程序化、标准化的互联过程,确保了视频监控设备能够在不同系统、不同网络环境下实现远程、跨区域、跨级别的访问和控制。版本有GB28181-2011、2016、2022几个常用版本,威迪斯特的视频监控平台完全支持GB28181的这几个版本,能够实现不同品牌视频监控设备的国标视频接入(国标视频监控接入),或者为国标28181视频接入(国标28181视频监控接入),也为国标281818接入(国标GB/T28181接入。

weixin_70208651的博客 1万+

Hibernate的检索方式(上)

1.HQL检索方式            HQL和SQL语句相似,是hibernate中使用最广的一种方式。 Query query = session.createQuery("from aaa(类名字) as a where a.name=:name and a.age=:age");//先创建一个Query对象,包含HQL语句 query.setString("name","wwww")

小魏的博客 318

汽车Bootloader流程

根据ISO14229-1 写的汽车行业 Bootloader流程 1:编程前 → 先读取软硬件版本号 22 F1 XX 软件信息 22 F1 XX 硬件信息 → 进入扩展会话extend diagnostic sessions 功能寻址 10 03 → 编程条件检测routine control:ECU升级条件的判断,如车速,检测车的型号 31 01 02 03 → 关闭DTC检测,(由于很多节点收不到其它节点的报文后会记录DTC故障)功能寻址 85 02 → 关闭诊断通讯(禁止各个节点的应用报...

weixin_41320142的博客 2829

ST7102驱动移植与调试实战

本文详细介绍了在君正T40平台上移植和调试ST7102 LCD驱动芯片的实战经验。内容涵盖硬件接口配置、时序参数调整、寄存器初始化序列编写及常见问题解决,重点解析了ST7102单芯片集成显示与触控功能的特性,为嵌入式设备显示驱动开发提供实用指南。

k6l7m8n9的博客 1406

Hibernate的两种检索方式(HQL检索、QBC检索)

Hibernate框架   javaEE开发三层结构 (高内聚、低耦合)   MVC: jsp+Servlet+javaBean   M:model 模型(javaBean:封装数据)   V:view 视图(jsp:展示数据)   C:controller 控制器(Servlet:1、获得请求参数 2、调用业务 3、分发转向) Hibernate的概述    Hibernate就是

panjinxin_tech的博客 470

从硬件异常到代码救赎:RH850内存访问错误(MAE)的深层诊断与艺术

本文深入探讨瑞萨RH850微控制器的内存访问错误(MAE)诊断与解决方法。针对程序跑飞和Flash Driver交互中的潜在陷阱,提供系统性硬件异常分析框架和防御性编程实践,帮助嵌入式开发者从底层机制到代码层面有效预防和修复MAE问题,提升系统稳定性。

pytorch8learner的博客 195

hibernate检索策略

1.1概念即在建立关联关系的情况下,在加载当时对象时对象时,对关联对象的检索策略。合理设置关联关系,可以提高软件的效率。1.2立即检索策略实现方法:将&lt;set&gt;元素的lazy设置为false检索方式:立即初始化与当前对相关联的对象优点:即使当前状态为游离状态,也可以方便地从当前对象导航到与之关联的对象缺点:执行太多的select语句,增加访问数据库的次数,还可能加载程序中不需要的对象,...

qq_41934990的博客 438

Sparse-ICP—(4) 加权稀疏迭代最近点算法(matlab版)

本文介绍了加权稀疏迭代最近点算法的实现。

点云侠的博客 642

【异常】OpenAI提示内容有误 Invalid prompt: your prompt was flagged as potentially violating our usage policy.

用户需优先调整提示内容,确保符合OpenAI的使用政策。若问题持续,建议结合请求ID和具体代码示例联系官方支持。同时,可参考腾讯云、Microsoft Q&A等平台提供的错误处理实践(如重试机制、日志记录)优化代码健壮性。

奶爸的编程之路,也就一周冷个三天 2057

Hibernate检索方式

我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位。那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为Hibernate的检索方式,主要有以下五种,我们来系统地学习一下。        1.导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)        2.OID检索方式。(按照对象的

lenotang的专栏 5468

华为OD机试真题2026双机位C卷 Java&Go 实现【用户入网定期复评】

用户开立支付账户,在开户完成后立即对用户进行一次风险模型评级,输出一个评分风险,评分范围1-100,等区间的分为5个等级,1-19为等级1,20-39为等级2,40-59为等级3,60-79为等级4,80-100为等级5,系统每天会任务对全量入网用户进行计算复评时间,输出评分给出新的风险等级。复评规则如下:

MISAYAONE的博客 146

Hibernate检索对象的方式

Hibernate提供的检索对象的方式有: •导航对象图检索方式 –根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联级别使用 了延迟加载检索策略,那么首次执行此方法时,Hibernate会从数据库中加载关联的Order对象,否则就从缓存中取得Order对象

robbinBlog 1511

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Hibernate检索策略与检索方式

Hibernate的Session在加载Java对象时,一般都会把鱼这个对象相关联的其他Java对象也都加载到缓存中,以方便程序的调用。但很多情况下,我们不需要加载太多无用的对象到缓存中,一来会占用大量的内存,二来会增加数据库的访问次数,使得程序的运行效率降低。为了合理的使用缓存,Hibernate提供了不同的检索策略来解决这些问题。 作用域       在说检索策略之前,先了解一下检

紫羽风的博客 3825

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Hibernate3入门之第四章Hibernate的检索方式

Hibernate的检索方式 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式 :根据已经加载的对象导航到其他对象 Customer customer = (Customer)session.get(Customer.class,1);//得到用户的实例化对象 customer.getOrders();// 获得到客户的订单 OID 检索方式 :按照对象的 O...

SYJ_1835_LPM的博客 268

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hibernate检索方式概述

Hibernate提供以下几种检索对象方式:1导航对象图检索方式,根据已加载的对象导航到其它对象2.OID检索方式,按照对象的OID来检索对象3.HQL检索方式,使用面向对象的HQL查询语言4.QBC检索方式,使用QBC(Query by Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口5.本地SQL检索方式,使用本地数据库的SQL查询语句...

qq_40208605的博客 402

Hibernate的五种检索方式

Hibernate的五种检索方式分别是: 导航对象图检索方式。(根据已经加载的对象,导航到其他对象。) OID检索方式。(按照对象的OID来检索对象。) HQL检索方式。(使用面向对象的HQL查询语言。) QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。) .本地SQL检索方式。(使用本地数据库的SQL查询语句。) 1、导航对象图检索方式 ...

qq_40714770的博客 1105

Hibernate的检索方式

hibernate支持五种方式检索 第一种导航对象图检索 : 在程序中已经获得持久态对象,通过对象关联关系去检索出相关对象数据          例如 : Customer customer = session.get(Customer.class ,1 ); // 持久Customer                             //由于customer关联了order

欢迎来到跃行者技术博客 1549

《精通Hibernate》学习(7)——Hibernate的检索方式(上)

一、Hibernate检索方式简介   Hibernate提供以下几种检索对象的方式: 导航对象图检索方式。(根据已经加载的对象,导航到其他对象。) OID检索方式。(按照对象的OID来检索对象。) HQL检索方式。(使用面向对象的HQL查询语言。) QBC检索方式。(使用QBC(Query By Criteria)API来检索对象) 本地SQL检索方式。(使用本地数

OOM 4273

Hibernate 检索方式

Hibernate提供以下几种检索方式 1.导航对象图检索方式 2.OID检索方式 3.HQL检索方式 4.QBC检索方式 它主要由Criteria接口,Criterion接口和Express类组成,它支持运行时动态生成查询语句。 Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: 5.本地SQL检索方式

Hsuxu的专栏 867

Hibernate 检索方式

Hibernate的检索方式,主要有以下五种。         1.导航对象图检索方式。(根据已经加载的对象,导航到其他对象。)         2.OID检索方式。(按照对象的OID来检索对象。)         3.HQL检索方式。(使用面向对象的HQL查询语言。)         4.QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。)

jazywoo_在路上 942

hibernate检索方式详解

一.hibernate检索方式简介 通过前面的学习,我们能够在项目中引入hibernate支持,并对有关联的表进行配置。而在项目开发中,对数据库进行最多的操作 就是查询,接下来,将详细的介绍几种hibernate中常见的检索方式。 二.hibernate检索方式一:对象图检索方式 对象图检索方式适用于表与表之间有关系时的检索,意思是根据已加载的对象,导航到他的关联对象。利用对象之间的关系进

wonabi的博客 385

Hibernate HQL检索方式

Hibernate提供了以下几种检索对象的方式.    1) 导航对象图检方式.    2) OID()检索方式.    3) HQL(Hibernate Query Language)检索方式.    4) QBC(Query By Criteria)检索方式.    5) 本地SQL检索方式.     下面的表格为 HQL和QBC支持的各种运算. 运算类型 HQL运算符 QBC运...

唯品衣秀 206
上一篇: hibernate检索方式
下一篇: java操作excel表
MyJavaBlog
博客等级 码龄16年 11粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值