hibernate组件区分为普通组件和动态组件
一、普通组件
在.hbm.xml配置文件中,添加节点对应组件类文件名,property节点一一对应类中的属性;
示例:
在主Javabean类(Person类)中引入另外一个副JavaBean类(Address类) — public Address address,由于一个人会有几个地址(家庭地址、工作地址等),所以Address是Person的一个组件
1)public String Address(){
public String homeaddress;
public String workaddress;
}
添加get和set方法、Address构造类;
2)在Person类中Address作为一个基本属性,添加get和set方法;
3).hbm.xml文件配置
<component name="Person">----对应Person类
<property name="workaddress" column="workaddress"/>
<property name="homeaddress" column="homeaddress"/>----Person中的属性。column为数据库中对应的字段
</component>
二、动态组件
动态组件与普通组件区别的地方就是普通组件属性是固定的,动态组件是变化的,动态组件要求是能动态的存储数据,不用额外建Javabean类,因为Map中有Key与Value对应,所以Map类就能解决这个问题
1)在Person类中定义:private Map address = new HashMap();
2).hbm.xml文件配置:
<
dynamic-component name="address ">
<property key="workaddress" column="workaddress" type="String">
<property key="homeaddress" column="homeaddress" type="String">----key对应Map中的键值。column为数据库中对应的字段,type为字段的类型(String,boolean,double,Integer)
</
dynamic-component>
额外的一个高效循环访问Map类中的元素:
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,
entryset的访问速度是最高效的;
Map map
=
new
HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
Object val = entry.getValue();
}
原理:
对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。
而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。
效率高,以后一定要使用 entryset 方式 !
效率高,以后一定要使用 entryset 方式 !