使用Hibernate的HQL常常需要在Java代码中写字符串查询语句,为了使业务逻辑和查询语句分离,可以把字符串查询语句定义在映射文件中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.Customer" table="CUSTOMERS">
<id name="id" column="ID" type="long">
<generator class="native"/>
</id>
<property name="name" column="NAME" type="string"/>
<set name="orders" cascade="all" inverse="true">
<key column="CUSTOMER_ID"/>
<one-to-many class="com.Order"/>
</set>
</class>
<!-- 定义查询语句 -->
[color=red]<query name="findCustomerByName"><![CDATA[
from Customer c where c.name like :name
]]></query>[/color]
</hibernate-mapping>
Query query = session.getNamedQuery("findCustomerByName");
query.setString("name", "B%");
Iterator customers = query.iterate();
while (customers.hasNext()) {
Customer customer = (Customer)customers.next();
System.out.println("Customer Id:" + customer.getId() + " name:" + customer.getName());
}
/**Output:
Hibernate: select customer0_.ID as col_0_0_ from CUSTOMERS customer0_ where customer0_.NAME like ?
Hibernate: select customer0_.ID as ID1_0_, customer0_.NAME as NAME1_0_ from CUSTOMERS customer0_ where customer0_.ID=?
Customer Id:27 name:Bruce
Hibernate: select customer0_.ID as ID1_0_, customer0_.NAME as NAME1_0_ from CUSTOMERS customer0_ where customer0_.ID=?
Customer Id:29 name:Bird
Hibernate: select customer0_.ID as ID1_0_, customer0_.NAME as NAME1_0_ from CUSTOMERS customer0_ where customer0_.ID=?
Customer Id:31 name:Bruce Chen
Hibernate: select customer0_.ID as ID1_0_, customer0_.NAME as NAME1_0_ from CUSTOMERS customer0_ where customer0_.ID=?
Customer Id:32 name:BB
*/
分享到:
相关推荐
本文主要探讨了在使用Hibernate框架进行Java开发时,如何实现查询语句的统一配置管理,以提高代码的可维护性和遵循良好的软件工程实践。统一管理查询语句可以保持系统的分层架构,降低模块间的耦合度,并简化查询...
【标题】:“Hibernate查询语句写在配置文件中” 【正文】: Hibernate 是一个流行的 Java 应用程序框架,主要用于简化数据库操作。它提供了一种对象关系映射(ORM)机制,将数据库操作转化为对 Java 对象的操作,...
- 定义命名参数,以冒号(`:name`)开头,然后通过`setXXX(name, value)`方法绑定。例如: ```java Query query = session.createQuery("from Students s where s.name=:name and s.age=:age"); query....
命名查询是在Hibernate配置文件(如Query.hbm.xml)中预定义的HQL或Criteria查询,具有良好的可读性和可维护性。例如,在Query.hbm.xml中定义一个命名查询: ```xml <hibernate-mapping> <!-- ... --> from ...
命名查询是Hibernate提供的一种机制,允许我们在Hibernate配置文件中定义查询语句,并为其分配一个唯一的名称。这个名称可以在程序中引用,以执行对应的查询操作。这有助于减少代码中的硬编码查询字符串,提高代码...
HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员能够更加专注于业务逻辑而不用深入到SQL层面。HQL支持各种复杂的查询,...
如果某些查询模式经常被使用,可以定义命名查询,将其写入XML映射文件中,以提高代码可读性和复用性。 6. **动态HQL**: 对于更动态的查询,可以构建HQL字符串,但这可能会引入SQL注入风险,因此要确保正确处理...
我们可以在映射文档中定义命名 SQL 查询,然后在查询中使用,例如: ```java List people = sess.getNamedQuery("persons") .setString("namePattern", namePattern) .setMaxResults(50) .list(); ``` 这个查询...
在编写HQL查询语句时,我们可以使用`:paramName`的方式来定义参数,而不是使用传统的`?`占位符。这种方式的好处在于提高了代码的可读性和可维护性,因为命名参数可以清晰地表示参数的用途。例如: ```java String ...
本文介绍了三种利用Hibernate实现动态表查询的方法:自定义命名策略、使用拦截器以及利用Session的开放性。每种方法都有其适用场景,开发者可以根据实际需求选择最合适的一种。例如,在需要频繁更改表名的情况下,...
外置命名查询是在Hibernate配置文件中预先定义好的HQL或SQL查询,可以在代码中直接调用,提高代码可读性和复用性。 ```xml <!-- 在hibernate.cfg.xml或对应的hibernate映射文件中 --> from Student where name = ...
定义预编译的命名查询,提高性能,例如: ```java @NamedQuery(name="User.findAll", query="SELECT u FROM User u") ``` 2. `@Query` JPA的动态查询,可以直接在注解中编写HQL或JPQL查询语句。 六、事务...
本实验“Hibernate试验”主要关注的是通过Hibernate使用SQL查询,包括本地SQL检索、命名SQL查询以及自定义SQL语句,同时也涉及到QBC(Query By Criteria)查询方式,这是一种基于对象的查询方式,与HQL(Hibernate ...
- **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,开发者可以直接使用面向对象的方式来操作数据库,而无需编写复杂的...
2. **创建Hibernate配置文件**:通常命名为`hibernate.cfg.xml`,此文件用于配置数据库连接信息和其他全局设置。 3. **创建持久化类**:持久化类代表数据库中的表,需要遵循一定的约定,例如提供无参数构造器、标识...
命名查询是一种将HQL查询语句保存为名称/查询映射的方式。这种方式可以使代码更加清晰,并且便于维护。命名查询通常在配置文件或注解中定义。例如,在配置文件中定义一个名为 `findPersons` 的命名查询: ```xml ...
4. hibernate-entitymanager-5.0.7.Final.jar:Hibernate实体管理器,它是Java Persistence API (JPA) 的实现,提供了高级对象持久化服务,比如Criteria API和命名查询。 5. mysql-connector-java-5.0.4-bin.jar:...
- 如何从Database Explorer中的表定义生成Java类和Hibernate数据库映射文件(.hbm文件)。 - 使用HQL编辑器进行查询操作。 - 创建并测试一个简单的Hibernate应用。 #### 四、Hibernate概览 Hibernate是一个开源的...
此外,Criteria API和命名查询也是常见的查询方式,它们提供了更强大的查询功能和更好的代码可读性。 7. **集合映射**: Hibernate支持多种集合类型(如List、Set、Map等)与数据库表的映射,以及一对一、一对多、多...
通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是用Java对象来操作数据库,极大地提高了开发效率和代码的可维护性。 **一、Hibernate核心概念** 1. **实体(Entity)**:在Hibernate中,实体是Java类,...