BBS论坛需求分析

上传人:e****s 文档编号:243345516 上传时间:2024-09-21 格式:PPT 页数:100 大小:1.36MB
返回 下载 相关 举报
BBS论坛需求分析_第1页
第1页 / 共100页
BBS论坛需求分析_第2页
第2页 / 共100页
BBS论坛需求分析_第3页
第3页 / 共100页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.0,3.0,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,威迅教育开发部监制,2024/9/21,威迅教育开发部监制,第 一 章,BBS,论坛需求分析,2,目标,掌握如何进行需求分析,掌握如何进行详细设计,3,概述,Hibernate,是一个面向,Java,环境的对象,/,关系数据库映射框架,本课程通过一个简单的网络论坛,BBS,,来讲解,Hibernate,的相关知识,该,BBS,实现了论坛的基本功能,包括:用户发表话题,回复话题;管理员管理用户和主题等。,这一章中,我们主要学习对项目进行需求分析以及数据库的建模。,4,系统需求,完整的论坛系统应包含的角色及功能,用户,管理员,实现的功能有,注册、登录、用户信息管理,发表新话题、回复话题,管理员可以管理用户和主题,5,系统需求,用户模块,注册用户,登录系统,修改用户信息,浏览论坛,发表新话题,回复话题,6,系统需求,管理员模块:,登录系统,用户管理,主题管理,7,系统需求,系统用例图,8,系统功能描述,用户注册,注册时系统会对注册信息进行验证,以确保注册信息正确性,9,系统功能描述,用户注册,注册成功,则会跳转到论坛主题页面(自动以注册信息登录系统),10,系统功能描述,用户登录,登录时,用户可以选择登录的身份,(,普通用户或管理员,),,也可以进行匿名登录,11,系统功能描述,用户登录,登录成功,同样进入论坛主题页面,如果登录失败,系统给出错误提示如下,12,系统功能描述,修改注册信息,已注册用户可以对注册信息进行编辑。当用户成功登录之后,在每一个页面中都会有连接进行个人信息的修改,单击“我的帐户”进入个人信息修改页面。,13,系统功能描述,用户基本操作,浏览主题列表,浏览主题,浏览话题,创建话题,回复话题,删除话题,14,系统功能描述,浏览主题列表,注册用户登录成功之后,进入论坛的首页,在首页中显示有不同的主题列表,15,系统功能描述,浏览主题(话题列表),单击主题列表中的某一主题,就会显示该主题下的所有话题,16,系统功能描述,创建话题,在话题列表的上面,用户可以通过单击“新话题”链接建立一个新话题,只有登录用户才有权限新建一个话题,17,系统功能描述,创建话题,新话题提交后,该话题会添加到其主题的话题列表中,单击一个话题,从而进入该话题,18,系统功能描述,浏览话题,进入话题页面,可以看到该话题的内容以及该话题的回复,19,系统功能描述,回复话题,在浏览话题时可以进行回复话题,只有登录用户才可以回复,回复后的回帖马上在列表上显示,删除话题,用户浏览话题时,如果该话题是该用户创建的,那么允许用户删除自己的话题,单击“删除”链接把该话题及相关回复全部删除。删除后回到话题列表,20,系统功能描述,管理员操作,管理员登录,用户管理,主题管理,21,系统功能描述,管理员登录,用户登陆时选择管理员身份,成功登录后,则进入管理员界面。,在管理员界面有两个管理操作,单击“用户管理”链接,进入用户管理界面,单击“主题管理”进入主题管理界面。,22,系统功能描述,用户管理,在用户管理界面可以浏览用户列表,单击某一用户可以查看该用户详细信息,可以删除一个用户,可以对某一用户进行锁定及解锁,主题管理,在主题管理页面可以添加新的主题,23,系统设计,系统架构设计,业务实体设计,24,系统架构设计,本系统遵循多层次的架构设计,每个层负责不同的功能,系统架构层次划分,视图层,控制层,模型层,持久化层,数据库层,25,系统架构设计,系统实现技术,使用,Struts,框架来实现视图层、控制层和模型层,使用,Hibernate,来实现持久化层,26,业务实体设计,实现业务实体包括以下内容。,设计域模型,创建域模型实体对象,设计关系数据模型,创建对象,关系系映射文件,Wish BBS,论坛中有以下的业务实体,用户,User(,包括管理员,),主题,Subject,话题,Topic,话题回复,Response,27,业务实体设计,业务实体关系图,28,顺序图,例:在主题页面中,浏览某主题下所有话题,29,顺序图,例:查看话题回复,30,总结,软件开发的第一步就是明确系统需求,需求分析将系统需求转化为系统的具体功能(模块),多层次的架构设计一般从上到下分别是视图层、控制层、模型层、持久化层、数据库层。,业务实体设计就是识别和设计系统中的业务实体,进而转化为数据库设计,并映射为系统中的持久化类。,顺序图用于描述对象间以及对象和角色间的交互关系,有助于程序员理解业务流程并实现编码。,2024/9/21,威迅教育开发部监制,第 二 章,Hibernate概述,32,目标,了解对象持久化概念,理解,ORM,概念,33,持久化概述,在系统设计阶段,需要创建域模型和数据模型。,构成域模型的基本元素是域对象,包括,实体域对象,过程域对象,事件域对象,34,持久化概述,实体域对象创建于内存中,其维持的数据需要持久存储,以备将来加载使用,“持久化”就是把实体域对象永久保存起来,35,持久化概述,持久化的定义:,使数据的存活时间超过创建该数据的进程的存活时间。数据持久化后,可重新获得它;如果外界进程没有修改它,它将与持久化之前相同。,持久化方式,磁盘文件,关系型数据库,36,持久化概述,“,持久层”的概念:属于系统逻辑层面,是专注于实现数据持久化的一个相对独立的领域,持久化层封装了数据访问细节,可以将其与业务逻辑分开,成为单独的层次,典型的软件三层架构,加入持久层的四层架构,37,对象/关系映射,对象,/,关系映射,(Object/Relational Mapping),简称,ORM,,,就是将对象存储(映射)到关系数据库中,ORM,特点,在对象模型和关系模型间架起一座桥梁,能够直接持久化对象,开发人员不需要在对象和关系格式之间进行转换,38,对象/关系映射,ORM,中,持久化类通常为基于,JavaBean,形式的实体域对象,称为,POJO,一个特定持久化类和一个表相对应,类的每个实例对应表中的一条记录,表列和类的属性相对应,39,对象/关系映射,Hibernate,是一种独立于应用的轻量级的,ORM,框架,适用于各种不同的应用中,常用的,ORM,中间件有:,Hibernate,、,Apache OJB,、,Cayenne,、,Jaxor,、,TopLink,40,Hibernate,简介,主要内容,Hibernate,优点:简单、灵活、功能完备,Hibernate API,简介,配置,Hibernate,映射文件,构建,SessionFactory,持久化对象,创建,HibernateSessionFactory,41,简单和灵活,只需要一个运行阶段配置文件以及为每个持久化类指定一个映射文档,运行阶段配置文件可以是标准的键,值属性文件或,XML,文件。还可以以编程方式配置,Hibernate,的部分运行环境,映射文件配置持久化类与表的映射关系,42,功能完备,Hibernate,支持所有的面向对象特征,包括继承、自定义对象类型和集合,Hibernate,提供了一个名为,Hibernate,查询语句(,HQL,)的,SQL,抽象层,/User,为持久化类名,,user,为所要查询的对象,select user.username from User as user,/,查询,username,满足特定,name,的所有,user,实例,from User as user where user.username=:name,43,Hibernate API,简介,Hibernate,中的接口分类,数据库操作的接口:,Session,,,Transaction,和,Query,配置,Hibernate,的接口:,Configuration,回调接口:,Interceptor,、,Lifecycle,和,Validatable,用户扩展,Hibernate,的功能接口:,UserType,、,CompositeUserType,和,IdentifierGenerator,44,Hibernate API,简介,Hibernate,内部封装了,JDBC,、,JTA,和,JNDI,应用中会用到的,5,个核心接口,Configuration,SessionFactory,Session,Transaction,Query,45,Hibernate API,简介,Hibernate,的核心组件,46,配置,Hibernate,可选的配置文件,hibernate.cfg.xml,数据库的连接可以由,Hibernate,框架或,JNDI DataSource,提供,47,配置,Hibernate,使用,Hinbernate,管理的,JDBC,连接配置,org.hibernate.dialect.MySQLDialect,jdbc:mysql:/localhost:3306/bbsdb,root,root,mysql,48,配置,Hibernate,使用,JNDI DataSource,的连接配置,org.hibernate.dialect.MySQLDialect,java:comp/env/wishbbs,mysql,49,映射文件,映射文件是实体对象和关系数据库中的表建立关联的参照表,50,映射文件,列,类型,说明,id,bigint,pk,自增,username,varchar(20),pwd,varchar(15),package com.wish.bbs.dao;,public class User implements Serializable ,private Long id;,private String username;,private String pwd;,public Long getId(), return this.id; ,public void setId(Long id), this.id = id; ,public String getUsername(), return this.username; ,public void setUsername(String username), this.username = username; ,User,表,User,类,51,映射文件,52,构建,SessionFactory,SessionFactory,接口提供,Session,类的实例,Session,类表示到数据库的连接,53,构建,SessionFactory,创建,SessionFactory,Configuration cfg = new Configuration();,cfg.configure(/com/wish/bbs/hibernate.cfg.xml);,SessionFactory sessionFactory = cfg.buildSessionFactory();,创建,Session,实例,Session session = sessionFactory.openSession();,54,持久化对象,持久化对象,public void save(User user) ,Session session = sessionFactory.openSession();,session.save(user);,session.flush();,session.close();,55,持久化对象,删除持久化对象,public void delete(User user) ,Session session = sessionFactory.openSession();,session.delete(user);,session.flush();,session.close();,56,持久化对象,加载持久化对象,public User getUserByID(Long id) ,User user = null;,Session session = sessionFactory.openSession();,user = (User) session.load(User.class, id);,session.flush();,session.close();,return user;,57,创建,HibernateSessionFactory,可以把有关,Session,和,SessionFactory,的功能放在一个类中进行管理,public class HibernateSessionFactory ,public static Session currentSession() throws HibernateException ,public static void closeSession() throws HibernateException ,private HibernateSessionFactory() ,58,总结,“,持久化”就是把实体域对象永久保存起来。,“对象,/,关系映射”(,ORM,)就是将对象存储(映射)到关系数据库中。,Hibernate,是一种优秀的轻量级的,ORM,应用框架,其优点是简单、灵活、功能完备和高性能。,在应用程序中使用的,Hibernate,核心接口包括:,Configuration,、,SessionFactory,、,Session,、,Transaction,和,Query,Hibernate,需要一个配置文件,用于配置,SessionFactory,。通常每个持久化类有一个映射文件,,Hibernate,在运行时参照映射文件的信息,把域对象持久化到数据库中。,2024/9/21,威迅教育开发部监制,第 三 章,数据关联,60,目标,掌握持久化对象间的各种关联关系,掌握关联关系中集合的使用和配置,61,一对一关联,数据表之间的一对一关联,例如:用户和身份证,62,一对一关联,持久化对象之间的一对一关联,将关联的对象作为自己的属性成员,63,一对一关联,持久化类的成员描述,public class User ,private Long id;,private String username;,private String pwd;,private String nickname;,private Idcard idcard = null;,public class Idcard ,private Long id;,private String cardid;,private String name;,private String address;,private User user=null;,64,一对一关联,65,一对一关联,user,66,一对一关联,在表,Idcard,中,其主键是由,user,表的,id,决定的,这是一种主键关联方式,只需为一张表设定主键生成器,而另外一张表的主键与之共享相同的主键值,在,Hiberante,中,我们可以通过“,foreign”,类型的主键生成器与外键共享主键值,元素用于描述一对一的关联关系,67,多对一关联,多对一是一种单向关联关系,它和关系数据库中的外键引用关系相匹配,例如:用户,(User),可以发布多个话题,(Topic),,而一个话题只能由一个用户发布,68,多对一关联,在,Topic,类中用一个,User,属性来表示该,Topic,对象是由谁发布的,public class Topic implements java.io.Serializable ,private Long id;,private User user;,private Long subjectid;,private String title;,69,多对一关联,Topic.hbm.xml,70,多对一关联,many-to-one,元素用于描述多对一的关联关系,其中的子元素,column,用于指定持久化类对应的表的外键,71,一对多关联,一对多关系可以是单向也可以是双向的,单向一对多只需在“一”方进行配置,而双向一对多需要在关联双方均加以配置,例如:主题,Subject,到话题,Topic,是一对多的关系,(,以单向一对多为例,),72,一对多关联,在,Subject,类中用一个集合属性表示该主题下的多个话题,public class Subject implements java.io.Serializable ,private Long id;,private String name;,private Set topics = new HashSet(0);,73,一对多关联,Subject.hbm.xml,74,一对多关联,可以使用,元素来描述一对多关联关系,元素还包括两个子元素,设定所要关联的持久化类,设定与所关联的持久化类对应的表的外键,75,集合类型,对于一对多关系中相关联的集合属性,,Hibernate,支持所有主要的,Java,集合接口,在,Hibernate,中可用的集合类型有,Set,、,List,、,Map,、,Bag,、,idbag,等集合类型,76,集合类型,List,可以包含重复元素。,List,有索引,这意味着包含的元素存储在,List,的特定位置,需要定义,元素,77,有序集合,Set,集合是无序的,但在,Hibernate,中可以支持对,set,进行排序。,78,总结,一对一关联是通过主键关联来实现。在相关联的两个持久化类中分别将对方类的对象设置为自己的一个属性成员。在映射文件中使用,元素来配置它们的关联关系。,多对一是一种单向关联关系,它和关系数据库中的外键引用关系相匹配。在“多”方的映射文件中使用,元素来配置关联关系。,一对多关系可以是单向也可以是双向的。在单向一对多关系中,在“一”方的映射文件中需要指定“多”方的集合属性,并使用,元素来配置。,对于一对多关系中的集合属性,,Hibernate,支持所有主要的,Java,集合接口,如,Set,、,List,、,Map,等。,2024/9/21,威迅教育开发部监制,第 四 章,查询持久化对象,80,目标,理解面向对象查询语言的概念,掌握,Hibernate,提供的面向对象查询语言,HQL,81,概述,Hibernate,查询语言,Hibernate Query Language,简称,HQL,HQL,是面向对象的查询语言,比,SQL,更容易编写,HQL,提供了一种应用和数据库之间的抽象,提高了可移植性,82,使用,HQL,主要内容,简单查询,条件查询,参数绑定,属性查询,分组和排序,引用查询,83,简单查询,Hibernate,查询的结构与,SQL,查询相似,由,Select,、,From,和,Where,子句组成。,HQL,还支持子查询,一个最简单的查询:查询,Subject,类(即,subject,表)的所有的对象,from Subject,84,简单查询,Query,接口用来完成查询,Session,的,createQuery,方法从数据库中把,Subject,集合导入到内存中,并返回一个,Query,接口,Query,的,list,方法返回查询结果集合,85,简单查询,getSubjects,方法获取所有,Subject,对象,public List getSubjects() ,List subjects = new ArrayList();,try ,Session session = sessionFactory.openSession();,String hqlstr = from Subject;,Query query = session.createQuery(hqlstr);,subjects = query.list();,session.flush();,session.close();, catch (HibernateException e) ,e.printStackTrace();,return subjects;,86,条件查询,使用,where,子句,例如:根据,Subject,的,name,得到一个,Subject,实例,from Subject as subject,where subject.name=xxx,87,条件查询,getSubjectByName,方法根据主题名称获取一个,Subject,对象,public Subject getSubjectByName(String name) ,Subject subject = null;,try ,Session session = sessionFactory.openSession();,String hqlstr =from Subject as subject where subject.name= + name + ;,Query query = session.createQuery(hqlstr);,List result = query.list();,if (result != null & result.size() 0) ,subject = (Subject) result.get(0);,session.close();, catch (HibernateException e) e.printStackTrace(); ,return subject;,88,条件查询,where,子句中可以通过比较操作符指定筛选条件 。,HQL,中支持的比较操作符包括:,=, , , =, 20),and user.username like a%,89,参数绑定,使用,HQL,语句拼接存在一定缺陷:,编码凌乱,可读性差,难以进行性能优化,引入额外的安全风险,使用参数绑定机制可以妥善处理好以上问题,90,参数绑定,在,HQL,语句中使用“,?”,占位符,使用,query,的,setXXX,方法给“,?”,绑定参数,String hqlstr =,from Subject as subject,where subject.name=,?,;,Query query = session.createQuery(hqlstr);,query.setParameter(0, name);,List result = query.list();,if (result != null & result.size() 0) ,subject = (Subject) result.get(0);,91,参数绑定,位置参数以外,还可以使用命名参数来表示参数,String hqlstr =,from Subject as subject where subject.name=,:name,;,Query query = session.createQuery(hqlstr);,query.setString(name, name);,92,属性查询,有时我们仅仅需要实体对象的某个属性,例如:获取所有用户的用户名集合,String hqlstr =, from User as user;,Query query = session.createQuery(hqlstr);,users = query.list();,93,属性查询,通过一条,HQL,语句获取多个属性,String hqlstr =,select from User as user;,Query query = session.createQuery(hqlstr);,List list = query.list();,Iterator it = list.iterator();,while(it.hasNext(),Object results = (Object)it.next();,System.out.println(results0);,System.out.println(results1);,94,属性查询,通过一条,HQL,语句获取多个属性,String hqlstr =,select from User as user;,Query query = session.createQuery(hqlstr);,List list = query.list();,Iterator it = list.iterator();,while(it.hasNext(),Object results = (Object)it.next();,System.out.println(results0);,System.out.println(results1);,95,属性查询,使用函数,select count(user) from User user,select count(distinct user.username),from User user,使用关键字,distinct,96,分组和排序,order by,子句实现对查询结果的排序,order by,子句还支持多个排序条件,from User user,通过,Group by,子句进行分组统计,select count(user), user.sex from User user,97,引用查询,SQL,混杂在代码之间将破坏代码的可读性,并使系统的维护性降低。,为了避免这样的情况出现,我们通常采取将,SQL,配置化的方式,就是将,SQL,保存在配置文件中,需要的时候再进行读取。,Hibernate,提供了,HQL,可配置化的内置支持。,98,引用查询,在实体映射文件中,通过,query,节点定义查询语句,99,引用查询,通过,Session,的,getNamedQuery,方法从配置文件中调用对应的,HQL,Session session = sessionFactory.openSession();,Query query =,session.getNamedQuery(subjectQueryGetSubjects);,subjects = query.list();,100,总结,Hibernate,查询语言(,HQL,)是面向对象的查询语言,其结构与,SQL,查询相似,不同的是,,HQL,查询的主体是持久化类而不是数据表。,HQL,的,where,子句中匹配的是持久化类的属性而不是数据表的字段。在,HQL,中可以使用参数绑定。,在,HQL,中可以对持久对象的属性进行查询,也可以进行分组查询和对查询结果排序。,HQL,使用,Query,接口实现查询,,Session,的,CreateQuery(),方法返回,Query,实例。,Query,接口的,setXXX,方法为查询语句的参数设置参数值。,Query,接口的,list,方法返回查询结果的集合。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!