hibernate component

[size=large]Component
本次做MySNS时也用到了Component,在School.java和Address.java以及school.hbm.xml
如果一张表的列太多了,那我们应该怎么做呢?可能有些人的做法就是:将一张一有拆分成两张表,那除了将表进行拆分,我们还能怎么样呢?在 Hibernate对这种表的列太多,进行拆分,有一种非常好的解决方案,那就是基于Component技术,使用Component技术,我们可以将一 种表,按照字段的类型进行分类,同一类的,可以使用一个对象进行封装,而这个封装的对象,就是一个Component。假如,一个用户他的信息可能包含以 下几种分类,住址(包括家庭地址、办公地址、家庭邮编、办公邮编等)、电话(家庭电话、办公电话、手机、小灵通)、邮件地址(办公邮箱、私人邮箱等)、通 信工具(QQ号码、MSN、雅虎帐号、网易泡泡等),对于这些属性类别,我们都可以使用对象进行封装。

假如现在有以下这样的数据库表:


建表语句:
程序代码
drop table if exists T_USER;

/*==============================================================*/
/* Table: T_USER */
/*==============================================================*/
create table T_USER
(
ID INT not null auto_increment,
USER_NAME VARCHAR(20) not null,
LOGINID VARCHAR(20) not null,
PASSWORD VARCHAR(32) not null,
AGE INT,
ADDRESS VARCHAR(255),
MOBILE_PHONE VARCHAR(20),
PHS VARCHAR(20),
PHONE VARCHAR(20),
DEGREE VARCHAR(20),
primary key (ID)
);


现在假如除了ID、用户名、密码、登录号之外,所有属性都作为Hibernate的一个详细信息,那我们可以这样设计我们的类:
User.java
程序代码
package zizz.model;

import java.io.Serializable;

/**
* 该对象是针对着数据库的T_USER表.
*
* <a href="http://www.suneca.com">ZIZZ</a>
*
* Create-Time:Apr 21, 2008 9:53:58 PM
*/
public class User implements Serializable {

/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;

private int id;

private String userName;

private String loginId;

private String password;

private UserDetail userDetail;

public UserDetail getUserDetail() {
return userDetail;
}

public void setUserDetail(UserDetail userDetail) {
this.userDetail = userDetail;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getLoginId() {
return loginId;
}

public void setLoginId(String loginId) {
this.loginId = loginId;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


UserDetail.java
程序代码
package zizz.model;

import java.io.Serializable;

/**
* 用户详情信息.
*
* <a href="http://www.suneca.com">ZIZZ</a>
*
* Create-Time:Apr 23, 2008 10:39:47 PM
*/
public class UserDetail implements Serializable{

/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;

private int age;

private String address;

private String mobilePhone;

private String phs;

private String phone;

private String degree;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String getMobilePhone() {
return mobilePhone;
}

public void setMobilePhone(String mobilePhone) {
this.mobilePhone = mobilePhone;
}

public String getPhs() {
return phs;
}

public void setPhs(String phs) {
this.phs = phs;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public String getDegree() {
return degree;
}

public void setDegree(String degree) {
this.degree = degree;
}

}


User的hibernate mapping file
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 package="zizz.model">
<class name="User" table="T_USER">
<id name="id" column="ID">
<generator class="increment" />
</id>
<property name="userName" column="USER_NAME" />
<property name="loginId" column="LOGINID" />
<property name="password" column="PASSWORD" />

<component name="userDetail" class="UserDetail" lazy="true">
<property name="age" column="AGE"/>
<property name="address" column="ADDRESS"/>
<property name="mobilePhone" column="MOBILE_PHONE"/>
<property name="phs" column="PHS"/>
<property name="phone" column="PHONE"/>
<property name="degree" column="DEGREE"/>
</component>
</class>
</hibernate-mapping>


测试类:
程序代码
package zizz.test;

import zizz.dao.UserDAO;
import zizz.dao.hibernate.UserDAOHibernate;
import zizz.model.User;
import zizz.model.UserDetail;

/**
* 测试Hibernate Component.
* <a href="http://www.suneca.com">ZIZZ</a>
*
* Create-Time:Apr 23, 2008 11:33:30 PM
*/
public class ComponentTest {

public static void main(String[] args){
ComponentTest test = new ComponentTest();
test.testFind();
}

/**
* 测试创建一个新帐号
*/
public void testCreateUser(){
UserDAO dao = new UserDAOHibernate();

User user = new User();
user.setLoginId("cyz");
user.setPassword("admin");
user.setUserName("");

UserDetail detail = new UserDetail();
detail.setAddress("");
detail.setAge(20);
detail.setDegree("");
detail.setMobilePhone("");
detail.setPhone("");
detail.setPhs("");

user.setUserDetail(detail);

dao.createUser(user);
}

/**
* 测试根据ID查找用户
*/
public void testFind(){
UserDAO dao = new UserDAOHibernate();
User user = dao.findUserById(1);
System.out.println(user.getUserDetail());
}
}
[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值