Skip to content

Latest commit

 

History

History
117 lines (62 loc) · 6.26 KB

README.md

File metadata and controls

117 lines (62 loc) · 6.26 KB

BOS

使用SSH框架完成的一个物流管理系统

#重点知识点总结:

1、maven构建项目,使用MyEclipse工具开发运行。

  • pom.xml编写:导入相应的jar包,可以去网上搜索坐标。
  • 项目的拆分:按照功能模块或者分层结构进行拆分。
  • 使用tomcat-maven-plugin插入运行项目(内嵌tomcat7:run运行)

2、Git进行版本控制。

3、主页设计:使用EasyUI,使用了有according、tabs、ztree菜单制作,点击ztree菜单,动态添加tab选项卡。

4、通用Dao组件设计,基于反射和泛型技术,结合HibernateTemplate可以完成任何表的增删改查。

  • 使用findById根据id查询,findAll查询所有,findByCriteria面向对象条件查询、findByNameQuery通过命名查询(在hbm中配置),使用pageQuery分页查询,结合lucene索引库查询。

5、使用PowerDesigner数据库建模。通过使用PDM来进行数据库设计,生成sql建表语句。通过Hibernate反转生成,获得PO类和hbm映射。

6、项目分层。分为表现层、业务层、持久层,各层之间面向接口编程,所有实现类用spring进行管理,实现接口和实现类解耦和,便于代码维护和扩展。在各层内部,提供抽象类实现代码复用。

7、自定义拦截器控制登录访问,使用struts的通配符方法,使用默认处理类、跳转对应JSP。

  • JSP不再WEN-INF下,控制访问必须使用Filter。

8、密码修改功能。使用Ajax进行客户端和服务器交互流程。浏览器通过Ajax引擎提交请求,引擎将请求发送到服务器,服务器处理请求获得结果,将结果转换json格式,放回Ajax引擎,Ajax引擎调用页面中的回调函数,通过JS代码更新页面。使用Firebug进行调试。

9、数据表格datagrid的使用,数据表格显示、分页查询、条件查询、排序功能。对HTML数据使用,或者通过JS定义属性加载远程json数据来显示数据。

$('#grid').datagrid({
	column:列信息,
	toolbar:工具栏,
	url:数据,
	pageination:分页工具条
})

10、自定义分页组件。PageReqBean和PageRespBean封装了分页查询请求和响应参数。

  • 请求参数:当前页码、每页记录条数、查询条件
  • 响应参数:总记录数、当前页面数据

MySql使用limit关键字:limit 0,10 Oracle使用rownum。

 select *from(select rownu
m rw,a.* from (select *from emp )  a where rownum <16) b where b.rw>10;

11、POI对excel文件的读写,使用OCUpload完成了一键上传的功能。区域信息的批量导入。结合Pinyin4j生成简码和城市编码。

12、分区信息的组合查询,使用DetachedCriteria进行组条件查询,多表关联需要起别名。查询结果导出,生成excel文件导出,使用struts2的stream的结果集。

13、Hessian的使用。。Hessian传输二进制数据,可以跨平台,相比WebService,使用Hessian传输效率更高。调用另一个客户信息系统的数据来使用。根据CRM系统提供的业务接口,获得客户信息,完成定区关联客户的功能。

14、受理配送业务,实现自动分单操作。通过Hessian调用客户数据匹配分区信息,关联取派员,生成工单信息。

15、工作单管理。快速录入,datagrid行编辑效果,使用Ajax提交编辑效果,为了提高模糊查询性能。使用了lucene全文索引库,通过HibernateSeach框架建立,还加入了IK分词器。

  • 使用lucene提高效率:数据库的模糊查询用的是like,没有全文索引,每条信息分别去匹配查找内容。而使用索引词库,找到对应的记录id,再根据id去查找。
  • lucene底层存储结构。

16、使用JBPM工作流引擎。 如果流程已经写好了,需要在流程中,新增一个节点,如何做。

  • 1、修改流程图,重新发布,版本+1,再次启动该流程,使用新的流程定义。但是原流程无法使用新的流程定义。

  • 2、修改已经发布了的流程定义,数据保存在jbpm4——lob表,是二进制blob,先通过数据读取blob,成为InputStream,使用dom4j加载到内存,然后为流程添加新节点,将内存回显lob表。

泳道的作用

组任务和个人任务的区别

jbpm如何保存用户和组信息

如何在流程中涉及一个循环结构:使用Decision节点、动态流转。

会签功能:使用fork节点、动态分支(子流程实例)。

17、JBPM开发流程。流程设计-流程定义发布、启动流程、组用户管理、任务不同和form表单也不同-任务的办理-组任务-个人任务-流程实例监控。 不同的任务跳转到不同的form任务办理页面。

18、自定义权限模型。数据表设计(权限、角色、用户)。授权时使用的是ztree树形结构,自定义右键菜单等。

  • 权限拦截原理:自定义注解、代理、反射的权限控制模型。
  • 根据用户权限,动态生成菜单。
  • 自定义标签,控制页面中功能按钮的显示。

19、结合Ehcache二级缓存优化。配置二级缓存,对用户关联角色、关联权限进行优化。

Session的缓存,只能在一个线程中使用,在开发中,将Session与线程绑定,一个线程对应一个Session,Session中数据不能在多次用户请求,不能共享,使用SessionFactory缓存,实现多个用户,多次请求之间共享数据。

存储以对象散装数据,访问二级缓存的数据,查询条件是id。

查询缓存和二级缓存的区别? 二级缓存缓存的是整个对象属性数据,查询条件是id,查询缓存可以缓存任何查询结果,查询条件是sql语句。

二级缓存:1、引入jar包,2、映入配置文件,3、在hibernate开启二级缓存。

每个用户登录的时候,需要将用户具有的角色和权限查询出来,保存在session中,用户具有角色信息会重复,角色对应权限信息也会有重复。

缓存:类级别和缓存级别

集合级别的缓存需要依赖类级别的缓存。

20、自定义拦截器控制异常。在web.xml中配置404.在struts中配置,使用拦截器对不同的一场进行不同的处理,记录日志。在业务层和数据层,自定义相关一场的业务控制。对于Ajax请求,进行不同异常的处理。