- 浏览: 188173 次
- 性别:
- 来自: 青岛
-
文章分类
- 全部博客 (117)
- java基础知识 (17)
- 技术积攒 (9)
- Oracle技术 (4)
- JSP技术 (6)
- Spring技术 (15)
- Linux技术 (6)
- Hibernate技术 (24)
- JPA技术 (1)
- Struts技术 (1)
- Struts2技术 (6)
- javascript知识 (4)
- myeclipse 使用技巧 (3)
- JavaEE技术 (2)
- JSTL (1)
- javamail技术 (1)
- jaf 技术 (1)
- 测试方法 (1)
- web技术积攒 (1)
- tomcat事项 (5)
- mysql使用 (1)
- 趣味题目 (2)
- 技术词汇 (1)
- EJB3.0 (2)
- weblogic 使用说明 (1)
- CSS (1)
最新评论
-
chenhao_java:
知识点五:依赖注入-自动装配依赖对象 -
黑白配:
为什么没有看见三个附件呢?
JavaMail jsp发送邮件 html格式 -
chunchong:
真晕,这样怎么能行呢
JAVA中防止SQL注入攻击类的源代码 -
Rod_johnson:
学习了!真不错
Hibernate:类继承的实现方式(二)--父子类各自一个表 -
erchong2011:
恩 很不错 学习了 简单
jsp页面自动跳转方式
集合属性大致有两种:第一种是单纯的集合属性,如像 List、Set 或数组等集合属性;另一种是Map结构的集合属性,每个属性值都有对应的Key映射。
集合映射的元素大致有如下几种:
List: 用于映射 List 集合属性
Set: 用于映射 Set 集合属性
Map: 用于映射 Map 集合性
Array: 用于映射数组集合属性
Bag: 用于映射无序集合
idbag: 用于映射无序集合,但为集合增加逻辑次序
List方式:要求在映射文件中配置List时加一个标示顺序列,此列给hibernate用来记录数据的插入顺序
1. List 集合属性
List是有序集合,因此持久化到数据库时也必须增加一列来表示集合元素的次序。看下面的持久化类,该 News 类有个集合属性:schools ,该属性对应学校。而集合属性只能以接口声明,因此下面代码中,schools 的类型能是List ,不能是ArrayList ,但该集合属性必须使用实现类完成初始化。
此时的映射文件:
这时访问可以使用list
2使用bag作为映射格式
此时访问必须使用list,不能使用Set
3·使用Map
使用Map:
因为Map要使用键值对,所以要提供键,<map-key type=”string” column=”name”/>
注意:
1) type=”string”,不能写成type=”String” !!!!
2) column=”name”,指使用dempatment对象的name值作为key,如果你写成别的,比如:name1,表结构就会加上此列
总结:
集合性能的分析
对于集合属性,通常推荐使用延迟加载策略。所谓延迟加载就是当系统需要使用集合属性时才从数据库装载关联的数据。 Hibernate 对集合属性默认采用延迟加载,在某些特殊的情况下为 set,,list,map 等元素设置lazy="false" 属性来取消延迟加载。
可将集合分成如下两类:
有序集合:集合里的元素 可以根据 Key 或 Index 访问
无序集合:集合里的元素中能遍历
有序集合的属性有增加、删除及修改中拥有较好的性能表现。在设计较好的 Hiberate domain Object 中,集合属性通常都会增加 inverse="true" 的属性,此时集合端不再控制关联关系。映射 Set 集合属性时,如果 element 元素包括 not-null="true" 属性,则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键,但 List 集合属性的表总是以外键和元素次序列作为联合主键。
集合映射的元素大致有如下几种:
List: 用于映射 List 集合属性
Set: 用于映射 Set 集合属性
Map: 用于映射 Map 集合性
Array: 用于映射数组集合属性
Bag: 用于映射无序集合
idbag: 用于映射无序集合,但为集合增加逻辑次序
List方式:要求在映射文件中配置List时加一个标示顺序列,此列给hibernate用来记录数据的插入顺序
1. List 集合属性
List是有序集合,因此持久化到数据库时也必须增加一列来表示集合元素的次序。看下面的持久化类,该 News 类有个集合属性:schools ,该属性对应学校。而集合属性只能以接口声明,因此下面代码中,schools 的类型能是List ,不能是ArrayList ,但该集合属性必须使用实现类完成初始化。
import java.util.List; public class Department { private Integer id; private String name; private List<User1> users; public List<User1> getUsers() { return users; } public void setUsers(List<User1> users) { this.users = users; } public Department(){} public Department(String name) { this.name = name; } 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; } }
此时的映射文件:
<?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.hibernate.domain"> <class name="Department" table="Department"> <id name="id" unsaved-value="-1"> <generator class="native" /> </id> <property name="name"/> <list name="users" inverse="false"> <key column="deptid"/> <list-index column="listindex"/> <one-to-many class="User1"/> </list> </class> </hibernate-mapping>
这时访问可以使用list
Department department2 = (Department)session.get(Department.class, 1); List<User1> userList = department2.getUsers(); for(User1 user1 : userList){ System.out.println(user1.getName()); }
2使用bag作为映射格式
<?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.hibernate.domain"> <class name="Department" table="Department"> <id name="id" unsaved-value="-1"> <generator class="native" /> </id> <property name="name"/> <bag name="users"> <key column="deptid"/> <one-to-many class="User1"/> </bag> </class> </hibernate-mapping>
此时访问必须使用list,不能使用Set
3·使用Map
使用Map:
public class Department { private int id; private String name; //private Set<Employee> emps; //private List<Employee> emps; private Map<String,Employee> emps;
<map name="emps"> <key column="departId"/> <map-key type="string" column="name"/> <one-to-many class="Employee"/> </map>
因为Map要使用键值对,所以要提供键,<map-key type=”string” column=”name”/>
注意:
1) type=”string”,不能写成type=”String” !!!!
2) column=”name”,指使用dempatment对象的name值作为key,如果你写成别的,比如:name1,表结构就会加上此列
总结:
集合性能的分析
对于集合属性,通常推荐使用延迟加载策略。所谓延迟加载就是当系统需要使用集合属性时才从数据库装载关联的数据。 Hibernate 对集合属性默认采用延迟加载,在某些特殊的情况下为 set,,list,map 等元素设置lazy="false" 属性来取消延迟加载。
可将集合分成如下两类:
有序集合:集合里的元素 可以根据 Key 或 Index 访问
无序集合:集合里的元素中能遍历
有序集合的属性有增加、删除及修改中拥有较好的性能表现。在设计较好的 Hiberate domain Object 中,集合属性通常都会增加 inverse="true" 的属性,此时集合端不再控制关联关系。映射 Set 集合属性时,如果 element 元素包括 not-null="true" 属性,则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键,但 List 集合属性的表总是以外键和元素次序列作为联合主键。
发表评论
-
关于Hibernate一个配置参数hibernate.hbm2ddl.auto
2010-03-02 08:43 1170<?xml version="1.0" ... -
Hibernate 复合主键
2009-09-25 09:13 1589[zt]hibernate复合主键 key words:hi ... -
映射文件class元素的dymanic-insert和dymanic-update的作用
2009-06-05 09:36 945SQL update语句是预先生成的,如果加上dynamic的 ... -
hibernate的各种保存方式的区别
2009-06-05 08:59 691hibernate的保存 hibernate对于对象的保存提供 ... -
Hibernate:缓存设置
2009-06-04 16:38 1042缓存是介于应用程序 ... -
one-to-many的懒加载及原理分析
2009-06-04 14:42 933如果是一对多,多对一,甚至是多对多那效率就差别大了!!如果一对 ... -
one-to-one的懒加载及原理分析
2009-06-04 13:57 1053Lazy=”” :告诉hibernate什么时候抓取 1 fa ... -
load方法的懒加载及原理分析
2009-06-04 11:09 1842懒加载: load方法与get ... -
Hibernate:类继承的实现方式(四)--每个具体类映射一张独立表
2009-06-04 10:58 1046这种方式会把继承链的所有类保持到数据库中单独的表中,而且标语表 ... -
Hibernate:类继承的实现方式(三)--鉴别器与内连接相结合
2009-06-04 10:49 1137当子类中有的有很多自己特有的属性,而部分子类有较少的自己的属性 ... -
Hibernate:类继承的实现方式(二)--父子类各自一个表
2009-06-04 10:41 1418将继承链中的各个类映射到数据库中的一个单独的表中 domai ... -
Hibernate:类继承的实现方式(一)--父子类在同一个表中
2009-06-04 10:19 1929Hibernate对继承关系的对象的处理分为多种形式: 第一 ... -
cascade和inverse
2009-06-04 09:10 1398Cascade与inverse这两个属性都用于一对多或者多对多 ... -
关联关系的级联操作
2009-06-03 17:17 879Cascade和inverse (Employee-Depar ... -
关联关系的总结
2009-06-03 14:50 804查询的时候出现sql语句的条数: Hibernate查询输出 ... -
将一个对象(组件)作为属性,但是不想建立这个表
2009-06-03 14:38 845如果对象的某个属性为一个对象,而且不想单独对该对象建立一个表, ... -
Hibernate:多对多
2009-06-03 14:10 1077Hibernate处理多对多的情况,在操作和性能方面都不太理想 ... -
Hibernate:一对一(2)
2009-06-03 11:11 816Hibernate处理一对一的另外一种方式是:将多对一加上唯一 ... -
Hibernate:多对一
2009-06-03 11:05 923Hibernate对多对一有两种,分为单向和双向。一般都是采用 ... -
Hibernate:一对一(1)
2009-06-03 10:40 834Hibernate中一对一关联两种处理方式之一:参照表主键参照 ...
相关推荐
- Hibernate:在Hibernate中,POJO作为持久化对象,通过注解或XML配置与数据库表进行映射。查询时,Hibernate将SQL结果自动转化为POJO实例。 - MyBatis:MyBatis允许开发者自由编写SQL,将结果集映射到POJO,提供...
而`POJO_Resource`可能包含了有关POJO对象创建或与BIRT结合使用的示例代码或资源。 总的来说,利用POJO对象作为BIRT的数据源,可以更好地融合Java应用的业务逻辑,使报告生成更加灵活,同时减少了数据转换的复杂性...
对于这种情况,你可能需要进一步扩展`pojoToMap`方法,例如添加递归处理以支持嵌套的Pojo对象,或者处理集合类型字段时将其转换为List, Object>>。 总的来说,Java的Pojo到Map的转换是提高代码可读性和灵活性的有效...
`resultType`适用于简单的结果集映射,其中SQL语句的列名必须与Java对象的属性名完全匹配。这种方式简单直观,但在实际应用中,由于数据库字段命名规范和Java对象属性命名规范的不同,常常无法一一对应。 **示例:*...
在配置Java属性映射和集合映射时,可以通过`cascade`属性来覆盖此默认值。 - `default-access`: 指定Hibernate默认的属性访问策略,默认值为`property`,表示使用getter和setter方法访问属性。 - `default-lazy`: ...
这个文件通常与POJO类一起使用,使得Hibernate知道如何在对象和数据库之间转换。 8. **配置SessionFactory**: 在应用程序中,你需要配置SessionFactory,它是Hibernate的核心组件,负责管理数据库连接和事务。...
* `ofType`:与 `javaType` 属性对应,指定的是映射到 List 集合属性中 POJO 的类型。 * `property`:指定从类映射到的主实体类对象属性。 MyBatis 在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套...
O/R Mapping(对象关系映射)是一种编程技术,用于将对象模型与关系数据库模型进行映射。在Java中,常见的O/R Mapping框架有Hibernate、MyBatis等。通过O/R Mapping,开发者可以更加高效地操作数据库,减少重复代码...
在Java的Web开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL的细节。`hibernate.cfg.xml`是Hibernate配置文件,用于定义数据库连接...
- **组件集合映射**:将一个包含多个复杂对象的集合映射到数据库中。 #### 集合关系映射 Hibernate支持多种集合类型的映射: - **Set**:无序、不重复的集合。 - **List**:有序、允许重复的集合。 - **Bag**:...
- **组件集合映射**: 映射组件的集合。 **2.5 集合关系映射** - **Set**: 无序且不允许重复的集合。 - **List**: 有序且允许重复的集合。 - **Bag**: 无序但允许重复的集合,通常用Java中的List来模拟。 - **Map**:...
使用`<resultMap>`元素定义结果集映射,可以指定列名与对象属性的对应关系,以及如何处理多行或多表结果。 4.3 查询条件 通过参数对象,我们可以轻松地传递查询条件。例如,如果我们有一个`SearchCriteria`对象,...
2. 集合映射:List、Set、Map等集合类型的映射。 3. 联合主键:多个字段共同构成主键的映射。 4. 继承映射:单表继承、多表继承和表-per-hierarchy等策略。 八、性能优化 1. 分页查询:避免一次性加载大量数据,...
2. **配置映射文件** `Employees.hbm.xml`: ```xml <key column="empid"></key> <many-to-many class="com.test.pojo.Roles"> <column name="roleid"></column> ``` - `<set>`元素用于表示集合,这里是...
总结来说,MyBatis映射文件实例展示了如何通过XML配置文件来实现SQL语句与Java对象的绑定。它涵盖了基本的简单类型参数传递、POJO对象的使用,以及如何处理复杂的查询条件。通过这些配置,开发者可以方便地将业务...
- **集合的基本类型和可嵌入的对象**: 映射集合中的不同类型。 - **高级集映射**: - **排序的集合**: 如何排序集合中的元素。 - **双向关联**: 处理集合中的双向关联。 - **三元关联**: 复杂场景下的关联映射。 ...
- **一对多关联映射**:通常需要在 POJO 类中定义 List 集合来存储多个相关联的对象。 #### 缓存机制 MyBatis 提供了一级缓存和二级缓存的支持: - **一级缓存**:SqlSession 范围内的缓存,当同一个 SqlSession ...
1. **减少紧耦合**:通过Schema文件定义POJO对象与数据库表之间的映射关系,使得更改数据库表结构时无需修改大量代码。 2. **易于扩展**:由于POJO对象与数据库表的解耦,可以更容易地添加新的POJO对象或者数据库表...
在实体框架或ORM(对象关系映射)工具中,PO对象作为桥梁,将Java对象与数据库记录相互转换,使得开发者能够以面向对象的方式操作数据库数据。 ### 值对象(VO) 值对象(VO)是一种无状态的对象,它代表了一组值...