Hibernate中的组件映射

今天学习了Hibernate组件映射。

 

(1) 现在有一个表,要是字段很多,想把一些不是经常用到的字段分开的话,就需要一个类来存放这些字段。那如何去映射这之间的关系呢。

 

比如我们有一个用户表,里面的字段有 id(主键) ,name,password,email,phone,address.这时我把id,name,password经常用的放在User类中,而把剩下的放在Profile类中,当时User类中还用定义Profile并生成get/set方法,如果想通过Profile来访问User中的属性可以在Pfofile中定义User对象并生成get/set方法(这个不是必须的)

 

之后就是到User.hbm.xml设置

        <component name="profile(这个是在User类中定义的)" class="com.cheng.entry.Profile">
            <parent name="user"></parent>//这是方便在通过Profile中信息得到User类中的信息(如果上面红色设置了的话这个要有)
            <property name="email" type="java.lang.String">
                <column name="email" length="200"></column>
            </property>
            <property name="phone" type="java.lang.String">
                <column name="phone" length="200"></column>
            </property>
            <property name="address" type="java.lang.String">
                <column name="address" length="200"></column>
            </property>
            <property name="mobile" type="java.lang.String">
                <column name="mobile" length="200"></column>
            </property>
        </component>

 

完成这样的培训之后就可以正常的使用了。

    public void save()
    {
        Configuration config=new Configuration();
        config.configure();
        SessionFactory factory=config.buildSessionFactory();
        Session session=factory.openSession();
        User u=new User();
        Profile p=new Profile();
       
        u.setPassword("1234");
        u.setUsername("1234");
        p.setAddress("hainan");
        p.setEmail("220201560");
        u.setProfile(p);
       
        session.beginTransaction();
        session.save(u);
        session.getTransaction().commit();
    }
}

 

 

(2) 在下来讲一讲映射集合的内容

比如我们现在有两个表,属于一对多关系,分别为product表和img表

product中有的字段是id name price(float类型的)

img中有的字段是p_id(外键),filename,path

 

首先是分别生成对应的两个类Product类和Image类,在Pruduct中使用

    private Set<Image> images=new HashSet(0);来声明Image类并且生成对应的get/set方法

 

然后在Product.hbm.xml文件中

 

        <set name="images(对应Product类中的Image集合)" table="img(对应数据库中的表)">
        <key column="p_id(这个是对应img表中的那个外键)" foreign-key="id" not-null="true"></key>
        <composite-element class="com.cheng.entry.Image">
        <property name="filename" type="java.lang.String">
            <column name="filename" length="200"></column>
        </property>
        <property name="path" type="java.lang.String">
            <column name="path" length="200"></column>
        </property>
        </composite-element>
        </set>

 

简单的使用过程

 

    public void addProduct()
    {
        Configuration config=new Configuration();
        config.configure();
        SessionFactory factory=config.buildSessionFactory();
        Session session=factory.openSession();
        session.beginTransaction();
        Product p=new Product();
        p.setName("chengqing");
        p.setPrice(56.0);
        Image i1=new Image();
        Image i2=new Image();
        i1.setFilename("cheng");
        i1.setPath("eded");
       
        i2.setFilename("hua");
        i2.setPath("sdsa");
        p.getImages().add(i1);
        p.getImages().add(i2);
        session.save(p);
        session.getTransaction().commit();
    }
    public void printProduct()
    {
        Configuration config=new Configuration();
        config.configure();
        SessionFactory factory=config.buildSessionFactory();
        Session session=factory.openSession();
        session.beginTransaction();
        Product p=(Product) session.get(Product.class, new Integer(1));
        System.out.println(p.getName());
        Set<Image> images=p.getImages();
        for(Image img:images)
        {
            System.out.println(img.getFilename());
        }
    }

你可能感兴趣的:(Hibernate)