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

Hibernate Component照射的一个简单例子

2013-01-21 
Hibernate Component映射的一个简单例子建立一个相关的数据库表:create table c_user(id int(11) not null

Hibernate Component映射的一个简单例子

Hibernate Component照射的一个简单例子

建立一个相关的数据库表:

create table c_user(id int(11) not null auto_increment,age int(11) default null,firstname varchar(50) default null,lastname varchar(50) default null,address varchar(200) default null,zipcode varchar(10) default null,tel varchar(20) default null,primary key(id))engine=innodb default charset=gbk;

注解:该表是一个用户信息表,可以将用户信息归纳为两个部分:一个部分是name(姓名),包含firstname(姓)和lastname(名);另一部分是contact(联系方式),包括了address(地址)、zipcode(邮编)和tel(电话)等信息。在创建实体类时,可以将name和contact分别封装到2个独立的类中,这样就提高了系统的复用性和灵活性。也就是说,需要使用Component映射,将其他的实体类映射在一起。

建立一个Name.java类:

package collect.component;import java.io.Serializable;public class Name implements Serializable {        private String firstname;    private String lastname;        public String getFirstname() {        return firstname;    }    public void setFirstname(String firstname) {        this.firstname = firstname;    }    public String getLastname() {        return lastname;    }    public void setLastname(String lastname) {        this.lastname = lastname;    }    }

建立联系方式相关的类Contact.java:

package collect.component;import java.io.Serializable;public class Contact implements Serializable{private String address;private String zipcodes;private String tel;public Contact() {}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getZipcodes() {return zipcodes;}public void setZipcodes(String zipcodes) {this.zipcodes = zipcodes;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}}

最后建立数据库表对应的实体类Cuser.java:

package collect.component;public class Cuser {private Integer id;private Integer age;private Name name;private Contact contact;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Name getName() {return name;}public void setName(Name name) {this.name = name;}public Contact getContact() {return contact;}public void setContact(Contact contact) {this.contact = contact;}}

建立映射文件Cuser.hbm.xml:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="collect.component.Cuser" table="c_user" catalog="ssh">        <id name="id" type="integer">            <column name="id" />            <generator class="native" />        </id>        <property name="age" type="integer">            <column name="age" />        </property>        <component name="name" class="collect.component.Name">            <property name="firstname" type="string">                <column name="firstname" length="50" />            </property>            <property name="lastname" type="string">                <column name="lastname" length="50" />            </property>        </component>        <component name="contact" class="collect.component.Contact">            <property name="address" type="string">                <column name="address" length="200" />            </property>            <property name="zipcodes" type="string">                <column name="zipcode" length="10" />            </property>            <property name="tel" type="string">                <column name="tel" length="20" />            </property>        </component>    </class></hibernate-mapping>

注解:映射文件使用component元素将Name类、Contact类同数据库表c_user联系起来。

将该映射文件加入到Hibernate的配置文件中,建立一个测试类Test.java:

package collect.component;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class Test {public static void main(String[] args) {// Configuration管理Hibernate配置Configuration config = new Configuration().configure();// 根据Configuration建立 SessionFactory// SessionFactory用来建立SessionSessionFactory sessionFactory = config.buildSessionFactory();// 创建实例Name name=new Name();name.setFirstname("闫");name.setLastname("术卓");Contact contact = new Contact();        contact.setAddress("北京");        contact.setTel("42689334");        contact.setZipcodes("100085");        Cuser user= new Cuser();user.setAge(33);user.setName(name);user.setContact(contact);// 定义主键变量Integer pid;// 添加数据Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// 创建主键变量pid = (Integer) session.save(user);tx.commit();} catch (RuntimeException e) {if (tx != null)tx.rollback();throw e;} finally {session.close();}// 关闭sessionFactorysessionFactory.close();}}

 

运行结果:

控制台:

20:47:57,366 DEBUG SQL:346 - insert intossh.c_user (age, firstname, lastname, address, zipcode, tel) values (?, ?, ?,?, ?, ?)

数据库:

Hibernate Component照射的一个简单例子

热点排行