`

hibernate之面向设计的细分

阅读更多

在Hibernate中,常常会听见:“fine-grained object model”,大致上是”适当的细粒度对象模型“;何为“适当的”?怎么才算的上是适当的,分寸的拿捏很大程度上取决与系统本身的特性,及设计者对应用逻辑的理解和项目经验的积累;何为“细粒度”?将原本业务逻辑中的对象加以细分,从而得到更加精细的对象模型(划分出更多的对象),在计算机世界中,有这样一句话:再复杂的系统,也就是由1和0组成;总而言之,对于hibernate来言,所谓的细粒度对象模型,主要针对实体类设计的对象细分,对象的细分出于2个目的:1.面向设计的粒度细分,通过对对想更精细的划分,从而更加清晰的展现系统逻辑;2.面向性能的粒度细分,针对业务逻辑,通过合理的细粒度对象,提供系统的能耗比(性能/资源消耗);

 

  • 面向设计的粒度细分
  • Component

 

对于单表的对象细分,在Hibernate中可以借助Component节点的定义完成;Component可翻译为:组件!就是从属某一整体的一个组成部分,在Hibernate中,可以根据某个实体对象中的一个逻辑组成称为Component;Component与实体对象的差别在于:Component没有标识,而实体对象有标识;因为Component是完全从属于实体对象的;

比如:一个门户网站中的用户管理,用户信息可分为:登录时所需要的帐号密码,用户的基本信息,和一些比较大型的属性如:用户的图像,个人简介还可用继续往下分)这个大的实体对象中就包含了3个逻辑组成部分:1.账户密码;2.基本信息;3.用户的大字段(图像,个人简介...)

例:TUser这样:

 

public class TUser implements java.io.Serializable {
	private static final long serialVersionUID = 1L;
	
	private Integer tId;
	private String tName;
	private String pwd;
	private TUserBase userBase;
	private TUserImg userImg;
	get()/set()
}
 

 

 

其中的将TuserBase和TuserImg分开了:TuserBase:

 

public class TUserBase implements java.io.Serializable{
	private static final long serialVersionUID = 1L;
	
	private String realName;
	private String sex;
	private String age;
        get()/set()
}

 

 TUserImg:

 

import java.sql.Blob;
import java.sql.Clob;

public class TUserImg implements java.io.Serializable{
	private static final long serialVersionUID = 1L;
	private Blob image;
	private Clob info;
        get()/set()
}

 

 写下测试类:

 

	public static void saveTest() throws Exception {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		
		TUser tuser = new TUser();
		tuser.settName("root");
		tuser.setPwd("keith");
		
		TUserBase userBase = new TUserBase();
		userBase.setAge("21");
		userBase.setRealName("kejianjun");
		userBase.setSex("man");
		
		TUserImg userImg = new TUserImg();
		FileInputStream img = new FileInputStream("/home/keith/桌面/hankouku.jpg");
		Blob bimg = Hibernate.createBlob(img);
		userImg.setImage(bimg);
		
		Clob info = Hibernate.createClob("to many info..................");
		userImg.setInfo(info);
		
		tuser.setUserBase(userBase);
		tuser.setUserImg(userImg);
		
		session.save(tuser);
		session.getTransaction().commit();
	}

 

 看下日志文件:这是其中的建表SQL;

 

    create table TUser (
        tId integer not null auto_increment,
        tName varchar(255),
        pwd varchar(255),
        realName varchar(255),
        sex varchar(255),
        age varchar(255),
        image longblob,
        info longtext,
        primary key (tId)
    )

 

 看下添加的SQL:

 

Hibernate: insert into TUser  (tName, pwd, realName, sex, age, image, info) values  (?, ?, ?, ?, ?, ?, ?)

当然,在实际开发中并不会像上面那么设计,只是一个简单的例子而已!

  •  面向性能的粒度细分

第二个目的就是针对性能的细分,比如登录的时候,我只需要登录即可,详细信息或者是一些重量级的信息时,如果我不发送请求就不会去数据库里查询,可以提高系统的能耗比;在hibernate3中提供了延迟加载也可称为“懒加载”;

在配置文件中可以这样:

 

<property name="summary" not-null="true" length="200" lazy="true"/>

 这是hibernate文档中的例子,可以做下实验,so Easy的!

 

 

分享到:
评论

相关推荐

    深入浅出Hibernate

    本文将深入探讨 Hibernate 中实体的粒度分析,包括面向设计和面向性能的粒度分析。 #### 二、面向设计的粒度分析 面向设计的粒度分析旨在通过对象细化来实现更清晰的系统逻辑。这一过程通常涉及到将大型复杂的对象...

    Hibernate 关联关系映射分类

    一对一关联是数据库设计中最常见的关联类型之一,它指的是两个实体之间存在一种一对一的关系。在Hibernate中,一对一关联可以被进一步细分为单向关联和双向关联,以及基于主键关联和基于外键关联。 #### 单向关联 ...

    Spring+Struts2+Hibernate实现的OA项目

    Spring作为全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Struts2作为MVC框架,负责处理视图和控制逻辑;而Hibernate则是一个强大的对象关系映射(ORM)工具,简化了数据库操作。这三者结合...

    综合Struts+Spring+Hibernate开发图书管理系统

    【Struts2】Struts2 是一个基于 Model-View-Controller (MVC) 设计模式的Web 应用框架,负责处理用户请求并提供响应。它通过FilterDispatcher 或 Struts2 的 FilterActionServlet 过滤器来拦截请求,并将请求转发给...

    JAVA网络硬盘源码(Struts 2+Hibernate+Spring实现)

    **Spring** 框架是一个全面的应用程序管理框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能。在本项目中,Spring主要负责管理Bean的生命周期,包括初始化、装配以及销毁。通过Spring的IoC(Inversion of ...

    J2EE企业级项目开发-1期 课程整体设计.doc

    《J2EE企业级项目开发-1期 课程整体设计》是针对软件技术专业学生的一门专业课,旨在通过60学时的学习,使学生掌握Java Web高级开发中常用的企业级框架技术,如Struts2、Hibernate和Spring的集成应用。课程设计遵循...

    案例课程B-S架构-1期 详细设计书.pdf

    此外,SSH框架的使用,表明系统利用了Spring进行控制反转和面向切面编程,Struts作为MVC框架,以及Hibernate作为对象关系映射工具,来提高开发效率和系统性能。 为了完成详细设计,开发团队参考了包括基于Struts、...

    基于JavaWeb的在线图书商城设计与实现.docx

    论文中对比了不同的JavaWeb框架,如Struts、Spring、Spring MVC和Hibernate等,最终选择了Spring框架作为基础,因为Spring提供了全面的依赖注入和面向切面编程支持,有助于提高代码的可维护性和可测试性。...

    基于NET的课程设计

    - **系统结构化设计**:整个系统将被划分为多个功能模块,每个模块再进一步细分为子模块,以实现清晰的功能划分和简化程序设计。 #### 5. 数据库及逻辑设计 ##### 5.1 数据流图 数据流图是一种图形化的表示方法,...

    基于JavaWeb旅游服务管理系统的设计与实现.pdf

    JavaWeb 技术作为企业级应用开发的重要工具,因其强大的可扩展性、跨平台性以及丰富的开源库,成为构建旅游服务管理系统的选择之一。本文旨在设计并实现一个基于 JavaWeb 的旅游服务管理系统,以提高旅游行业的运营...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    3. Web服务器:Tomcat 5.5及以上版本,配合MVC设计模式及 Hibernate开发架构; 4. 客户端运行环境:能运行IE 5以上或Netscape 5以上浏览器的操作系统,配合使用Ajax技术; 5. 客户端运行工具:目前的系统采用...

    基于经费管理的分布式快速开发框架研究 (1).pdf

    NHibernate是一个面向.NET环境的对象/关系数据库映射工具,它借鉴了Java中著名的Hibernate工具,并将.NET平台中的对象持久化到关系型数据库。NHibernate通过映射文件将值对象和数据库表建立映射关系,简化了数据库...

    Java毕业设计-客户关系管理系统源码+论文+视频.rar

    Java因其跨平台性和面向对象特性,成为开发企业级应用的首选语言。源码中可能包含了前端界面、后端逻辑处理、数据库操作以及业务逻辑组件等。 2. **客户信息管理**:这部分源码可能涉及客户数据的增删改查,包括...

    天翼RTC能力平台_WEB端开发详细设计说明文档PA3_07_101

    在系统功能设计方面,平台被细分为运营管理、业务管理、开发者管理、我的应用和系统管理五大主要模块。每个模块都有其独特的功能和角色定位,它们共同支撑起了整个平台的业务流程。例如,运营管理模块涉及能力配置...

    客户资源管理系统 JAVA

    【系统设计】阶段,要关注系统的技术选型,如使用Java Spring框架进行服务管理,Hibernate或MyBatis作为ORM工具处理数据持久化,MySQL或Oracle作为数据库系统,使用AJAX或Vue.js等前端技术提升用户体验。同时,要...

Global site tag (gtag.js) - Google Analytics