基于Struts2+Hibernate的博客系统的设计与实现-陈长第 - 图文(5)

2019-04-21 22:47

客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。Jsp广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。中间层采用的是流行的Spring+Hibernate ,为了将控制层与业务逻辑层分离,又细分为以下几种。

Web 层,就是MVC 模式里面的C,负责逻辑层和表现层的交互。调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC采用Struts框架。 Service 层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO 层为基础,通过对DAO 组件的正面模式包装,完成系统所要求的业务逻辑。

DAO 层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO ,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate 作为ORM 框架。Spring 的作用贯穿了整个中间层,将Web 层、Service 层、DAO 层及PO 无缝整合,其数据服务层用来存放数据。

通过使用Hibernate 持久层,可以避免使用传统的JDBC 操作数据库,对JDBC近一步包装,从而更好地使用面向对象的方式来操作数据库。保证了整个软件开发过程以面向对象的方式进行,即面向对象分析、设计及编程,透过Hibernte 对PO对象持久化操作,不管插入还是查询都是通过PO。

4.3.6实现DAO 层

DAO 还有助于提升系统的可移植性。独立的DAO 层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅

- 20 -

仅影响DAO 层,不同数据库的切换不会影响业务逻辑组件,因此提高了系统的可复用性。

对于不同的持久层技术, Spring 的DAO 提供一个DAO 模板,将通用的操作放在模板里完成,而对于特定的操作,则通过回调接口完成。Spring 为Hibernate 提供的DAO 支持类是: HibernateDaoSupport。

4.3.7 DAO组件的定义

DAO 组件提供了各持久化对象的基本的CRUD 操作。而在DAO 接口里则对DAO组件包含的各种CRUD 方法提供了声明,但有一些IDE 工具也可以生成基本的CRUD方法。使用DAO 接口的原因是:避免业务逻辑组件与特定的DAO组件藕合。由于DAO 组件中的方法不是开始就设计出来的,其中的很多方法可能会随着业务逻辑的需求而增加,但以下几个方法是通用 的。

? get: 根据主键加载持久化实例。 ? saveor update: 保存或更新持久化实例。 ? remove: 删除持久化实例。

上面涉及了7个PO,这样我们必须设计7个对应的PODao

7个Dao必须继承BaseDao 这个BaseDao 有对接口的一些基本的CURD操作。7个Dao 如下。LinksDao ,BlogDao、FeedBackDao、ArticleDao、MessageDao、SortDao、PictureDao。这7个Dao 分别封装对自己的持久化对象的一些操作。

- 21 -

4.3.8 部署DAO 层

HibernateDaoSupport类只需要一个SessionFactory 属性,即可完成数据库访问。SessionFactroy创建Session,而数据库的CRUD操作都是有Session 完成,并将查询结果保存在一级缓存中,每次用户提交一次会话,可能需要Session完成一些数据库的操作而实际的数据库访问由模板类HibernateTemplate完成,该模板类提供了大量便捷的方法,简化了数据库的访问。

第五章 数据库设计

5.1定义(数据词典)

1、数据库表名的定义使用:重点字_table;重点字可以是多个英文单词的组合,从组合的第二单词起首字母大写,字段命名是能表达字段内容的英文单词的组合,组合方式同表名重点字相同。

2、NN 表示not null 不填表可为空。

3、数据类型不使用固定数据库的类型,标识大众类型,如字符串、字符、数字等。这样在更改数据库时需求的数据是可移植的

4、输写数据表在数据库中的物理名称,可用自己熟悉的语言再定义表名称,方便沟通。

5、长度定义又数据类型决定:如字符串可选8000以下,数字可在50位之间,字符只允许一位。

6、输入方式表示数据的来源:生成表由程序或数据库的索引自动生成,而不需人工录入;输入表示通过文本框等输入的数据;选择表单选框、复选框、下拉列

- 22 -

表等通过选择输入的数据;自定获取是为外码的输入设定的,它由程序自动获取。

5.2主要表结构如下

1.表[blog]日志数据表 字段名 blogid title pubtime authorid replies tbs views category content property 类型 Int(10) text Int(11) Int(8) Int(8) Int(8) Int(8) Int(3) mediumtext Int(1) 说明 日志的ID 日志标题 日志发表时间 日志作者的UID 日志的评论数 日志的trackback数 日志的查看次数 日志所属的分类的ID 日志正文内容 日志的属性 0 公开日志 1 锁定日志 2 隐藏日志 3 一般草稿 2.表[user]博友登陆信息表 字段名 类型 userid Int(10) nicheng Text username text password text 3.表[register]用户数据表 字段名 类型 userid Int(8) username text userpwd Int(8) regtime Int(11) usergroup Int(2) email text qq text msn text gender text

- 23 -

说明 博友ID 博友在博客里的称呼 登陆时的用户名 登陆密码 说明 登陆时需要用到的用户名 用户昵称 登陆密码 注册时间 所属的用户组ID 用户email Qq号 用户msn 用户性别

第六章 系统主要功能的设计与实现详细

6.1. 系统模块详细设计

6.1.1. 登陆

一个系统登陆操作时必不可少的,本系统登陆采用的是客户端与服务器端双重验证的安全登陆操作,在客户端进行一些必要的登陆判断,在判断成功后再提交给服务器端进行登陆验证。登陆成功后在进行相应的操作。

下述示例代码为登陆操作代码的一部分: /**登陆**/

$(\ //取得用户输入的用户名

var $username=$(\ //取得用户输入的密码

var $password=$(\ //准备服务器端所需的数据

var data={username:$username,password:$password}; //发送Ajax请求

$.get(\ if(result.ok==false){ //登陆失败的提示

- 24 -


基于Struts2+Hibernate的博客系统的设计与实现-陈长第 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一堂非常实用的“班会课”

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: