内容关键词:GitBook开发环境搭建、规范约定
知识来源:720科技
开发环境搭建:
MySql: 数据库
jetty: 开发服务器
Tomcat: 应用服务器
Git: 版本管理
Eclipse: 开发IDE
Navicat Model: 建模工具
Navicat for MySQL: 数据库客户端
Jdk7+
Mysql5.5+
Elasticsearch2.4.0
参考 铭飞环境配置手册
JDK7
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
Maven
http://maven.apache.org/download.cgi
Redis
https://redis.io/download
Elastic Stack
https://www.elastic.co/downloads
规范约定:
代码分层就是让每一块代码专注于自己功能的实现:比如持久化层就只关心持久化的功能,而不取关心实体层那里应该有多少属性。
目前用到的分层有
实体层:entity
一个自定义的数据类型持久化层:dao
持久化层它只关注实体化的工作,是接口实现层:impl
实现层关注如何实现接口通用工具:util
该层包含一些基础的公共工具业务层:biz
业务层关注一个功能的具体业务,比如注册时你要判读这个用户是否是已经注册过,这个用户填写的资料是符合规范等等控制层:action
控制层会调用业务层,实现一个具体的功能,这个功能可能是调用了好几个业务层,并且会提供方法访问地址。每个层次向外公开接口,但是隐藏内部细节
下一层为上一层服务,但不使用上层的服务
不同层之间通过实体类传输数据
统一采用小写字母,通过每个单词之间使用下划线分割
表名——模块名业务名,例如:铭飞的cms模块里面的文章,表名 cms_article;字段名——表名加字段名,例如:文章的内容,字段名article_content;外键——fk_字段名,例如:文章的主键,fk_basic_id,推荐使用业务功能去实现主外键的业务;索引——idx_字段名,例如:文章的标题,idx_basic_title;主键——pk_字段名,例如:文章的编号,pk_basic_id;项目的包结构统一采用 组织域名.模块名 的方式,例如:铭飞的basic模块 net.mingsoft.basic ,mdiy模块 net.mingsoft.mdiy,
以下描述的都是在 组织域名.模块名 下创建
实体 entity 对应包 组织域名.模块名.entity持久化 dao 对应包 组织域名.模块名.dao业务 biz 对应包 组织域名.模块名.biz 业务 biz 实现 对应包 组织域名.模块名.biz.impl控制 action 对应包 组织域名.模块名.action web 访客访问 对应包 组织域名.模块名.action.webpeople 会员访问 对应包 组织域名.模块名.action.people常量 constant 对应包 组织域名.模块名.constant资源 resources 对应 组织域名.模块名.resources视图页面统一存放在 WEB-INF 文件夹,例如:铭飞的basic管理 列表页WEB-INF/manager/basic/index.ftl 表单页WEB-INF/manager/basic/form.ftl
以下描述的是三种场景下的继承,普通模块已经存在通用字段定义,如:id、createBy、createDate等,更详细的参考实体的介绍
basic的扩展模块(即basic模块+新模块组合成新的模块),继承com.mingsoft.basic.entity,BasicEntity;非basic扩展模块,但是需要区分应用数据(多站点),继承 com.mingsoft.basic.entity.BaseEntity;普通模块,继承 com.mingsoft.base.eneity.BaseEntity;JsonFormat :出参
时间类型要在属性之上添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")和 @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")注解。
注意事项:在实体中运用了时间的主界,在返回数据的list.do的方法中就避免用this.outjson 的方式返回数据,从而导致DateTimeFormat注解无效,在dao中resultmap避免用mybits的collection 和 association中的select属性去查询相关数据(暂时不支持)
相关实例:
底层dao对CURD已经实现,如果模块是简单的CURD那么dao不需要编写代码,只需要在xml进行对应方法的SQL进行编写即可
继承 com.mingsoft.base.dao.IBaseDao
INewsDao.xml
XML对应方法
saveEntity 对应 insert SQL语句updateEntity 对应 update SQL语句getEntity 对应 select SQL语句 ,当前实体为参数查询条件getByEntity 对应 select SQL语句,实体ID为查询条件deleteEntity 对应 delete SQL语句,实体为参数条件删除delete 对应 delete SQL语句,实体ID批量删除queryAll 对应 select SQL语句,查询所有query 对应 select SQL语句,实体为参数条件查询以下描述的是二种场景下的继承,底层对CURD进行了实现
basic的扩展模块(即basic+新模块组合成新的模块),需要继承 com.mingsoft.basic.biz.IBasicBiz普通模块,需要继承 com.mingsoft.base.biz.IBaseBiz;业务主要分接口类与实现类,接口用大写i 头Biz结尾,实现类以Impl结尾,例如:表名为news对应INewsBiz.java、INewsBizImpl.java
继承 com.mingsoft.base.action.BaseAction
以下描述的是二种场景下保存、更新使用
basic的扩展模块(即basic+新模块组合成新的模块),在保存与更新、删除必须调用父类的save、update方法,例如:扩展basic模块的业务对应调用 saveBasic、updateBasic、deleteBasic;普通模块,在保存与更新、删除的时候直接调用底层的 saveEntity、updateEntity、delete方法以Action结尾,例如:表名为news对应NewsAction.java;
以下描述各个方法的命名,所有方法的传递推荐采用模块实体方式
index 模块主页list 模块数据列表form 模块编辑表单get 获取模块数据save 保存delete 删除update 更新通过在方法上使用@RequiresPermissions注解,注解的值为模块编码的值, 如:@RequiresPermissions("article:save")。
表示文章模块的保存功能的权限控制。
使用<@shiro.hasPermission name="xxxx:xxxx">标签进行视图显示控制,如:
<@shiro.hasPermission name="article:save"><@ms.panelNavBtnAdd title=""/></@shiro.hasPermission>
代表当前人员拥有”article:save“权限功能的人员,才能看见当前功能,否则将会被隐藏。
