- 浏览: 94638 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (90)
- spring mvc (7)
- hudson(持续集成引擎) (1)
- jquery (5)
- mongodb (2)
- httpclient (1)
- spring3.1 (4)
- hibernate4.1 (6)
- tomcat;database; (1)
- mysql;存储引擎; (1)
- dwr (1)
- httpsession (2)
- symbian (1)
- lighttpd (3)
- nginx (3)
- apache (2)
- 链表 (1)
- jetty (2)
- Redis (1)
- memcached (1)
- squid (1)
- 反向代理 (1)
- 360doc (1)
- struts2 (2)
- mail (1)
- annotation (2)
- captcha (1)
- ehcache (2)
- ThreadPoolTaskExecutor (1)
- json (2)
- tomcat (3)
- cookie (1)
- session (1)
- 面试 (3)
- hadoop (3)
- JDK (1)
- 内存 (1)
- hibernate二级缓存 (1)
- hadoop mapreduce (1)
- linux (2)
- spring security (2)
- http (2)
- excel (1)
- unix (1)
- compass (1)
- lucene (1)
- kindeditor (1)
- C++ (1)
- java (1)
- cas (1)
- eclipse (2)
- olap (1)
- oltp (1)
- Git (1)
- BI (1)
- lago (1)
- 存储过程 (2)
- 书本 (1)
- VMware虚拟机 (1)
- 网络技术 (1)
- 登陆 (1)
- SapphireCache (1)
- ssl (1)
- webservice (1)
- RPC (1)
- 连接池 (1)
- google api (1)
- oracle (1)
- javascript (1)
- mysql (1)
- 离线文件 (0)
- 多线程 (0)
最新评论
-
davinsam:
import org.mysterylab.utopiafra ...
hibernate dao -
davinsam:
dao类使用说明弄错了,怎么跟basehibernatedao ...
hibernate dao -
like_shadows:
真不错,顶
mongodb基本知识
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());
}
}
本次做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());
}
}
发表评论
-
hibernate find illustrate
2012-05-03 17:05 734Find()方法下FetchType.LAZY、FetchTy ... -
hibernate relative annotation
2012-05-03 16:57 1317[size=large] @TriggerRemove Re ... -
hibernate dao
2012-05-03 12:54 2451[size=large]有分页功能的 HibernateDao ... -
hibernate Join-subclass
2012-05-03 11:13 1775Join-subclass基础(用于两个表之间通过连接外键) ... -
SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
2012-04-20 13:01 1241转载【http://sishuok.com/for ...
相关推荐
03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的使用。 04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计...
在给出的文件名列表中,`cmp`可能是压缩包中某个文件或目录的简写,具体含义可能与JEECG的组件(Component)有关,比如可能是某个特定模块的代码或者配置文件。 总的来说,JEECG结合Hibernate,提供了一种高效、...
`hb_02_component`和`hb_03_componentOid`、`hb_03_componentCollection`则涉及到了Hibernate的组件映射(Component Mapping)和复合主键(Composite Key)。组件映射允许将一个类的属性组合成另一个类的一部分,而...
在Java开发领域,尤其是使用Spring或Hibernate框架时,“Component(组件映射)”是一个重要的概念。Component映射是Hibernate提供的一种机制,它允许我们将多个相关的简单属性或者对象封装到一个复合对象中,以此来...
`hibernate_component_mapping`文件可能讨论了Hibernate的组件映射。组件是一组相关的属性,它们可以作为一个整体被映射到数据库的一个或多个字段上。组件映射提供了一种有效的方式,将复杂对象分解为更小的部分,...
在Hibernate中,组件(Component)是一种特殊的关联关系,它将一个类的实例嵌入到另一个类中,就像Java中的内部类一样。组件可以是任何复杂的对象结构,如地址、时间戳等,它们作为主对象的一部分存储在数据库中。...
5. **Hibernate_Component**:这部分可能包含了Hibernate组件映射的示例。组件是对象的一部分,可以被嵌入到其他对象中,类似于数据库中的复合类型。通过@Component或@Embeddable注解,可以将一个类声明为组件,并在...
在IT行业中,SpringMVC、Hibernate和定时器是三个非常重要的技术组件,它们分别负责不同的功能领域。SpringMVC是Spring框架的一个模块,用于构建Web应用程序的Model-View-Controller(MVC)架构;Hibernate是一个...
`hibernate-mapping-4.0.xsd`包含关于如何定义实体、关联(Association)、组件(Component)、集合(Collection)等的规则,而`hibernate-configuration-4.0.xsd`则定义了配置Hibernate会话工厂、缓存策略、事件...
例如,教程中提到的版本为 `jbosstools-3.2.1.Final.component--hibernatetools-Update-2011-08-01_12-53-33-H1305.zip`。 - **安装步骤**:下载后的压缩文件需解压并放入 Eclipse 的 `dropins` 目录下,并且需要...
组件(Component)是一个被包含的对象,在持久化的过程中,它被当作值类型,而并非一个实体的引用。在这篇文档中,组件这一术语指的是面向对象的合成概念(而并不是系统构架层次上的组件的概念)。举个例子, 你对人...
2. 注解驱动开发:使用@Component、@Service、@Repository和@Controller等注解标记bean。 3. 配置事务管理:使用@Transactional注解开启事务支持,配置事务管理器。 4. 整合其他框架:如整合Hibernate,需要配置...
5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键...
Hibernate支持三种持久化模型:实体(Entity)、值对象(Value Object)和组件(Component)。实体是与数据库表对应的Java对象;值对象用于封装业务逻辑中的数据;组件则用来表示一个对象的组成部分。 5. **级联...
这个Demo可能包含了Spring和Hibernate的XML配置文件,也可能涉及到@Component、@Service、@Repository和@Controller等注解的使用。 10. **Maven或Gradle构建**:项目可能使用Maven或Gradle进行依赖管理和构建,通过...
4. **Action类**:通常标记为`@Component`,并使用`@Autowired`注解注入所需的Service或DAO。 通过这些配置,SSH能够协同工作,Spring负责整体控制和事务管理,Struts2处理用户交互,Hibernate处理数据库操作。这种...
8. **配置注解驱动**:在`dispatcher-servlet.xml`中启用Spring MVC的注解驱动,配置`<context:component-scan>`扫描带有注解的bean,并设置`<mvc:annotation-driven>`以支持HTTP方法映射和数据绑定。 9. **测试与...