[精品]基于ssh的中小企业在线资产管理系统设计与开发内容摘要:
ER图 销售明细实体映射的数据表为 tb_selldetail,资产对象及操作用户的多对一关联关系,映射后的数据表结构如 表 : 表 销售明细实体数据表 属性 类型 是否为空 自动生成 描述 id Integer Not null Auto 主键 sellName Varchar Not null 产品名称 sellPrice Double Not null 销售单价 sellCount Integer Not null 销售数量 sellTime Datetime Not null 销售时间 medid Integer 资产 id userid Integer 用户 id 用户实体用于封装管理员的基本信息,如登录的用户名、密码等属性, 用户实体ER图如图 : 图 用户实体 ER图 用户实体所映射的数据表为 tb_user,其结构如表 : 表 用户实体数据表 属性 类型 是否为空 自动生成 描述 id Integer Not null Auto 主键 username Varchar Not null 用户名 销售明细 单价 用户 id 销售时间 编号 销售数量 资产 id 产品名称 用户 编号 密码 创建时间 用户名 password Varchar Not null 密码 createTime Datetime 创建时间 系统中各 实体之间也有相应的关系, 资产信息与资产类别为多对一的关联关系,一个类别中包含多个资产对象;资产信息与销售明细为一对多关联关系,多个销售明细对应一个 资产 对象;销售明细与用户之间为多对多关联关系,多个销售 明细信息对应多个用户。 实体对象之间的关系如图 : 多对一 一对多 多对一 图 实体对象之间的关系 公共类设计 面向对象的开发模式中可以简化程序中的代码,提高程序的可读性。 在此系统开发过程中,某些功能被反复调用,故将该功能 抽取出来封装为一个类作为公共类,在需要此功能时通过此类进行实现, 公共类的实质是代码的重用的一种方式。 Hibernate 过滤器 在 Web项目中,以普通方式使用 Hibernate 将无法解决 Hibernate 延迟加载。 当有一个业务请求查询数据时,首先要开启 Session对象 [12],然后 Hibernate 对数据进行查询,再关闭 Session对象,最后通过 JSP 页面来显示数据。 在这一过程中,如果查询数据时使用了延迟加载,当 JSP 页面显示数据信息时, Hibernate 将抛出异常信息,因为此时Session已经关闭, Hibernate 不能再对数据进行操作。 通过过滤器管理 Hibernate 的 Session对象则可以避免此问题。 在 Web容器启动时,过滤器被初始化,它将执行 init()方法,在后续的操作中不会再次被执行;而当容器关闭时,过滤器将执行 destroy()方法。 这两个方法恰好符合 SessionFactory对象的生命周期,在运行期间只执行一次操作,可用于实例化及销毁 SessionFactory对象。 对于 Session对象的关闭操作,可以在业务逻辑处理结束后、 response请求转发到 View 层 (JSP页面 )之前进行。 此代码将其封装在 HibernateFilter 类 [13]中,此类继承了 Filter 类,它是一个过滤器。 为了保证线程安全,将 Session对象存放于 ThreadLocal 对象中,当用到一个 Session对象时,首先从 ThreadLocal 中获取。 在无法获取的情况下才会开启一个新的 Session对象。 同时,为了保证 Session 对象能在 response 请求转发到 View 层之前被关闭,采取try… catch语句对 session进行关闭。 其关键代码如下: public class HibernateFilter implements Filter{ private static ThreadLocal threadLocal = new ThreadLocal()。 private static SessionFactory factory = null。 …… 资产类别 资产信息 销售明细 用 户 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { (request, response)。 } finally{ Session session = (Session)()。 if(session != null){ if(()){ ()。 } ()。 } } } public void init(FilterConfig arg0) throws ServletException { //初始化 SessionFactory try { Configuration cfg = new Configuration().configure()。 factory = ()。 } catch (Exception e) { ()。 } } public static Session getSession() { Session session = (Session)()。 if (session == null) { session = ()。 (session)。 } return session。 } } SuperDao类 SuperDao类为此系统中所有数据库操作类的父类,此类中封装了数据库操作的常用方法,在此类中,由于 Hibernate 对数据库的操作都需要用到 Session接口,类中定义了一个 protected类型的 Session对象 ,为其子类提供方便。 save()方法及 saveOrUpdate()方法都用于保存一个对象,其入口参数均为 Object类型。 其中 saveOrUpdate()方法比 save()方法更智能一些,可以根据实体对象的标识值来判断 保存还是更新操作。 SuperDao类中使用这两个方法对实体对象进行保存及更新操作,其关键代码如下: public class SupperDao { protected Session session = null。 public void save(Object obj){ try { session = ()。 ()。 (obj)。 ().mit()。 } catch (Exception e) { ()。 ().rollback()。 } } public void saveOrUpdate(Object obj){ try { session = ()。 ()。 (obj)。 ().mit()。 、 } catch (Exception e) { …… } } 删除操作的方法为 delete(),入口参数为 Object()类型,此方法通过 Session 接口的delete()方法进行实现,其关键代码如下: public void delete(Object obj){ try { session = ()。 ()。 (obj)。 ().mit()。 } catch (Exception e) { …… } } Hibernate 的 HQL 查询语言提供了更为灵活的查询方式,在这个超类之中应该加入 HQL的操作方法,其中 findByHQL()方法用于根据指定的 HQL查询语句查询结果集,deleteByHQL()方法用于根据指定的 HQL查询语句进行删除操作。 关键代码如下: public List findByHQL(String hql){ List list = null。 try { session = ()。 ()。 list = (hql) .list()。 ().mit()。 } catch (Exception e) { …… } return list。 } public void deleteByHQL(String hql){ try { session = ()。 ()。 (hql) .executeUpdate()。 ().mit()。 } catch (Exception e) { …… } } Hibernate单值检索在查询后返回单个对象,当返回的结果包含多条数据时, Hibernate将抛出异常。 此种操作可用于查询单条数据,在 SupperDao 类中,单值检索的方法为uniqueResult(),此方法的入口参数为 HQL 查询 [14]语句及查询条件,其中查询条件为Object[]数组类型,用于装载查询语句中的参数。 比如 HQL语句“ from Property m where =?” ,此时即可通过参数 where 对其进行动态赋值。 public Object uniqueResult(String hql,Object[] where){ Object obj = null。 try { session = ()。 ()。 Query query = (hql)。 if(where != null amp。 amp。 0){ for (int i = 0。 i。 i++) { if(where[i] != null){ query = (i, where[i])。 } } } obj = ()。 ().mit()。 } catch (Exception e) { …… } return obj。 } findPaging()方法用于分页查询,此方法的入口参数有 4个,其中参数 hql 为 HQL查询语句,它允许传入参数中带有占位符“ ?” 的 HQL语句;参数 offset为查询结果集的起始位置;参数 length为查询结果集的偏移量,也就是返回数据的条目数;参数 where为查询条件,属于 Object[]数组类型,用于装载 HQL语句中的参数。 关键代码如下: public List findPaging(String hql,int offset,int length,Object[] where){ List list = null。 try { session = ()。 ()。 Query query = (hql)。 if(where != null amp。 amp。 0){ for (int i = 0。 i。 i++) { if(where[i] != null){ query = (i, where[i])。 } } } list = (offset).setMaxResults(length) .list()。 ().mit()。 } catch (Exception e) { …… } return list。 } }\ BaseAction类 BaseAction 类是业务层,有一个超类对象,继承了 Struts 的 DispatchAction 类 [15],同时还为子类对象提供公用方法。 DispatchAction类继承了 Action类,此类在处理请求时首先要执行 execute()方法,然后通过控制器再转发到相应的方法进行业务处理。 此类。[精品]基于ssh的中小企业在线资产管理系统设计与开发
相关推荐
TOPDOWN 的设计思想简介 自上而下的设计方法,就是从 系统总体要求出发,自上而下地逐步将设计美容细化,最后完成系统硬件的整体设计,其从总体行为设计开始到最终逻辑综合,形成网络表为止。 在利用 HDL 的硬件设计方法中,设计者将自上而下分为三个层次对系统硬件进行设计。 ( 1)第一层次是行为描述。 所谓行为描述,实质上就是对整个系统的数字模型的描述。 一般来说
器 ”是虚拟仪器概念最简单也是最本质的表述 .虚 拟仪器离不开计算机控制 ,软件是虚拟仪器设计中最 重要和最复杂的部分 . LabVIEW(LaboratoryVirtualInstrumentEngineer ingWorkbench,实验室虚拟仪器工作平台 )是一种 图形化的编程开发环境 ,具有传统语言的编程开发 , 调试工具 ,其最大的特点就是图形化的编程语言 ,易
int judge_time(char a[])。 /*判断时间 是否合法 , 不合法返回 0,合法返回 1*/ define M 10 define N 5 /*仓库负责人姓名 */ 第 13 页 共 13 页 学生简历管理系统 define principal_name1 刘德华 define principal_name2 张学友 define principal_name3 郭富城
械伤害 使用空压机、角磨机等机械设备存在缺陷,操作方式不正确等。 触电 电气设备及线路漏电保护失效,操作人员操作失误。 6 定位及连接 物体打击 构件放置不规范,工具使用不正确,高空坠物等。 起重伤害 吊具、 捆绑方式不符合要求,绳索、吊具存在缺陷或选择错误操作,指挥人员失误。 高处坠落 穿硬底鞋、高空作业面未满铺竹跳板,照明不足,操作人员未系安全带等。 灼烫 劳保着装不当而引起的电弧灼伤
2、右(气温低于 12时,则要 56 天),会从干枯的菌柄上长出大量的小白点(子实体原基)。 当菌柄长高 23 厘米时,高度平整,菌盖大小一致。 直径 23 毫米时,要拉直塑料袋口。 如果相对湿度大,或有的菌柄较粗不易干枯,压倒后不会再分生出小菌蕾,第二天仍从菌柄上长出菌盖,在这种情况下,菇也会比原来长得多而密,菌柄的高度也较整齐一致,当菌柄长至 10 厘米左右时,若空气相对湿度低于 85