一、集合映射
1、set映射
关联对象的属性除了外键之外,只有1、2个属性,那么就可以使用set映射
使用了set标签的element元素,不用创建关联对象就可以实现单向一对多的关联关系
public class Room implements Serializable{
private int id;
private String roomNumber;
private Set<String> equipments = new HashSet<String>();
private Set<Image> images = new HashSet<Image>();
}
<set name="equipments" table="equipment_set">
<key column="roomid" foreign-key="fk_equip_room_set"/>
<element column="description" type="string" length="128" not-null="true"/>
</set>
<set name="images" table="image_set">
<key column="roomid" foreign-key="fk_img_room_set"/>
<composite-element class="Image">
<property name="path" column="path" type="string" length="50" not-null="true"/>
<property name="width" column="width" type="integer" />
<property name="height" column="height" type="integer" />
</composite-element>
2、map映射
非常有用的一种集合映射
public class Room implements Serializable{
private int id;
private String roomNumber;
private Map<String, String> equipments = new HashMap<String, String>();
private Map<String, Image> images = new HashMap<String, Image>();
}
<map name="equipments" table="equipment_map">
<key column="roomid" foreign-key="fk_equip_room_map"/>
<map-key column="name" type="string" length="15" />
<element column="description" type="string" length="128" not-null="true"/>
</map>
<map name="images" table="image_map">
<key column="roomid" foreign-key="fk_img_room_map"/>
<map-key column="name" type="string" length="15" />
<composite-element class="Image">
<property name="path" column="path" type="string" length="50" not-null="true"/>
<property name="width" column="width" type="integer" />
<property name="height" column="height" type="integer" />
</composite-element>
</map>
二、HQL
1、query
(1) session.createQuery("from User");
session.createCriteria(User.class);
(2)查询的分页显示
query.setFirstResult(0);
query.setMaxResult(10);
(a) MySql
select * from student where limite ?,?
(b) Oracle
select * from (select row_.* ,rownum rownum_
from (select student0_.id as id0_,
from student student0_) row)
where rownum_ <= ?
and rownum_ > ?
(3)在配置文件中的query
<query name="findByName">
<![CDATA[ --- 当作字符串看,不做特殊处理
from User u where u.namelike :name
]]>
</query>
session.getNamedQuery("findByName").setString("name",name);
from User; 返回对象数组,不可以强转
select u from User u; 返回对象集合,对于集合中的每个元素都可以强转成User对象
2、Dynamic query
public Collection findStudents(Student student){
StringBuffer sb = new StringBuffer("select student from Student student where student.id>-1 ");
--- student.id>-1 永远为真,再添加条件的时候都用and即可,避免判断用where还是and
if(student.getName() != null)
sb.append("and student.name=:name");
if(student.getBirthday() != null)
sb.append("and student.birthday=:birthday");
if(student.getEmail() != null)
sb.append("and student.email=:email");
……
}
3、QBE
属性多时,效率高,语句少
忽略主键、version、关系(查询当前对象)
与QBC结合,弥补id查询
Example.excludeProperty("param"); --- 查询时忽略某个属性
分享到:
相关推荐
便于同学们更好的学习hibernate,其中包含了hibernate的七种映射管、关系
7. **一对多、多对一、多对多关联映射**: Hibernate 支持各种关联映射,如一对一、一对多、多对一和多对多。理解这些关联关系的建立和查询,能够帮助开发者设计出更灵活的数据模型。 8. **缓存机制**: ...
7. HQL和Criteria API:Hibernate Query Language(HQL)是Hibernate特有的面向对象的查询语言,类似于SQL,但操作的是对象而非表格。Criteria API是一种类型安全的API,可以动态构建查询,避免SQL注入风险。 8. ...
7. **缓存机制**:Hibernate包含一级缓存(Session缓存)和二级缓存(可选)。一级缓存是每个`Session`内部的,自动管理对象的状态。二级缓存则是在多个`Session`间共享的,可以提高数据读取效率,但需谨慎使用以...
7. **性能优化**:包括延迟加载(Lazy Loading)、批处理(Batch Processing)、缓存策略调整等,这些都可以提升Hibernate应用的性能。 8. **查询优化**:避免N+1查询问题,使用JOIN fetch提前加载关联数据,使用...
7. **JDBC驱动**: MySQL的JDBC驱动(如mysql-connector-java.jar)是连接Hibernate与MySQL数据库的关键。它提供了Java应用程序与MySQL服务器通信的桥梁。 8. **事务管理**: Hibernate支持事务管理,可以使用`...
struts+sping+hibernate qq群72861940
七、缓存注解 1. `@Cacheable` 表示实体类或特定方法的结果可以被缓存。 2. `@Cache` 定义缓存配置,包括区域、策略等。 八、总结 Hibernate 3中的注解机制使得开发者能够更直观地在Java类中描述数据库模型,...
7. **事务管理**:Hibernate支持JTA(Java Transaction API)和JDBC事务,可以方便地进行事务控制。 8. **实体生命周期**:Hibernate管理实体的生命周期,包括瞬时态、持久态、托管态和脱管态,以及相应的转换过程...
7. 持久化元数据:`.hbm.xml`或@Entity注解 Hibernate使用持久化元数据来定义Java类和数据库表之间的映射关系。这可以通过XML文件(`.hbm.xml`)或JPA的@Entity注解来实现。 在实际开发中,你需要根据项目需求选择...
七、事件监听器 Hibernate支持事件驱动编程,如PreInsertEventListener、PostLoadEventListener等,允许用户在特定操作前或后进行自定义处理。 八、持久化操作 - 保存(save()):为新对象生成ID并将其放入一级缓存...
7. **类型转换和用户类型**:Hibernate支持基本数据类型的自动转换,同时也允许自定义复杂类型的映射。 8. **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等各种关联关系的映射,方便地处理复杂的...
7. 第一个Hibernate程序: 创建一个简单的Java应用,初始化`SessionFactory`,打开`Session`,创建一个`User`对象并保存到数据库,最后关闭`Session`。这将演示基本的Hibernate操作流程。 8. 事务管理: ...
7. **第二级缓存**:Hibernate支持二级缓存,通过插件如Ehcache,可以在多个Session之间共享数据,提高性能。 8. **延迟加载(Lazy Loading)**:Hibernate支持懒加载机制,只有当真正需要访问关联对象时,才会发起...
7. **实体生命周期**:了解Hibernate如何处理对象的创建、更新、删除等状态变化。 8. **性能调优**:包括批处理、连接池配置、查询优化等方面的知识。 9. **拦截器和事件监听器**:学习如何自定义行为,比如在对象...
7. **事务管理**:在数据库操作中,事务的正确管理是保证数据一致性的关键。Hibernate支持JTA(Java Transaction API)和JPA(Java Persistence API)的事务管理策略。 8. **缓存机制**:Hibernate提供了一级缓存...
7. ** Criteria API**:除了HQL,Hibernate还提供了Criteria API,这是一种更动态的查询方式,可以在运行时构建查询条件。 8. **级联操作**:通过在实体类的属性上设置级联注解,可以控制一个对象的保存、删除等...
7. **性能优化**: - 第二级缓存:通过引入缓存插件如Ehcache,提高数据访问效率。 - 批量操作:利用批处理更新或删除,减少数据库交互次数。 -延迟加载(Lazy Loading):只在需要时加载关联对象,避免数据冗余...
7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...
7. **jta.jar**(或者包含JTA实现的库,如geronimo-jta_1_1_spec.jar):Java Transaction API用于处理分布式事务,是Hibernate支持分布式环境中的事务管理所必需的。 8. **cglib-nodep.jar**或**asm.jar**:这两个...