实体类
package cn.itcast.e_hbm_collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class User {
private Integer id;
private String name;
//特别注意:使用集合属性时,一定要使用接口,不能申明为具体实现类,
//因为hibernate经过Session操作后,就变成了hibernate自己的实现类
private Set<String> addressSet = new HashSet<String>(); // Set集合
private List<String> addressList = new ArrayList<String>(); // List集合
private String[] addressArray; // 数组
private Map<String, String> addressMap = new HashMap<String, String>();
private List<String> addressBag = new ArrayList<String>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<String> getAddressSet() {
return addressSet;
}
public void setAddressSet(Set<String> addressSet) {
this.addressSet = addressSet;
}
public List<String> getAddressList() {
return addressList;
}
public void setAddressList(List<String> addressList) {
this.addressList = addressList;
}
public String[] getAddressArray() {
return addressArray;
}
public void setAddressArray(String[] addressArray) {
this.addressArray = addressArray;
}
public Map<String, String> getAddressMap() {
return addressMap;
}
public void setAddressMap(Map<String, String> addressMap) {
this.addressMap = addressMap;
}
public List<String> getAddressBag() {
return addressBag;
}
public void setAddressBag(List<String> addressBag) {
this.addressBag = addressBag;
}
}
*****************************************************************
2 操作类
package cn.itcast.e_hbm_collection;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class App {
private static SessionFactory sessionFactory = new Configuration()//
//.configure()//
//.addClass(User.class)// 添加Hibernate实体类(加载对应的映射文件)
//.buildSessionFactory();
cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
sessionFactory = cfg.buildSessionFactory(); // 根据生成Session工厂
@Test
public void testSave() throws Exception {
Session session = sessionFactory.openSession();
session.beginTransaction();
// --------------------------------------------
// 构建对象
User user = new User();
user.setName("张天");
// >> Set集合
user.setAddressSet(new TreeSet<String>()); // 当设置了sort属性时,就要使用SortedSet类型
user.getAddressSet().add("2御富科贸园");
user.getAddressSet().add("1棠东东路");
// >> List集合
user.getAddressList().add("御富科贸园");
user.getAddressList().add("棠东东路");
user.getAddressList().add("棠东东路");
// >> 数组
user.setAddressArray(new String[] { "御富科贸园", "棠东东路" });
// >> Map集合
user.getAddressMap().put("公司", "御富科贸园");
user.getAddressMap().put("家庭", "棠东东路");
// >> Bag集合
user.getAddressBag().add("御富科贸园");
user.getAddressBag().add("棠东东路");
user.getAddressBag().add("棠东东路");
// 保存
session.save(user);
// --------------------------------------------
session.getTransaction().commit();
session.close();
}
@Test
public void testGet() throws Exception {
Session session = sessionFactory.openSession();
session.beginTransaction();
// --------------------------------------------
// 获取数据
User user = (User) session.get(User.class, 9);
// 显示信息
System.out.println(user.getName());
System.out.println(user.getAddressSet());
System.out.println(user.getAddressList());
System.out.println(Arrays.toString(user.getAddressArray()));
System.out.println(user.getAddressMap());
System.out.println(user.getAddressBag());
// --------------------------------------------
session.getTransaction().commit();
session.close();
}
}
*******************************************
3 映射文件配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.e_hbm_collection">
<class name="User" table="user">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- addressSet属性,Set集合
table属性:集合表的名称
key子元素:集合外键的列名
element子元素:存放集合元素的列的信息
sort属性:"unsorted|natural|comparatorClass"
默认为:unsorted
order-by属性:写的是order by 子句,是SQL语句,是操作的集合表。
这是在查询数据时指定orderby子句。
-->
<set name="addressSet" table="user_addressSet" order-by="address ASC">
<key column="userId"></key>
<element type="string" column="address"></element>
</set>
<!-- addressList属性,List集合
list-index:用于存放索引的列
-->
<list name="addressList" table="user_addressList">
<key column="userId"></key>
<list-index column="idx"></list-index>
<element type="string" column="address"></element>
</list>
<!-- addressArray属性,数组。与List的映射基本一致 -->
<array name="addressArray" table="user_addressArray">
<key column="userId"></key>
<list-index column="idx"></list-index>
<element type="string" column="address"></element>
</array>
<!-- addressMap属性,Map集合 -->
<map name="addressMap" table="user_addressMap">
<key column="userId"></key>
<map-key type="string" column="key_"></map-key>
<element type="string" column="address"></element>
</map>
<!-- addressBag属性,Bag集合:无序,可重复。与Set集合的映射基本一致 -->
<bag name="addressBag" table="user_addressBag">
<key column="userId"></key>
<element type="string" column="address"></element>
</bag>
</class>
</hibernate-mapping>
分享到:
相关推荐
标题中的“hibernate 映射-一对多双向”指的是在Java Hibernate框架中处理数据库关系映射中的一对多关联关系,并且这种关联是双向的。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用Java对象来表示数据库...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如Java)来处理数据库操作,极大地简化了数据库应用程序的开发。在这个“hibernate-3.3.2.GA-jar包集合”中,我们聚焦的是...
- **HQL(Hibernate Query Language)**:面向对象的查询语言,类似于SQL,但操作的是对象和对象集合。 - **Criteria API**:提供动态构建查询的方式,无需预先编写查询字符串,更加安全。 6. **缓存策略**: - ...
Hibernate是Java领域中一款著名...总之,`hibernate-release-5.0.7.Final`版本的jar包集合是Java开发者进行ORM编程的强大工具,涵盖了从数据持久化到事务处理、验证和缓存等多个方面,极大地提升了开发效率和代码质量。
在Java的持久化框架Hibernate中,关系映射是数据库对象之间的关联方式,它允许我们将复杂的数据库结构映射到Java对象上。"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联...
7. **实体类与映射文件**:在Hibernate中,每个数据库表对应一个Java实体类,实体类的属性对应表的字段,而映射文件(如.hbm.xml)则定义了这些映射关系。Hibernate使用注解或XML文件来完成映射,使得Java对象可以...
2. 选择合适的映射策略:理解懒加载、立即加载和集合的加载策略,避免N+1查询问题。 3. 优化查询:避免在HQL中使用子查询,尽量使用JOIN,合理设置缓存策略。 4. 谨慎使用事务:根据业务需求,正确设置事务隔离级别...
这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行配置。 ### 1. Hibernate集合映射的基本概念 集合映射是Hibernate中一个核心的概念,它允许我们将数据库表中的多对一...
本文将详细探讨如何使用Hibernate映射集合属性List,以及如何让Hibernate自动创建对应的数据库表,无需手动编写SQL语句。 首先,我们需要理解Hibernate的映射机制。Hibernate通过ORM(对象关系映射)技术将Java对象...
此外,该工具还提供了多种Exporter,用于导出不同格式的数据,如数据库模式、POJO Java代码、Hibernate映射文件等。 #### 四、Eclipse Plugins ##### 1. 创建Hibernate配置文件 使用hibernate-tools插件可以直接...
### JAVA培训-HIBERNATE的集合映射 #### 概述 本文主要聚焦于Hibernate框架下的集合映射机制,特别是针对`Set`、`List`、`Array`、`Map`、`Bag`五种集合类型的映射进行深入探讨。通过具体的代码示例和XML配置文件,...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)...
10. **类型映射**:Hibernate提供了丰富的类型映射,将Java类型与数据库类型对应,如基本类型、集合类型、自定义类型等。 11. **Callback事件**:Hibernate允许在对象的生命周期中定义回调方法,如在保存、更新、...
Hibernate是一个强大的ORM(对象关系映射)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。`hibernate3.jar`包含了Hibernate 3.5.4-Final的所有核心功能,如实体管理、会话管理、查询语言等。`...
本资源集合包含`hibernate-distribution-3.6.2`版本的API中文文档以及相关的jar包,旨在帮助开发者更好地理解和使用Hibernate框架。 首先,`hibernate-reference.pdf`是Hibernate 3.6.2的中文参考手册。这份PDF文档...
为了有效地管理数据对象与数据库之间的映射关系,Hibernate作为一款强大的Java对象关系映射(ORM)框架,极大地简化了这一过程。特别是其注解版本Hibernate-annotations,自3.4.0版本起,更是为开发者提供了更加便捷...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
1. **延迟加载(Lazy Loading)增强**:Hibernate核心库已经支持延迟加载,但扩展可能提供了更精细的控制,例如按需加载关联的对象集合,减少内存占用和提高性能。 2. **批量操作**:批量插入、更新和删除功能可以...