hibernate数据持久化组件
- 格式:docx
- 大小:60.50 KB
- 文档页数:5
突发事件应急管理调度平台的设计余鹏;罗惠平;李艳;杨木清【摘要】In order to improve the responding velocity and commanding efficiency in the Held of enterprise,government and universities , a managing and scheduling emergency incident platform, which is based on Spring framework and Hibernate data persistence framework for system design, was given. The platform can effectively manage and completely monitor the progress of emergency of different government,areas and types. Based on hotspot map,the system can show the currently important faults on the image of electronic map,as well as dynamically monitoring the progresses of resource scheduling in time with electronic map and satellite map. The experiment is probed that the platform can accurately show the changes of the data of emergency. Meanwhile, it is proved that the platform can improve the scheduling efficiency of emergency management.%为提高企业、政府机构、高校等应对突发事件的反应速度和指挥效率,设计并实现了基于Spring框架和Hibernate数据持久化框架的突发事件应急管理调度平台.该平台完成了对不同机构、不同区域、不同类型的突发事件应急过程的全面管理和统一监控;通过热点地图的形式,实现对电子维运管理调度平台上报的重要应急数据在电子地图上的统呈现;通过电子地图、卫星地图等直观的方式实现对应急资源调度过程的动态监控.实验证明,平台能够准确地呈现实时应急调度数据的变化,可提高突发事件的应急管理调度效率.【期刊名称】《武汉理工大学学报(信息与管理工程版)》【年(卷),期】2011(033)004【总页数】5页(P560-564)【关键词】Spring框架;Hibernate数据持久化框架;应急管理调度平台;热点地图;动态监控【作者】余鹏;罗惠平;李艳;杨木清【作者单位】中南民族大学网络技术中心,湖北武汉430074;中南民族大学网络技术中心,湖北武汉430074;中南民族大学网络技术中心,湖北武汉430074;中南民族大学网络技术中心,湖北武汉430074【正文语种】中文【中图分类】TP311.52突发事件对社会造成的影响越来越严重。
基于Struts+Hibernate+Spring的系统设计和开发俞国红(健雄职业技术学院计算机工程系,江苏太仓215411)摘要:阐述了以J2EE(JSP、JavaBean、Servlet)、SSH(Struts、Spring、Hibernate)开源框架为核心技术,逐步构建软件架构原型,构建系统原型作为系统开发的基础,提出了基于Struts、Spring和Hibernate框架的轻型J2EE 软件架构技术的系统设计和开发方法。
关键词:J2EE;Struts;Spring;Hibernate;架构中图分类号:TP311.52文献标识码:A1 前言J2EE(Java 2 Enterprise Edition即Java 2 平台企业版)是由Sun公司主持推出的一项中间件技术。
EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。
但由于EJB的复杂性,导致程序的开发效率低。
在Spring和Hibernate 等轻量级框架出现后,大量的开发人员转向到以目前最流行的开源框架,能快速开发出结构清晰、可重用性好、维护方便的轻量级的J2EE企业系统应用。
2 Web应用的分层分析构架Web企业系统应用时需要考虑用户交互、处理业务逻辑、应用数据持久化、扩展性等很多问题,所以一个应用的架构方案和实现技术选择十分重要。
而分层的目的就是对应用的逻辑功能进行划分,使每层在完成自己功能的同时,不影响其它层,实现“高内聚,低耦合”具有易于控制、扩展、维护的优点,图1是一个典型的轻量级J2EE应用架构,Web 应用分层结构基本上都分为三层:表现层、业务逻辑层、数据持久层。
表示层用来处理用户和软件之间的交互,它主要的责任是向用户展现信息以及处理用户请求。
业务逻辑层,又叫做领域逻辑层。
其职责包括处理业图1 典型的Web应用分层结构Fig.1 Typical Web application hierarchical structure务逻辑和存储业务数据,校验从表示层传过来的数据,通过表示层提交的命令来执行相应的业务逻辑。
数据持久化技术中的ORM和DAO模式比较在软件开发中,数据的持久化技术是至关重要的一环。
ORM和DAO是两种常用的数据持久化框架,不同的框架在实现方式、性能等方面存在差异。
本文旨在比较ORM和DAO模式的优劣,帮助开发者根据实际需求进行选择。
一、ORM模式ORM(Object-Relational Mapping)是一种面向对象的数据持久化框架,通过将对象与数据库中的表进行映射,实现数据的存储和读取。
ORM最大的优势在于它使得开发者可以使用面向对象的思想操作数据库,编写起来更加清晰简洁,减少了手写SQL的繁琐。
常见的ORM框架有Hibernate、MyBatis等。
下面是ORM模式的具体特点:1. 对象映射。
ORM框架通过对象关系映射(ORM)技术,将关系型数据库中的数据与实体对象的属性映射对应起来,存取数据库数据时,开发者只需要操作对应的对象即可,ORM框架会自动将对象转化为对应的SQL语句去操作数据库,编写起来更加清晰简洁2. 缓存。
ORM框架中除了提供SQL语句翻译的功能外,还提供了缓存功能。
缓存主要有两种:一级缓存和二级缓存。
一级缓存是指在同一个会话中查询同一个对象时,会先从缓存中查找,如果找不到再去数据库查询;二级缓存是指在不同的会话中查询同一个对象时,会先从缓存中查找,如果找不到再去数据库查询。
3. 推荐使用面向对象编程。
ORM模式建议使用面向对象编程思想,将数据库中的表映射成类,将表中的字段映射成类属性,将表中的数据映射成实体对象,开发者只需要关心业务逻辑,而无需关心底层细节。
4. 可移植性好。
ORM框架封装了JDBC等底层数据访问技术,对开发者而言,在架构、设计、编码和维护等方面会比较简单,业务代码和ORM框架解耦。
同时ORM框架可以兼容多种数据库,应用在不同的平台和环境中都可以使用。
二、DAO模式DAO(Data Access Object)是一种数据访问模式,将数据访问相关的操作独立出来放在一个单独的对象中,该对象负责处理所有与数据库的交互。
hibernate数据持久化组件1.基本概念:1)对象持久化:把数据保存在永久的存储介质中(数据库)。
2)ORM(object relation mapping)对象关系映射。
3)POJO(PlainOldJavaObject)类是标准的Java Bean。
PO持久化对象用于插入数据时候所使用POJO对象,BO业务对象,VO值对象4)Hibernate就是一个可以自动的根据xml完成对象关系映射,并持久化到数据库的开源组件,底层也是由JDBC实现的。
通过xml文件的配置,对数据库的底层的方言,以及数据库连接所需的信息,以及连接数据库的驱动。
5)hibernate的系统配置文件的名字一般叫做hibernate.cfg.xml,一般是映射类名.hbm.xml。
一般将映射类的xml文件和实体类放在一起。
a)对象映射元文件: hibernate的映射类的XXXX.hbm.xml的写法(XXX一般跟所对应的POJO类的类名相同)<hibernate-mapping package="XXX.XXX.XXX"> package:映射类所在的包,注意:包中间用"."隔开<class name="Xxxxxx" table="Xxxxx">将类和数据库的表联系起来<id name="studentId属性名称" column="studentId对应的主键列名称">声明标识属性,这个属性在PO中是必须的,所以一般创建对应表时必须定义主键,否则hibernate会将所有的列识别为一个复合主键<generator class="assigned"/>用于定义主键生成策略, assigned指定主键生成策略为用户指定,identity用于指定主键采用底层数据库提供的自增长</id><property name="XXX属性名称" column="XXXX对应的列名称"type="string具体的数据类型,可以使用java数据类型进行指定,也可以使用hibernate 中提供的数据类型进行指定,也可以不指定由系统自动识别"/>类中的属性和字段之间建立联系<property name="brithday" column="brithday" type="date"/>在hibernate中其他类型可以自动识别只有Date类型必须指定,因为这里需要决定对应的时间精度问题</class></hibernate-mapping>b)核心配置文件hibernate.cfg.xml中会设置数据库的连接信息,以及引用的其他文件的文件名,和一些其他的设置。
这个文件一般放在项目的根目录下。
<hibernate-configuration><session-factory><!--这两个运行时常量在开发测试阶段需要设置,如果部署到产品环境中必须设置为false或者直接删除--><property name="show_sql">true</property>显示sql语句<property name="format_sql">true</property>使显示的sql语句格式化<property name="dialect">....</property>使用的数据库方言信息,hibernate依靠方言设置用于区别不同的数据库管理系统,从而生成对应数据库平台的SQL语句<!--使用的数据库的驱动--><property name="connection.driver_class">....</property><property name="connection.url">....</property><property name="ername">...</property><property name="connection.password">...</property> <!--引入的映射对象的xml文件的全路径及文件名,注意:包名之间用"/"隔开--> <mapping resource="xxx/xxxx/xxxxx.hbm.xml"/></session-factory></hibernate-configuration>2、使用hibernate编程步骤1)配置环境,加载hibernate的jar文件,以及连接数据库连接使用的jar文件,并配置CLASSPATH环境变量。
2)写POJO类(普通的java类)3)写hibernate所需的配置文件,hibernate.cfg.xml ,Xxxxx.hbm.xml4)调用hibernate API。
a)使用Configuration对象的buildSessionFactory()方法创建SessionFactory对象。
b)使用SessionFactory对象openSession()方法创建Session对象。
c)使用Session的相应方法来操作数据库,将对象信息持久化到数据库。
3.主键的选择:选择列数最少的候选键充当主键。
一般的主键有2种类型:自然主键和代理主键。
Hibernate推荐使用代理主键<generator>子元素指定对象标识符生成器,他负责为OID生成唯一标识符。
Hibernate 的内置标示符生成器(id生成器):a)increment:由Hibernate以递增的方式为代理主键赋值。
Hibernate在初始化阶段读取表中最大主键值,然后再最大值的基础上递增,增量为1。
<id name="id" column="id" type="long"><generator class="increment"/></id>适用范围:1>increament不依赖于底层数据库系统,所以适于所有的DBS。
2>适用于只有单个Hibernate应用程序访问同一个DB的场合。
3>ID必须为long、int或short类型,定义为byte类型在运行时会抛异常。
b)identity:由底层DB来负责生成,要求底层DB把主键定义为自增类型,例如在SQL Server中,应该把主键定义为identity类型,MySQL中,定义为auto_increment类型。
MySQL: id bigint primary key auto_increment,SQLServer: id int primary key identity(1,1)<id name="id" column="id"><generator class="identity"/></id>适用范围:1>由于identity生成机制依赖于底层DB系统,要求底层DB必须支持自增字段类型。
例如Oracle中不支持这种自增长方式,则不能使用2>ID必须为long、int或short类型,定义为byte类型在运行时会抛异常。
c)sequence利用底层DB提供的序列生成。
例如在Oracle中可以使用序列对象生成连续增长值create sequence seq1 start with 1 maxvalue 999999999999999999;<id name="id" column="id"><generator class="sequence"><param name="sequence">sql1</param>这是在数据库中的序列对象名</generator></id>适用范围:1>sequence依赖于底层DB,要求底层DB系统必须支持序列,例如Oracle、DB2等支持,但是在MySQL和SQLServer中不支持2>OID必须为long、int或short类型,定义为byte类型在运行时会抛异常。
d)hilo高低位算法:由Hibernate按照一种high/low算法来生成标识符,Hibernate从DB的特定表的字段中获取high值,hibernate自行维护了一个连续值充当低位值。
<id name="id" column="id"><generator class="hilo"><param name="table">tt_hilo</param>设置高位值取值的表<param name="column">hi</param>设置高位值取值的字段<param name="max_lo">50</param>指定低位最大值,当取道最大值时会再取一个高位值再运算</generator></id>适用范围:1〉hilo不依赖于底层DB系统,适用于所有的DBS。
但是需要额外表的支持2〉OID必须为long、int或short类型,定义为byte类型,在运行时会抛异常。
3〉hign/low算法生成的标识符只能在一个DB中保证唯一。
4〉当用户为Hibernate自行提供DB连接,或者Hibernate通过JTA,从应用服务器的数据源获得数据库连接时无法使用hilo,因为这不能保证hilo在新的DB连接的事务中访问hi值所在的表,这时如果DBS支持Sequence,可以使用seqhilo来产生ID,seqhilo从名为hi_sequence的序列里获取high值。