`
jiaguwen123
  • 浏览: 405339 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

入门 05 - Query接口

 
阅读更多
入门 05 - Query接口

 我们可以透过 org.hibernate.Query接口的实例来进行查询,透过Query接口,您可以先设定查询参数,之后透过setXXX()等方法,将指定的参数值填入,而不用每次都撰写完整的HQL,直接来看个例子:

Query query = session.createQuery("select user.name from User as user where user.age = ? and user.sex = ?");

query.setInteger(0, 25);//设定参数0为第一参数;1为第二个参数?


参数设定见书(陈天河 ssh集成) 的第406页

query.setCharacter(1, 'M');

     

List names = query.list();

for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) {

    String name = (String) iterator.next();

    System.out.println("name: " + name);

}



 在设定参数值时,必须依照 ? 所设定的顺序,并使用对应型态的setXXX()方法,一个执行的例子如下:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).

log4j:WARN Please initialize the log4j system properly.

Hibernate: select user0_.name as x0_0_ from USER user0_ where (user0_.age=? )and(user0_.sex=? )

name: Bush



 您可以使用命名参数:参数(Named Parameter)来取代这个方法,这可以不用依照特定的顺序来设定参数值,并拥有较好的可读性,直接来看个例子:

Query query = session.createQuery("select user.name from User as user where user.age = :age and user.sex = :sex");

query.setInteger("age", 25);

query.setCharacter("sex", 'M');

 

List names = query.list();

for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) {

    String name = (String) iterator.next();

    System.out.println("name: " + name);

}


 设定命名参数时,在建立Query时先使用:后跟着参数名,之后我们就可以在setXXX()方法中直接指定参数名来设定参数值,而不用依照特定的顺序。
  我们也可以将HQL撰写在程序之外,以避免硬编码(hard code)在程序之中,在需要修改HQL时就很方便,在*.hbm.xml中使用<query/>标签,并在<![CDATA[与]] >之间撰写HQL,撰写的位置是在</hibernate-mapping>之前,例如:

User.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping

    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

 

<hibernate-mapping>

 

    <class name="onlyfun.caterpillar.User" table="USER">

 

        <id name="id" type="string">

            <column name="user_id" sql-type="char(32)" />

            <generator class="uuid.hex"/>

        </id>

 

        <property name="name" type="string" not-null="true">

            <column name="name" length="16" not-null="true"/>

        </property>

 

        <property name="sex" type="char"/>

 

        <property name="age" type="int"/>

 

    </class>

 

    <query name="com.abin.User">

        <![CDATA[

            select user.name from User as user where user.age = :age and user.sex = :sex

        ]]>

    </query>

 

</hibernate-mapping>



 <query>的name属性用来设定查询外部HQL时的名称依据,使用的例子如下:

Query query = session.getNamedQuery("com.abin.User");

query.setInteger("age", 25);

query.setCharacter("sex", 'M');

 

List names = query.list();

for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) {

    String name = (String) iterator.next();

    System.out.println("name: " + name);

}

分享到:
评论

相关推荐

    MySQL 5权威指南(第3版) 中文版 下载地址

     第5章 MySQL Administrator和MySQL Query Browser  5.1 安装  5.2 与MySQL服务器建立连接  5.3 MySQL Administrator  5.4 MySQL Query Browser  第6章 phpMyAdmin  6.1 phpMyAdmin的安装与配置  6.2...

    emailrep.io-python:EmailRep API的Python3接口

    # query an email address emailrep bill@microsoft.com # report an email address (key required) emailrep --report foo@bar.com --tags " bec, maldoc " --description " Phishing email targeting CEO " 快速...

    C++入门到精通

    第 17 章介绍了面向对象程序设计的基本特性 这一章说明了如何设计和实现一个Query 类层次结构 用来支持第 6 章实现的文本查询系统 第 18章介绍更为复杂的继承层次结构 多继承和虚拟继承机制使得这样的层次结构成...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

    微信小程序演示

    搜索歌词###小程序的入门简单demo本demo有两个页面,分别是歌曲的搜索页和歌词的搜索结果页,调用接口是百度音乐API接口搜索歌曲接口...query = 搜索关键字搜索歌词接口...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    HibernateAPI中文版.chm

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate3.2中文文档(chm格式)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    spring.net中文手册在线版

    4.2.IObjectFactory,IApplicationContext和IObjectDefinition接口介绍 4.2.1.The IObjectFactory和IApplicationContext 4.2.2.对象定义 4.2.3.对象的创建 4.2.3.1.通过构造器创建对象 4.2.3.2.通过静态工厂...

    SQLDataSource:用于Apollo GraphQL项目SQL DataSource

    v1.0.0中的重大更改在v1.0.0中,此库具有一个新的流畅接口,该接口可以与Knex很好地配合使用,并且更加符合Apollo DataSources的精神。 const query = this . knex . select ( "*" ) . from ( "fruit" ) . where ( {...

    dom:用于HTML和HTML中SVG的功能DOM功能和事件流库

    Omit dependenciesnpm run build // Include dependencies多姆dom(selector) 返回与document selector匹配的元素数组( dom.query(selector, document)别名)。DOM节点根头身体观滚动的主要“视图”元素,是&lt;head

    spring security 参考手册中文版

    39. @Query中的安全表达式 273 第八部分 附录 274 40.安全数据库模式 274 40.1用户模式 274 40.1.1集团当局 274 40.2持久登录(记得我)架构 275 40.3 ACL模式 275 40.3.1 HyperSQL 276 40.3.2 PostgreSQL 277 40.3....

    TS3-Webinterface:First-Coder.de的Teamspeak 3 Web界面

    入门 该接口能够在Windows和Linux平台上运行。 该接口需要以下配置的软件包: 网络服务器(Apache,nginx,xampp) 数据库(MySQL或PostgreSQL) PHP 5.6以上 linux shell的基础知识(如果您使用的

    active-persistence:Active Persistence是针对JPA的Active Record查询接口的实现,它使操作变得轻松有趣

    入门 pom.xml &lt; groupId&gt;com.github.lazaronixon&lt;/ groupId&gt; &lt; artifactId&gt;active-persistence &lt; version&gt;0.0.31 模型/User.java @Entity public class User extends BaseIdentity { private String name;...

    TCPIP详解卷[1].part05

    1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口...

    realtime-resource:使用 Socket.io 和 Mongodb 的 CRUD(创建、读取、更新、删除)

    入门 通过运行以下命令克隆 repo 并启动服务器: npm install grunt 运行测试 先决条件: Mongodb 已安装并在 localhost 中运行。 服务器在单独的终端中运行 打开一个新终端并运行: npm test 应用程序接口 ...

    irene:到Galago 3.16和Lucene 7的静态类型查询接口

    #inquery提供给我们的内容是Lemur项目搜索引擎(Indri和Galago)的“杀手级应用”。 我们如何使它更小,更便携,对研究人员更有用? 将其与后端分开。 该项目处于非常早期的Alpha状态: 我还没有开放它的真正意图...

    Hibernate参考文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

Global site tag (gtag.js) - Google Analytics