今天学习了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());
}
}