在MySQL中新建數據表User:
- CREATE TABLE user (
- id INT(11) NOT NULL auto_increment PRIMARY KEY,
- name VARCHAR(100) NOT NULL default '',
- age INT,
- email VARCHAR(100) NOT NULL
- );
按照最基本的映射策略的話,應該把User類設計成:
- package onlyfun.caterpillar;
- public class User {
- private Integer id;
- private String name;
- private int age;
- private String email;
- ........
- }
然而由于業務上的需要,要把email字段升格成MailAddress類,例如:
- package com.hb3.pack_05.model;
- public class MailAddress {
- private String email;
- public MailAddress() {
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public void sendMail() {
- System.out.println("Send mail to " + email);
- }
- }
User.java
- package com.hb3.pack_05.model;
- public class User {
- private Integer id;
- private String name;
- private Integer age;
- private MailAddress mailAddress;
- public User() {
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public MailAddress getMailAddress() {
- return mailAddress;
- }
- public void setMailAddress(MailAddress mailAddress) {
- this.mailAddress = mailAddress;
- }
- }
User.hbm.xml文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.hb3.pack_05.model.User" table="user">
- <id name="id" column="id" type="java.lang.Integer">
- <generator class="native"/>
- </id>
- <property name="name" column="name" type="java.lang.String"/>
- <property name="age" column="age" type="java.lang.Integer"/>
- <component name="mailAddress" class="com.hb3.pack_05.model.MailAddress">
- <property name="email"
- column="email"
- type="java.lang.String"
- not-null="true"/>
- </component>
- </class>
- </hibernate-mapping>
修改hibernate.cfg.xml文件:
......
<mapping resource="com/hb3/pack_05/model/User.hbm.xml" />
......
測試代碼如下:
- package com.hb3.pack_05;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import com.hb3.pack_05.model.MailAddress;
- import com.hb3.pack_05.model.User;
- public class BusinessService {
- public static void main(String[] args) {
- Configuration config = new Configuration().configure();
- SessionFactory sessionFactory = config.buildSessionFactory();
- Session session = sessionFactory.openSession();
- MailAddress mailAddress = new MailAddress();
- mailAddress.setEmail("bluelazysb@hotmail.com");
- User user = new User();
- user.setName("shenbin");
- user.setAge(new Integer(28));
- user.setMailAddress(mailAddress);
- Transaction tx = session.beginTransaction();
- session.save(user);
- session.flush();
- tx.commit();
- session.close();
- session = sessionFactory.openSession();
- user = (User) session.load(User.class, new Integer(1));
- System.out.println(user.getAge() + "\t" +
- user.getName() + "\t" +
- user.getMailAddress().getEmail());
- user.getMailAddress().sendMail();
- session.close();
- sessionFactory.close();
- }
- }
ExtJS教程- Hibernate教程-Struts2 教程-Lucene教程