首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Hibernate中的组件照射

2012-09-28 
Hibernate中的组件映射今天学习了Hibernate组件映射。?(1)现在有一个表,要是字段很多,想把一些不是经常用到

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类中定义的)" 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 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());
??? ??? }
??? }

热点排行