传智播客java学习--hibernate映射

我今天学习了徐老师将的hibernate框架知识,我做了简单的笔记:

 

 

       集合属性大致分为二种:

单纯的集合属性,像List,Set或数组等集合属性。

              2,Map集合属性,每个属性值多有相对应的Key映射。

       集合映射属性分为以下几种:

              List:用于映射List集合属性,List是有序的,可重复的.

              Set:用于映射Set集合属性,Set是无序的,不可重复.

              Map:用于映射Map集合属性,具有键值对属性(Key ,value);

              Array:用于映射数组集合属性.为有序可重复.

               Bag:用于应映射无序集合属性,当我们用Bag作映射时,我们定义集合时,我们不应当使用具体的集合,而是用集合的父类接口:Collection.

 

相对几种集合的应用:

List:

     由于他是有序的集合,因此用Hibernate持久化到数据库中时,"必须增加到例表示集合的顺序"~,集合属性只能以接口形式声明,因为当Hibernate持久化某个实例时,                      Hibernate会自动把集序中的集合实现类替换成Hibernate自己的实现类。代码 如下:

                                   private int id;

                                   private int age;

                                   private String name;

                                   private List<Person> schools;

                      那么我们如何来映射集合中的元素到数据库中呢?在hibernate的映射文件中,我们可以增加对<list></list>标签来完成,实际如下:

                              <list name="schools" table="school_table">//table是我们指定的把集合元素映射到哪个表中.

                                    <key column="person_id"></key>//这里是指出主表的外键是哪个,这里我们用主键例来映射,一般开发也是这样做。(主表的外键可认为是子表的主键)

                                                                //主表与子表之间的关联就是通过外键来维持的,

                                    <list-index column="school_indext"></list-index>//用来指定集合的序列,因为list集合是有序的,这也就是我们上面提到的要必须增加的一例

                                    <element column="school" type="string" length="30"></element>//这个标签是把list里的元素一个一个放到column指定的例名下,type指定放入的类形                      </list>

 

 

Array:数组的方式与List的完全一样,只要把标签改成<array></array>就可

 

Set:与List,Array一样,只是Set是无序的,在<set></set>里不用indext标签就可以了.

Bag:使用bag映射集合时,对于Set集合不好用,这是唯一的要点,对于List,Array,多没有问题。

 同时,不管是哪种集合,使用bag映射之后多会变为无序的集合,而集合属性对应的表没有主键.

              Map:Map不仅要映射属性值,还要映射属Key,也就是key,value多要映射。Hibername将会以外键和key例作为联合主键.

               <map name="scores">

                      <key column="student_id"></key>

                      <map-key type="string" column="subject" length="10"></map-key>//必须指明类型,用于映射Map的key

                    <element type="int" column="score" length="3" not-null="true"></element>//也要指明类型,用来映射Map的value.    

               </map>

 

             

映射组件属性:

              组件属性的意思是持久化类的属性不是基本数据类型,也不是String类型,而是某个组件的变量,该组件属性类型可以是自定义类型.

              然后hibernate不能直接用property映射,为了映射组件属性,hibernate提供了component无系。每个component元素映射一个组件,组件属性必须指定该属性的类形.

              Component元素中的class属性用于确定组类的类型.

              组件的一个浅显例子,一个工人,他有月薪,年薪,带薪休候,这些是就可以做一个组件放到一起。组件是一个没有ID的类。

                     <component name="pay" class="Pay">

                             <property name="monthlPay" column="month_pay"></property>

                             <property name="yearlPay" column="year_pay"></property>

                             <property name="vocationWithPay" column="vactionwith_pay"></property>

                        </component>     

 

 

 集合映射组件属性:

                集合除了存放String 字符串以外,还可以存放组件类形,实际上更多情况下,集合组件存放的都是组件类型.这时我们就要用到composite-element子元

                素来映射集合元素,刚时还要class来指定元素的类型.用property来指定组件类型的子属性.

         <list name="jobHistories" table="job_table">

              <key column="worker_id"></key>

              <list-index column="job_index"></list-index>

              <composite-element  class="Job">

              <property name="position" column="position_name"></property>

               <property name="company" column="company_name"></property>

               <property name="starting" column="`starting`" type="date"></property>

                <property name="ending" column="`ending`" type="date"></property>

                 </composite-element>

            </list>      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值