《基于java的医药管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于java的医药管理系统的设计与实现.docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录摘要Abstract.绪论11 系统分析11.1 需求分析11.2 可行性分析12 系统设计22.1 系统开发环境及目标22.2 系统功能结构22.3 系统流程图32.4 逻辑分层结构设计42.5 文件夹组织结构53 数据库设计63.1 数据库分析63.2 数据库设计63.3 数据库创建84 配置文件94.1 配置 web.xml 文件94.2 配置 struts-config.xml 文件104.3 配置 hibernate.cfg.xml 文件105 系统模块设计125.1 主系统管理模块125.2 基础信息管理模块165.3 药品销售管理模块185.4 进货/需求管理模块196 总结
2、21致谢22参考文献23基于 java 的医药管理系统的设计与实现摘要:java 作为一种计算机语言,经过几十年的磨练和完善,有着相当乐观的优越性。与其他计算机语言一样,都提供了可移植性和垃圾回收原理,但与之不同的是,java 不仅具有这些特点,同时还具有网络连接、数据库存储和绘图功能, 集多种优点于一身。正是由于 java 的这些优点,所以本论文主要讲述的是以 java 语言为核心,采用 mySql 数据库储存数据,运用 Hibernate 和 Struts 框架的医药管理系统的设计及应用。此系统流程相对清晰,功能上主要完成对医学药品的管理,其中包括药品以及类别的增删改查,药品库存量的修改,
3、同时也实现了对系统管理员的增删操作。通过后期系统的不断完善和改造,优化了界面显示,修改了系统漏洞,完成了涉及到的所有操作。关键词:java 技术 ;mySql 数据库;Struts 框架;Hibernate 框架Design and Implementation of the medical management system based on javaAbstract:Java as a kind of computer language, after decades of polish and perfect, has a fairly optimistic superiority. Wi
4、th other computer languages, they provides portability and garbage collection mechanism, but in contrast, Java not only has these characteristics, but also have a network connection, database storage and graphics, combines many advantages in one. Because of these advantages of Java, so this thesis i
5、s mainly about medicine management system design andapplication with the Java language as the core, using mySql database to store data, using Hibernate and the Struts framework. Process of the system is relatively clear, the system function mainly completes the management of medical drugs, including
6、 pharmaceutical and categories deleted or changed, drug inventory modified, as well as implementation of the system administrator to add or delete operation. Through the system constantly improves and reforms finally, optimizing the interface display, changing the system vulnerabilities, completing
7、all operations involved.Keywords:Java technology;MySQL database; Struts framework;Hibernate framework绪论伴随着科技时代的不断进步,网络技术在人们的日常生活中的重要性不断提升。由于高科技的飞速发展,人们的日常生活习惯也在发生变化,特别是计算机的大量普及,加快了人们生活节凑的步伐。目前,中国的科技正处在初级阶段, 很多技术还不太成熟和完善,如何能在短时间内提高工作效率是人们首先考虑的问题。针对我国医药管理这方面来说,传统的管理方式相对繁琐,操作复杂,没有科学、完善的方法,不仅耗时而且还浪费人力物力
8、。相对于其他国家而言,针对医药方面的管理研发已有几十年的经验了,体系比较完善。其中也有一些比较著名的系统,例如:退伍军人管理局的 DHCP 系统、美国犹他州的 LDS 医院药品的HELP 系统和麻省总医院药品的COSTAR系统。从医药管理系统发展趋势来看, 由原来的小型化正逐步演化成智能化,又会在一定程度上向集成化转变1。医药管理系统的主要目标是提高工作效率,减轻医院劳动人员的工作强度, 降低在医院药品管理上的资金投入,从而获得更好的社会效益。医药管理系统的主要特点是占用的系统资源较少,所需的计算机技术相对简单,便于操作。主要处理文字和数字数据为主,易于实现。本文主要阐述了依据 java 技术
9、实现的医药管理系统,运用目前比较流行的Struts 框架技术处理逻辑关系。采用Mysql 数据库技术以表的形式储存数据,运用 Hibernate 技术对数据库中数据进行相关操作,并对数据库的创建和设计以及Hibernate 技术的配置做了详细的描述2。1 系统分析1.1 需求分析在当今社会飞速发展的时代,各行各业都在面对着大量的数据信息,医院也不例外,对医药的进销存管理也构成了医院各项管理中比较重要的一部分。面对着每日大量药品的输入和输出,以及众多拥有不同需求的客户,如果采用传统的、非智能化的手工方式来处理所带来的这些数据信息,不仅效率提高不上去,而且还会动用大量的人力物力,增加了医院的开销和
10、资金投入,但却得不到较大的利益。如何解决以上这些问题,那就需要一个比较成熟的、科学的方法。所以,一个完善的医药管理系统不仅可以带来管理人员对药品的快速管理,而且还能在一定程度上也满足了消费者的需求。它应具有以下优点3:(1) 操作界面更加人性化,处理上更加高效。(2) 采用高端的软件技术研发和较长的使用寿命。(3) 可简化工作人员的操作,从而提高工作效率。1.2 可行性分析任何一款软件研发出来,并不是凭空捏造,它应具有社会效益以及可行性。针对医药管理系统来说,它应具有以下可行性4:经济方面:从经济的角度进行评估,该系统的创建和日后的维护,不会耗费大量的资金。不仅如此,该系统设计理念就是节省人力
11、,完善管理水平,提高管理质量,屏蔽管理漏洞,因而此系统所带来的社会经济效益将远远大于开发中的投入。技术方面:从技术的角度进行评估,该系统依托于 java 技术。该语言通熟易懂,技术上可实现跨平台。与此同时,采用 Struts 和 Hibernate 框架,分别完成逻辑操作和数据操作,运行效率高,处理速度快5。通过大量的开发实践证明, 这些技术相当完善,适于此系统的开发。实施方面:从实施的角度进行评估,该系统对硬件配置要求不高,部署又相对简单,操作起来难度不大,普通操作人员很容易应用此系统,不必接受过多的专业知识的培训。2 系统设计2.1 系统开发环境及目标(1) 系统开发环境不同的开发环境,将
12、在一定程度上影响到系统的正常运行。所以有必要给出该系统的开发环境,避免出现不必要的麻烦。运行环境选择如下6:开发环境:Window7 操作系统开发工具:MyEclipse9.0 开发软件Web 服务器:apache-tomcat-6.0.36 容器(2) 系统目标针对当前医院管理的要求,以及从用户体验的角度出发,该系统的制定应具备以下目标7: 系统安全系数高,运行相对稳定。 界面简单但不失美观,操作方便快捷。 完成药品基础信息和用户账号的管理。 能及时的预知药品的销售状况及库存信息。2.2 系统功能结构医药管理系统主系统管理基础信息管理进货/需求管理药品销售管理通过查阅相关书籍和上网搜索资料,
13、从医院管理状况出发,将该管理系统定义为四大功能模块,它们分别是主系统管理、基本信息管理、药品销售管理和进货与需求管理8,其系统的主要功能结构图如图 2-1 所示。用系药药库药药药销户统品品存品品品售账初信类信需进销排号始息别息求货售行管化管管查管管明统理理理看理理细计图 2-1 功能结构图2.3 系统流程图医药管理系统基本信息管理主系统管理管理员登录管 理员药品销售管理进货/需求管理所谓流程图,就是以一种特定的图形符号加上必要的说明来解释某一个工艺过程或管理过程。为了能更直观的说明该系统的管理功能,快速地掌握和了解系统的处理任务,所以,给出该系统各个功能模块的流程图,主流程如图 2-2 所示。
14、图 2-2 系统主流程图以下给出了各个功能模块的流程图,如图 2-3 所示。添加药品查询药品药品信息管理修改药品删除药品基本信息管理添加类别药品类别管理查询类别修改类别添加管理员查询管理员主系统管理密码修改系统初始化添加需求查询进货进货/需求管理删除进货库存修改查询销售明细药品销售管理当日销售明细销售排行统计2.4 逻辑分层结构设计图 2-3 各功能模块流程图在分析该结构设计的之前,首先有必要了解一下 MVC 框架的设计思想。MVC 主要包括三层结构,及 M 层、V 层和 C 层。M 层是模型层,也就是数据层, 其中包括持久层和数据库层,用于对数据的储存和操作,主要涉及到的技术有JDBC 技术
15、和 Hibernate 框架技术;V 层是视图层,是用来显示软件页面,接受用户请求和以某种形式呈现数据,注重数据的显示效果,主要涉及到的技术有 Html 技术和 Jsp 技术,还有 Javascript 及相应脚本框架;C 层是控制层,是用来对 M 层和 V 层的耦合,主要起到逻辑处理作用,捕获用户的请求,并对用户请求进行处理,将所得到的处理结果返回给视图层,并在页面中显示数据9。MVC 架构的请求流程:用户访问Web 页面,发送请求,请求到达控制器处理,控制器通过 DAO 技术访问数据层,将数据取出并将处理结果反馈给用户, 更新用户界面。通过以上功能结构的介绍及对 MVC 框架的了解,可发现
16、该系统是由 4 层组成,并且严格遵循了MVC 架构思想。该 4 层分别是视图层、控制层、持久层和数据库层。视图层也就是用户所能涉及到的操作界面,主要采用 JSP 技术实现,整个页面可添加 Struts 框架当中的标签库或 jstl 标签库。控制层的作用就是协调视图层和数据层,起到中间桥梁的作用,主要采用 Struts 框架技术实现,通过 servlet 组件过滤请求,调用相应的 Action 组件处理请求,通过 forwrad 对象将结果输出到界面。数据库层用来储存数据,本系统采用 Mysql 数据库来实现。持久层是用来操纵数据的,采用 Hibernate 技术将数据从数据库中提取出来,并做相
17、应的操作,如对数据的增删查改。2.5 文件夹组织结构本系统主要运用 MyEclipse 软件编程,采用 java 技术实现。所以,对于文件夹的命名应该按照规范的命名法来实施。在真实的企业开发过程中,编写代码之前,都要系统的制定好一个比较完善的文件夹组织结构,使得整个项目开发思路比较清晰,让编程人员能很快地定位到每一个模块的设计。开发中,文件夹命名的规范化发挥着十分重要的作用。在MyEclipse 软件中,该系统的文件夹组织结构如下所示10:src 目录:是一种可执行文件夹,可存放类包,类包中存放源代码文件,即后缀为 java 格式的文件。com.peng.pojo 包:每一层都是文件夹,采用将
18、域名倒写的方式定义包名。该文件下存放实体类,也就是 java 中常说的 pojo 类。com.peng.mapping 包:用于存放实体关系映射文件(ORM 文件),将实体类通过该配置文件和数据库中的表一一对应起来,找到它们之间的联系。com.peng.util 包:存放自己编写好的工具类,该工具类可以在不同的包中重复使用,起到某些相应的功能,如给密码加密或者读取某文件内容。com.peng.action 包:存放业务处理的类,即 Action 组件。com.peng.interceptor 包:用于存放 interceptor 拦截器,主要作用是对用户请求进行再次拦截,执行时机是在 Acti
19、on 组件之前执行。com.peng.config 包:用于存放配置文件,如后缀为 properties 的文件。可通过 java 中 IO 流进行读取文件内容。com.peng.service 包:用于存放一些服务类,常和 dao 类联合使用。WebRoot 目录:是不可执行的文件夹,用于储存jsp 页面,即浏览网页。3 数据库设计3.1 数据库分析数据库,顾名思义就是一个大型仓库,用来存储大量的数据。它包含所有涉及到的信息,主要囊括用户信息、药品基本信息和类别信息、以及销售明细信息。通过某种对应关系,间接的将所有信息数据联系起来。在真实的企业开发中,数据库往往单独安装在某个特定的服务器上。
20、这样做的目的就是防止大量用户过度频繁的访问数据库,从而造成服务器的瘫痪。不仅如此,这样做还可以提高查询速度,降低服务器的负担。因此,不同的硬件要求, 可能会影响到数据库的性能,以下给出了数据库运行环境的要求:(1) 硬件要求:CPU:要求在 2.8GHz 以上。内存:要求在 2GB 以上。硬盘储存空间:150GB 或者更高。(2) 软件要求:操作系统:Windows 7 操作系统。数据库版本:MySQL5.0 版本。3.2 数据库设计通过以上对该系统的功能结构的分析,将每一个模块所涉及到的信息抽象成一个数据实体对象,将这些对象通过数据表的形式储存在数据库中。为了能更好的对数据库中的结构,下面简
21、单介绍一下数据库的相关知识。数据库中的数据类型主要包括整型(int)、浮点型(double)、字符型(varchar)、日期类型(datetime)。定义类型时含有数字,说明是数据的精确度或字符的长度。数据库中的约束条件是用来给数据表中的某些列添加限制,主要包括有五 种,分别为主键约束(Primary key)、外键约束(Foreign key)、唯一约束(Unique)、非空约束(not null)和检查约束(Check)11。 前三种是最为常用的约束条件,它们各自的简写分别为 PRI、MUL 和 UNI,作用如下: 主键约束:主键是用来区分一个数据表中的每一行数据,主键的特点是唯一性和不能
22、为空值,因而不同的行具有不同的主键。主键的生成方式往往采用数据库自增的方式 auto_increment,随数据的添加自增序列号。 外键约束:外键是定义在两张表的不同列或同一张表中的不同列,用于联系两个列之间的关系,起到关联作用,保证数据的一致性,往往将一张表的主键作为另一张表的外键。含有外键的表是主表,不含外键的表是子表。 唯一约束:此约束是说明该列的每一个数值都是唯一的,不能重复。定义唯一约束的主要目的是,在没有主键所定义的其他列中不能重复输入相同列 值。以下给出了几种实体对象的表结构:(1) 用户对象所对应的表结构,如表 3-1 所示:属性数据类型是否可为空键值默认值额外信息idint(
23、11)username varchar(50) password varchar(50) create_time datetimeNO NO NOYESPRIUNINULL NULL NULLNULLauto_increment表 3-1 用户对象数据表(2) 药品对象所对应的表结构,如表 3-2 所示:表 3-2 药品对象数据表属性数据类型是否可为空键值默认值额外信息idint(11)NOPRINULLauto_incrementmed_novarchar(100)NOUNINULLnamevarchar(100)NONULLfactory_addvarchar(100)YESNULLdes
24、criptiontextYESNULLpricedoubleNONULLmed_countint(11)YESNULLreq_countint(11)YESNULLphoto_pathvarchar(255)YESNULLcategory_idint(11)YESMULNULL(3) 销售明细对象所对应的表结构,如表 3-3 所示:表 3-3 销售明细对象数据表属性数据类型是否可为空键值默认值额外信息idint(11)NOPRINULLauto_incrementsell_namevarchar(200)NONULLsell_pricedoubleNONULLsell_countint(11)
25、NONULLsell_timedatatimeNONULLmed_idint(11)YESMULNULLuser_idint(11)YESMULNULL(4) 药品类别对象所对应的表结构,如表 3-4 所示:属性数据类型是否可为空键值默认值额外信息id namedescriptioncreate_timeint(11) varchar(100) textdatetimeNO NO YESYESPRINULL NULL NULLNULLauto_increment表 3-4 药品类别对象数据表在数据库中创建以上各表的时候,应该明确定义以上每个字段,缺少其中的某个字段都有可能提示创建失败等信息。同
26、时,应注意数据的类型和精确度,以及约束条件和附加信息。3.3 数据库创建利用 SQL 语言(结构化查询语言)将所需的数据库和数据表以语言脚本的形式生成,在 MySQL 软件客户端的命令行界面输入指令即可完成创建过程。如: 在 E 盘下创建了一个“E:medicine.sql”的数据库脚本,在命令行界面执行指令“sourceE:medicine.sql”后,即可完成创建过程。另外一种创建方式,可将SQL 脚本添加到 MyEclipes 软件的项目中,通过软件自带的“数据库连接插件” 完成数据库的创建,一般不采用这种形式。4 配置文件4.1 配置web.xml 文件web.xml 文件又叫做部署描
27、述文件,它的主要作用就是初始化配置信息。在该文件中可定义过滤器对请求过滤;可定义监听器对事件进行监听;也可定义servlet 组件实现逻辑处理等等一些信息12。 此文件的具体作用如下:(1) 可以定义某个首选页面:index.jsp当你访问某个网站的时候,首次浏览到的页面就是 index.jsp 页面。(2) 为 Struts 组件 Servlet 命名:actionorg.apache.struts.action.ActionServlet这里由 Struts 框架的底层原理来实现,该组件由 Struts 框架提供的 jar 包中的类 ActionServlet 来完成,命名为 action
28、。(3) 为 servlet 定制统一资源定位器(URL):action*.do“/*”代表对所有的请求字符串进行过滤, “*.do”代表对请求以“.do”结尾的请求过滤。通过 servlet 的名字找到以上命名之后的组件,例如:通过action 名字找到 ActionServlet 类。4.2 配置struts-config.xml 文件struts-config.xml 文件是 Struts 框架的核心配置文件。通过该文件中的配置信息,可调用与请求资源相对应的 Action 组件,并返回所需的执行结果,实现页面的跳转。由于 struts-config.xml 文件当中的配置相对较多,所以不
29、再一一列举其中的配置信息,只对其中最为常用的重点标签和属性做详细介绍,如下:(1) 标签:该标签的作用是用来配置 web 应用所需的数据源,最多含有一个,该标签中可定义多个子标签。(2) 标签:该标签的作用是用来定义具体的数据源。可以有任意个, 含有两个重要属性 key 和 type,key 的作用是区分不同的数据源,type 的作用是为数据源的使用提供实现类,如连接池、JDBC 技术的类库。(3) 标签:该标签作用在下,主要作用是设置数据源 的属性,如数据源用户、数据源密码和数据源 url 等等。(4) 标签:该标签的作用是用来配置 From Bean 的,From Bean 实际上就是一个
30、 java Bean,是对表单的封装,struts 会通过 setter 方法将表单中输入框的值设置到 From Bean 中同名的属性上。含有两个重要的属性 name 和 type,分别用来定义 From Bean 的名字和实现类。(5) 标签:该标签的主要作用是用来定义全局的 forward 的,所谓的 forward 就是实现页面的跳转,即分发页面的作用。(6) 标签:该标签的作用是用来定义 Action 组件的。在配置文件中最多含有一个,其中可含有多个子标签。(7) 标签:该标签含有 path、type 和 name 三个重要属性。path 的作用是用来指定访问的路径,以“/”开头;t
31、ype 用来指定处理逻辑的 Action 组件;name 是用来指明与之关联的 From Bean 的名字。(8) 标签:该标签定义在标签中,作用就是实现页面的跳转。含有 name 和 path 属性,作用分别为接受处理结果和指定要跳转的页面。4.3 配置hibernate.cfg.xml 文件hibernate.cfg.xml 文件是 Hibernate 框架中的核心配置文件,用于连接数据库, 文件内容一般采用工具自动生成。该配置文件中一般提供如下信息:(1) 标签:提供session 工厂,用于生产session 对象,需要通过property 标签注入数据源信息。(2) 标签:定义数据库
32、的连接信息,如 driver_class、url、username、password 和 dialect。dialect 叫做方言,Hibernate 框架可以通过 dialect 属性匹配任意类型的数据库,如 Oracle、Mysql 或者 DB2 等数据库。(3) 标签:该标签的作用是加载 ORM 映射文件,以便通过映射文件将 java 中的实体类和数据库中的数据表对应起来。5 系统模块设计5.1 主系统管理模块主系统管理模块主要包括管理员账号管理和系统初始化,如果细分的话,可分为添加和删除管理员,修改管理员密码和查看所有管理员。由于业务需求,任何管理员登录成功后,都可以进行添加和删除管理
33、员的操作,所以操作时请谨慎操作,以免造成不必要的麻烦。修改管理员密码时,只能对当前用户密码做更改,不可更改其他管理员信息。前台浏览器端采用到的技术主要包括 Jsp 页面技术和 javaScript 技术,后台服务器端采用两大框架处理业务逻辑和数据逻辑。以下给出添加管理员的页面, 如图 5-1 所示。图 5-1 添加管理员在页面代码中,用户名采用 username,密码采用 password,这样即可以和java 逻辑处理代码中的 User 类属性相对应,又保证代码信息的一致性,减少开发难度系数。其中,定义用户对象的主要代码如下:public class User private int ;/i
34、d 号 private String username; /用户名private String password; /密码private Date createTime; /创建日期public Date getCreateTime() /获取创建日期return createTime;public void setCreateTime(Date createTime) /设置创建日期this.createTime = createTime;public int getId() /获取idreturn id;public void setId(int id) /设置idthis.id = id
35、;public String getUsername() /获取用户名return username;public void setUsername(String username) /设置用户名this.username = username;public String getPassword() /获取用户密码return password;public void setPassword(String password) /设置用户密码this.password = password;从代码中可以看出,User 类含有四个私有属性,并为每个属性提供公有的get 和 set 方法,这样可以通
36、过方法来访问类的属性。这种定义类的方式符合 java Bean 规范。所谓的java Bean 是一种软件开发中常常遵守的规范,它要求类的属性尽量私有化,方法尽量公有化,并提供属性的 get 和 set 方法。所谓退出系统,就是返回到该系统的登录界面,在此界面中用户可进行登录操作,如图 5-2 所示。图 5-2 用户登录界面用户登录处理,是从页面中获取用户名以及密码信息,将该信息传递给后台处理,通过 Hibernate 框架技术访问数据库中的用户信息,并进行比对,正确则可登入系统,否则提示密码或用户名错误,其主要代码如下:public User login(String userName,St
37、ring password)User user = null;try session = HibernateFilter.getSessio(n);/获取Session对象 session.beginTransaction();/开启事物/HQL查询语句String hql = from User u where u.username=? and u.password=?; Query query = session.createQuery(hql) /创建Query对象.setParameter(0, userName)/动态赋值.setParameter(1, password);/动态赋
38、值user = (User)query.uniqueResult();/返回User对象session.getTransaction().commit();/提交事务 catch (Exception e) e.printStackTrace();/打印异常信息session.getTransaction().rollback(); /回滚事务return user;凡是能登录成功的用户,都能成功修改个人的密码,根据原密码和新密码即可完成操作,操作页面如图 5-3 所示。图 5-3 修改当前用户密码此修改密码操作的代码相对来说编写有一定的难度,代码如下所示:/ 修改密码public Actio
39、nForward modifyPassword(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception UserForm uf = (UserForm) form; if (uf != null) /从session之中获取User对象User user = (User) request.getSession().getAttribute(user);/确认两次密码是否一致if (user != null & uf.getOl
40、dPassword().equals(user.getPassword() if (uf.getPassword().equals(uf.getRePassword() UserDao dao = new UserDao(); user.setPassword(uf.getPassword(); dao.saveOrUpdate(user);else/密码错误ActionMessages errors = new ActionMessages(); errors.add(,new ActionMessage(user.oldpassword.error); this.saveErrors(re
41、quest, errors);return mapping.findForward(error);return mapping.findForward(userFind);5.2 基础信息管理模块基础信息管理模块主要包括药品信息管理和药品类别管理。其中,药品信息管理主要包括药品的添加,药品的查询以及药品的删除等基本操作,每一位管理员可对药品信息做相应更改。技术上和主系统管理模块一致,采用 Struts 框架和 Hibernate 框架的集成。由于页面信息量比较大,涉及到的页面数量较多,所以,只能给出部分页显示。以下给出查看所有药品的页面显示效果图,点击左栏选中多个药品,可做批量删除,点击右边栏
42、中的选项可进行其他操作,如图 5-4 所示。图 5-4 查看所有药品点击药品名称可查看该药品的详细信息,如图 5-5 所示。图 5-5 药品详细信息点击右栏中的“进货”操作可进入进货页面,在此页面可更改进货需求数量, 如点击编号为“abc001”的药品的进货链接,可以看到该药品的当前数量,更改数量为 100,则此药品所对应的需求数量由原来的 0 更改为现在的 100,如图 5-6 所示。图 5-6 更改药品的需求数量药品类别管理主要包括类别的添加、类别的删除以及类别的查询。点击查看类别,可列出所有的药品类别,如图 5-7 所示。图 5-7 查看所有药品类别以下是类别添加的效果图,按照名称和描述
43、来添加类别。输入类别名称点击提交即可完成操作,如图 5-8 所示。图 5-8 添加药品类别类别添加的相应代码如下所示。/添加或修改类别public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception /获取类别信息CategoryForm cf = (CategoryForm)form;/创建Category对象Category c = new Category(); c.setName(cf.getName();c.setDescription(cf.getDescription(); c.setCreateTime(new Date(); if(cf.getId() != 0)c.setId(cf.getId();CategoryDao dao = new CategoryDao(); dao.saveOrUpdate(c); / 添加类别return mapping.findForward(pag
限制150内