集合映射

 

集合映射

 

保存值类型集合的数据的表叫做集合表

值类型对象参考组件映射

 

选择集合接口:

1、<set>元素:可以映射类型为java.util.Set接口的属性,它的元素存放在没有顺序且不重复的;也可以映射类型为java.util.SortSet接口的属性,它的元素可以按自然顺序排列

Student.java部分

public class Student {

    private int id;

    private String name;

    private Set<String> hobbies;//爱好

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public Set<String> getHobbies() {

       return hobbies;

    }

    public void setHobbies(Set<String> hobbies) {

       this.hobbies = hobbies;

    }

Student.hbm.xml部分

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping

    package="com.hbsi.domain">

    <class name="Student" table="student">

       <id name="id"column="id">

       <!-- native自动增长   根据不同的底层数据库选择产生不同的策略 -->

           <generator class="native"/>

       </id>

       <property name="name"/>

      

       <set name="hobbies"table="student_hobby">

       <!--   指定外键类student_id -->

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

           <!--  元素的类型 -->

           <element type="string"column="bobbies_name"/>

       </set>    

</class>

</hibernate-mapping>

TestSet.java部分:

public static void add(){

       Session session=null;

       Transaction ts=null;

       try{

           session=HibernateUtil.getSession();

           ts=session.beginTransaction();

           Student s=new Student();

           s.setName("qdqwed");

           Set<String>hobbies=new HashSet<String>();

           hobbies.add("dance");

           hobbies.add("sing");

           s.setHobbies(hobbies);

           session.save(s);

 

           ts.commit();//添加学生机学生爱好

       }finally{

           if(session!=null){

              session.close();

           }

       }

    }

 

2、<list>元素:可以映射类型为java.util.List接口的属性,它需要在集合属性对应的数据库表中用一个额外的索引列保存每个元素的位置

Student.java部分:

package com.hbsi.domain;

import java.util.List;

//集合映射

public class Student {

    private int id;

    private String name;

    private List<String> hobbies;

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public List<String> getHobbies() {

       return hobbies;

    }

    public void setHobbies(List<String> hobbies) {

       this.hobbies = hobbies;

    }

}

Student.hbm.xml部分:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping

    package="com.hbsi.domain">

 

    <class name="Student" table="student">

       <id name="id"column="id">

       <!-- native自动增长   根据不同的底层数据库选择产生不同的策略 -->

           <generator class="native"/>

       </id>

       <property name="name"/>

        <list name="hobbies" table="student_hobby1">

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

            <!--   指定索引列     维护元素的添加顺序    只在关系模型中有效 -->

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

           <element type="string"column="hobbies_name"></element>

       </list>

       </class>

</hibernate-mapping>

TestSet.java部分:

packagecom.hbsi.test;

importjava.util.ArrayList;

importjava.util.List;

importorg.hibernate.Session;

importorg.hibernate.Transaction;

importcom.hbsi.domain.Student;

importcom.hbsi.util.HibernateUtil;

publicclass TestSet {

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              add();

       }

       public static void add(){

              Session session=null;

              Transaction ts=null;

              try{

                     session=HibernateUtil.getSession();

                     ts=session.beginTransaction();

                    

                     Student s=new Student();

                     s.setName("qdqwed");

                    

                     List<String>hobbies=new ArrayList<String>();

                     hobbies.add("football");

                     hobbies.add("dance");

                     hobbies.add("basketball");

                     s.setHobbies(hobbies);

                     session.save(s);

                     ts.commit();//添加学生机学生爱好

              }finally{

                     if(session!=null){

                            session.close();

                     }

              }

       }

}

 

3、<bag>或<idbag>元素:可以映射为java.util.Collection接口的属性。它的元素可能重复,但不保存属性

Student.java部分:

package com.hbsi.domain;

import java.util.List;

//集合映射

public class Student {

    private int id;

    private String name;

    private List<String> hobbies;

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public List<String> getHobbies() {

       return hobbies;

    }

    public void setHobbies(List<String> hobbies) {

       this.hobbies = hobbies;

    }

}

Student.hbm.xml部分:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping

    package="com.hbsi.domain">

 

    <class name="Student" table="student">

       <id name="id"column="id">

       <!-- native自动增长   根据不同的底层数据库选择产生不同的策略 -->

           <generator class="native"/>

       </id>

       <property name="name"/>

<bag name="hobbies" table="student_hobby2">

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

           <element type="string"column="hobbies_name"></element>

       </bag>

</class>

</hibernate-mapping>

TestSet.java部分:

packagecom.hbsi.test;

importjava.util.ArrayList;

importjava.util.List;

importorg.hibernate.Session;

importorg.hibernate.Transaction;

importcom.hbsi.domain.Student;

importcom.hbsi.util.HibernateUtil;

publicclass TestSet {

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              add();

       }

       public static void add(){

              Session session=null;

              Transaction ts=null;

              try{

                     session=HibernateUtil.getSession();

                     ts=session.beginTransaction();

                    

                     Student s=new Student();

                     s.setName("qdqwed");

                    

                     List<String>hobbies=new ArrayList<String>();

                     hobbies.add("football");

                     hobbies.add("dance");

                     hobbies.add("basketball");

                     s.setHobbies(hobbies);

                     session.save(s);

                     ts.commit();//添加学生机学生爱好

              }finally{

                     if(session!=null){

                            session.close();

                     }

              }

       }

}

 

4、<map>元素:可以映射类型为java.util.Map接口的属性,它的元素以键/值对的形式保存,也是无序的;也可以映射类型为java.util.SortMap接口的属性,它的元素可以按自然顺序排序

Student.java部分:

package com.hbsi.domain;

 

import java.util.Map;

//集合映射

public class Student {

 

    private int id;

    private String name;

    private Map<Long,String> hobbies;

    public Map<Long, String> getHobbies() {

       return hobbies;

    }

    public void setHobbies(Map<Long, String> hobbies) {

       this.hobbies = hobbies;

    }

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

}

Student.hbm.xml部分:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping

    package="com.hbsi.domain">

 

    <class name="Student" table="student">

       <id name="id"column="id">

       <!-- native自动增长   根据不同的底层数据库选择产生不同的策略 -->

           <generator class="native"/>

       </id>

       <property name="name"/>

<map name="hobbies"table="student_hobby3">

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

           <!--   指定map属性的键在对应表中的列     外键的列   key -->

           <map-key type="long"column="hobbies_id"></map-key>

           <!--   键值对的值  value -->

           <element type="string"column="hobbies_name"></element>

       </map>

    </class>

</hibernate-mapping>

TestSet.java部分:

packagecom.hbsi.test;

import java.util.HashMap;

import java.util.Map;

import org.hibernate.Session;

import org.hibernate.Transaction;

import com.hbsi.domain.Student;

import com.hbsi.util.HibernateUtil;

public class TestSet {

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              add();

       }

       public static void add(){

              Session session=null;

              Transaction ts=null;

              try{

                     session=HibernateUtil.getSession();

                     ts=session.beginTransaction();

                    

                     Student s=new Student();

                     s.setName("qdqwed");

             

                     Map<Long,String>hobbies=new HashMap<Long,String>();

                     hobbies.put(newLong(10001), "dance");

                     hobbies.put(newLong(10002), "football");

                     s.setHobbies(hobbies);

                     session.save(s);

                    

                     ts.commit();//添加学生机学生爱好

              }finally{

                     if(session!=null){

                            session.close();

                     }

              }

       }

}

 

5、<primitive-array>或<array>元素:可以映射类型为数组的属性。但它在实际运用中用地极少【数组类型的集合和list非常相似,因为它也要维护下标索引】

 

集合映射(set,list, array,bag, map)

l       这些集合类都是Hibernate实现的类和JAVA中的集合类不完全一样,set,list,map分别和JAVA中的Set,List,Map接口对应,bag映射成JAVA的List;这些集合的使用和JAVA集合中对应的接口基本一致;在JAVA的实体类中集合只能定义成接口不能定义成具体类, 因为集合会在运行时被替换成Hibernate的实现。

l      集合的简单使用原则:大部分情况下用set,需要保证集合中的顺序用list,想用java.util.List又不需要保证顺序用bag。

 

持久化对象在保存时一般不保存与它关联的对象,采用级联操作可以在持久化对象保存时把与它关联的对象一起保存:cascade="save-update"

<set name="emps"cascade="save-update,delete">

    <key column="depart_id"></key>

    <one-to-many class="Employee"/>

</set>

当不设置cascade属性时,默认值为none,既不级联

Cascade属性的参数可以为:

save-update:在保存和更新时,连带与它关联的对象一起保存和更新

Delete:级联删除,例如:在删除一个部门时,原来在这个部门下的所有人全部删除

All:“同生共死“---全部的级联

Delete-orphan:只在一对多时做,删除孤儿

 

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值