当前位置:城玮文档网 >作文大全 > 开发规例文档

开发规例文档

时间:2022-07-19 10:55:04 来源:网友投稿

 开发规范

  当前版本:<版本号 v1.0> 修改日期:<2020-07-01 > 文档状态:正式 作者:

  授权人:

 :

  签名(Signature)

 日期(Date)

  签名(Signature)

 日期(Date)

  签名(Signature)

 日期(Date)

 2020 年7 月1 日

 ii 文档信息 文档名 称 开发规范手册 作

 者

 类

 别 内部 子 类 别

 文件名称

  摘

 要

 Java 企业应用 开发规范 修订历史 (REVISION HISTORY) 版本号 日期 修改人 审阅人 摘

 要 1.0 2020-2-4 Xxx

 创建文档,完成命名规范部分修改

 I 目 目

 录

 1.

 规范介绍 .......................................................................................................................... 3

 2.

 系统构成 .......................................................................................................................... 4

 2.1.

 整体结构 ..................................................................................... 错误! 未定义书签。

 2.2.

 模块项目结构 ............................................................................................................ 4

 2.3.

 项目目录结构 ............................................................................................................ 4

 3.

 命名规范 .......................................................................................................................... 5

 3.1.

 项目命名规范 ............................................................................................................ 5

 3.2.

 包命名规范 ................................................................................................................ 5

 3.2.1.

 产品模块包命名 ................................................................................................ 6

 3.2.2.

 包类型命名 ........................................................................................................ 6

 3.3.

 类名 ............................................................................................................................ 6

 3.4.

 方法名命名 ................................................................................................................ 7

 3.5.

 属性名命名 ................................................................................................................ 7

 3.6.

 常量命名 .................................................................................................................... 7

 4.

 注释的标准 ...................................................................................................................... 7

 4.1.

 类的注释 .................................................................................................................... 7

 4.2.

 业务服务方法的注释 ................................................................................................ 8

 4.3.

 关键属性的注释 ........................................................................................................ 8

 5.

 JSF UI 的规范 ................................................................................................................ 10

 5.1.

 布局规范 .................................................................................................................. 10

 5.2.

 样式规范 .................................................................................................................. 10

 5.3.

 标准组件 .................................................................................................................. 11

 5.4.

 统一命名约定 .......................................................................................................... 11

 5.5.

 典型页面流程 .......................................................................................................... 11

 5.5.1.

 列表查询页面 .................................................................................................. 11

 5.5.2.

 简单实体创建页面流 ...................................................................................... 13

 5.5.3.

 带 Tab 的页面 .................................................................................................. 14

 6.

 服务层规范 .................................................................................................................... 15

 6.1.

 服务层设计规范 ...................................................................................................... 15

 6.2.

 Transaction 控制 ...................................................................................................... 15

 6.3.

 数据库访问层的规范 .............................................................................................. 15

 6.4.

 数据库访问的规范 .................................................................................................. 15

 6.5.

 DAO 规范 ................................................................................................................ 16

 7.

 日志 ................................................................................................................................ 18

 7.1.

 日志的级别 .............................................................................................................. 18

 7.2.

 日志的内容 .............................................................................................................. 18

 8.

 异常处理的规范 ............................................................................................................ 18

 9.

 权限管理 ........................................................................................................................ 20

 9.1.

 权限管理框架 .......................................................................................................... 20

 9.2.

 权限模型 .................................................................................................................. 20

 9.3.

 UI 功能点资源 ......................................................................................................... 21

 10.

 附录 – 开发环境的准备和编程指南 .......................................................................... 22

 10.1.

 开发环境 .............................................................................................................. 22

 10.1.1.

 开发工具 ...................................................................................................... 22

 10.1.2.

 版本管理工具 .............................................................................................. 22

 II 10.1.3.

 数据库 .......................................................................................................... 22

 10.2.

 基于 easypoi和 swagger 的 Annotation .............................................................. 22

 10.2.1.

 ID、Transient ............................................................................................... 22

 10.2.2.

 Easypoi(EXCEL 字段)与 swagger 映射 ...................................................... 22

 10.3.

 Dao 框架 API ....................................................................................................... 23

 10.3.1.

 基于 tk.mybatis 的 Mapper 和 IdsMappe 接口 ............................................ 23

 10.3.2.

 基于 pagehelper 的分页功能 ....................................................................... 24

 10.4.

 Dao 层开发示例 ................................................................................................... 24

 10.4.1.

 产生实体的 POJO 类 ................................................................................... 24

 10.4.2.

 定义实体接口 .............................................................................................. 26

 10.4.3.

 实现 Dao 接口 ................................................................. 错误! 未定义书签。

 10.5.

 Service 层开发示例 ............................................................................................. 27

 10.5.1.

 定义 Service 接口 ......................................................................................... 27

 10.5.2.

 实现 Service 接口 ......................................................................................... 31

 10.6.

 web 层开发示例 ................................................................................................... 37

 10.6.1.

 Controller 编写 ............................................................................................. 37

 10.6.2.

 html 页面实现 .............................................................................................. 41

 10.6.3.

 输入校验处理 .............................................................................................. 41

 10.6.4.

 基于 layui 框架的自定义 treetable .............................................................. 45

  3

 1. 规范介绍

 本文档在中铁四局管理研究院统一应用集成架构的基础上,制定 J2EE应用开发规范,作为程序员和质量保证人员公共参考的标准。

 代码规范的制定对编程人员非常重要,主要原因在于:

  在软件的生命周期中,80%的成本花在维护上。

  几乎没有任何软件是由原作者来维护的。

  代码规范增强了软件的可读性,并使得软件工程师对于新代码的认识更快、更彻底。

 所以遵循此规范,对于增加系统的可维护性和代码的可读性非常重要,是每个程序员开发应用必须遵守的纪律。

 本规范需要结合阿里公约一并使用,sql 书写规范以阿里规范为准。

  4

  2. 系统构成 2.1. 模块项目结构 根据不同的模块,可能有不同的项目类型划分。一共有如下的项目类型 项目类型( 后缀) 说明 适用模块类型 Base (Base) 基础工具类等 J2EE Web Module Config (Cfg) 模块配置文件 J2EE Web Module Dao (Mapper) Model 及 Dao J2EE Web Module Service (ServiceImpl) Service J2EE Web Module Controller (Controller) 控制器类 J2EE Web Module util(utils) 工具类 常用工具类

 2.2. 项目目录结构 项目目录结构组织

  5

  3. 命名规范 3.1. 项目命名规范 项目名的格式为“产品前缀_模块前缀_项目类别”,详见前节。

 3.2. 包命名规范 所有的 package 名都为小写。规则为 com.mymti. <产品>.<模块>.<包类型>

  6

 3.2.1. 产品模块包命名 产品 模块 包前缀 系统框架 Framework (FW) 基础核心 com.mymti.mdm.framework.core 页面主体框架 com.mymti. mdm.framework.mainframe 系统管理 com.mymti. mdm.framework.sysmgmt 逻辑业务类 project(project) 企业数据管理 com.mymti. mdm.project.masterdata.enterprise 公共类 Common (Common) 核心工具 com.mymti. mdm.common.util.core 企业数据管理公共工具 com.mymti. mdm.common.util.enterprise 系统管理公共工具 com.mymti. mdm.common.util.sysmgmt

 3.2.2. 包类型命名 包类型一般有以下几种,但并不局限,可在讨论后新增 类型 说明 包名 Entity PO对象 model Dao Dao dao Service 服务 service Resource I18N资源文件 resource Constant 常量 constant Util 工具类 util

  3.3. 类名 对象类型 命名规范 例子 Controller 所有控制器都必须以 Controller 结尾,首字母大写。结构为: <操作>Controller

 LoginController UserController

 Service Interface:

 IBusinessObjectService Implementation:BusinessObjectServiceImpl 服务接口的命名必须以大写字母 I 开头以 Service 结尾,中间部分为有意义的服务名,其对应的服务实现类用服务名+ServiceImpl 来命名。

 Interface: IAuthorizationService Implementation: AuthorizationServiceImpl DAO Interface:EntityMapper Dao接口的命名必须以大写字母 I 开头以 Dao结UserMapper

  7

 尾。

 Entity 由有业务意义的英文单词、词组或缩写构成,每个单词或缩写首字母必须大写,其他字母小写。

 Role RoleResPermission

 3.4. 方法名命名 有意义的业务用词,可以是动名词组合或单独的业务动词,动词在前,名字在后,首词字母小写,其他词字母大写。

 对于服务接口中需要对数据库执行创建、更新或删除的业务方法,必须以动词,后面跟着业务名称组合,并遵循驼峰原则,这是由 Spring AOP事务的声明所要求的。

 创建:开头需要以 create 插入:开头需要以 insert 更新:开头需要以 update 更新:开头需要以 delete 查询:开头需要以 select 例如创建 User:createUser(…) 查询 User:selectUser(…)

 3.5. 属性名命名 变量、实例、类、类常量首字母小写,其他单词首字母大写。变量名的选择应便于记忆,使人一见即明。避免使用单字母的变量名,除非是暂时使用即可丢弃。临时变量通常以 i 、j 、k 来命名整型变量;c、d 和 e 来命名字符变量。

 例如:

 public Integer userId;//建议所有属性类型使用包装类

 3.6. 常量命名 类常量命名以全大写、用下划线分隔的单词表示,常量必须声明为 static final。

 例如:

 public static final int MAX_USER_AGE = 100; 4. 注释的标准

 4.1. 类的注释 /**

 * @ClassName 类名

 * @Description 类的描述

  8

  * @Author 创建人

 * @Date 创建时间

 * @Version 版本号

 **/

 4.2. 业务服务方法的注释 方法注释一律采用 Java 注释的标记,使用中文,采用如下的形式:

 /* *

 * @Author 创建人

 * @Description 方法描述

 * @Date 创建日期

 * @param 传入参数

 * @return 返回值类型

 */

 方法注释中需要说明该方法的功能、输入参数、返回值、异常。注意每一次修改之后需要更新注释。

 示例如下:

 /* *

 * @Author bxf

 * @Description 导入工艺工法

 * @Date 16:02 2019/7/24

 * @UpdateDate 16:02 2019/7/24

 * @param multipartFile

 * @param disciplineId

 * @return java.util.Map<java.lang.String,java.lang.Object>

 */ Map<String,Object> uploadFile(MultipartFile multipartFile, Integer disciplineId) throws SQLException, IOException;

  4.3. 关键属性的注释 关键属性,尤其是控制逻辑的属性,如状态,分类等,一定要加注释,注释一律采用 Java 注释的标记,使用中文,采用如下的形式:

 /** * 属性表示的含义 * 取值范围:该属性所有的合法的取值范围 **/ 示例如下:

 /**

  9

 * 资源类型。

  * 取值范围:menu,url,feature。

  */

 @Column(name = "RESOURCE_TYPE", nullable = false, length = 30)

 private String resourceType;

  10

  5. JSF UI 的规范 5.1. 布局规范  整体页面的模板包括 Header,Navigator,Workspace。

  查询列表的模板包括查询条件,列表内容,操作提示。(详见典型页面流程)

  弹出明细模板主要是提供给弹出查看或编辑业务实体详细信息的页面做布局使用,通常有三种类型的页面:创建页面,编辑页面,查看页面。这些弹出页面本身都是采用模态的方式。(详见典型页面流程)

 可以采用如下的图来描述:

 5.2. 样式规范 核心 css 文件被放到 static.CTCE.core.css 的目录下, 直接由 UI Designer 维护和修改, 同样控制着整个系统的 UI Style Header (主要是系统的 Logo标识等信息) Navigator (主菜单区域) Workspace (主工作区域, 该区域的本身也是个 iframe, 该 iframe 包含主体的 html 页面内容) 整体布局 html html 页面模板 其他类型的页面 …

  11

  5.3. 标准组件 组件名字 说明 使用环境 表格组件 表格组件,提供翻页,排序,自选择显示列,编辑等功能 html 页面 日期选择 下拉日历列表组件 html 页面 Form表单组件 均来自与 layui的内置组件 应用中需要使用数据字典的地方

 5.4. 统一命名 约定

 分类 统一命名 使用环境 按钮 查询(search) 查询的动作区域

 创建(create) 表格的动作区域

 删除(delete) 表格的动作区域

 取消(cancel) 新增或者修改页面的动作区域

 编辑(edit)

 将页面从只读状态切换到编辑状态

 保存(save) 新增或者修改页面的动作区域

 关闭(close) 新增或者修改页面的动作区域

 增加(add) 表格的动作区域

 提交(submit) 表格的动作区域

 导入(import) 表格的动作区域

 导出(export) 表格的动作区域

 复制(copy) 表格的动作区域

 发布(release) 单元格的动作按钮

 5.5. 典型页面流程 5.5.1. 列表查询页面

 对于不可编辑的列表来讲,当用户点击增加或者修改操作按钮的时候,都会弹出一个窗口页面。典型的弹出窗口页面通常都是一个主体的业务项(放在整个页面的上半区域),然后外加多个属于这个业务项的子业务项(放在单个 Tab标签中)。

  12

 页面的结构如下:整个页面主要包括三个部分(页面主体信息[控制按钮],控制按钮, Tab 页面[控制按钮])。创建页面只包括的页面主体信息部分,编辑页面和查看页面通常都包括三个部分:主体信息,控制按钮,Tab页面。

  13

 5.5.2. 简单实体创建页面流

 列表页面 创建 查看 创建页面 编辑页面 查看页面 确认 编辑 保存 关闭 取消 取消

  14

 5.5.3. 带 带 Tab 的页面

 列表页面,创建页面,查看页面,编辑页面的流转过程如下:

 列表页面 创建 查看 创建页面 查看页面 编辑页面 确认 保存 编辑 关闭 取消 取消 编辑 页面主体信息 Tab页面 控制按钮 控制按钮 控制按钮 创建页面 查看页面 编辑页面

  15

  6. 服务层规范 6.1. 服务层设计规范  服务层利用 Spring IoC容器的依赖注入能力,实现接口与实现分离;  所有的服务必须首先抽象服务的接口定义;  服务实现类中用 Spring框架提供的 Service 注释声明提供相应服务的 Bean Id,Spring基于此注释提供的 Id 加载服务 Bean实例。

  服务实现中依赖的实体 Dao接口或其它服务接口都利用 Spring Autowired 机制注入,将 Autowired注释声明在服务的引用上即可,必须保证注入的属性名与相应 Dao或其他服务接口的 Bean Id 一致;  服务接口的设计尽量减少重复逻辑,最大程度的利用服务组合来实现更复杂服务。

  没有特殊需求,尽量使用自动产生的实体 POJO类来做 UI 与服务之间的数据传递,而不另外定义值对象类。

  需要新建、更新、删除数据的服务方法的名称必须以 insert、update、delete开头。

  尽量业务名称+Mapper.xml 文件中不使用 sql处理复杂逻辑,尽量将逻辑处理放在 service 中进行处理

 6.2. Transaction 控制  借助和使用 Spring 提供的 AOP 的 transaction 机制,开发人员也不需要直接配置和 transaction 相关的内容。

  通过注解@Transaction在 service对应的方法上,用于事务的控制。

 6.3. 数据库访问层的规范  所有的数据库访问层均继承 tk.mybatis.mapper.common.Mapper、tk.mybatis.mapper.common.IdsMapper,利用开源的数据库连接层,避免多余代码的书写量 6.4. 数据库访问的规范  主从表 编辑过程中,一旦需要保存从表内容,先保存主表的内容,以保证数据的一致性和完整性。

 具体到界面上,增加控制:

 1)新增记录时,只有主表记录保存后,从表才能开始编辑 2)从表编辑,需要切换页面进入另一个从表记录时,先保存当前的从表记

  16

 录 3)删除主表记录时,必须先删除下挂的所有子表记录 4)复制主表记录时,同时复制下挂的所有子表记录

  SQL

  Where clause, 如果 column 是 nullable, 要注意 column的值是 null 的情况;  Query 查询条件列的顺序,与表的列的顺序一致,有利于建立索引;  查询条件尽早缩小结果集合 e.g 查询条件 1. Table1.column1 = Table2.column3 (joins all rows of both tables) And 2. Table1.Column5 > value1 (returns 60 % of table1’s rows) And 3. Table2.Column3 = value2 (returns 30% of table’s rows) And 4. Table1.column2 = value3

 (returns 2% of table2’s rows) 顺序应该 4321  避免使用 sub-selects  In vs. Exists

 “In certain circumstances, it is better to use IN rather than EXISTS. In general, if the selective predicate is in the subquery, then use IN. If the selective predicate is in the parent query, then use EXISTS” Oracle Tuning Reference

 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用 in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用 exists。

 其实我们区分 in 和 exists 主要是造成了驱动顺序的改变(这是性能变化的关键),如果是 exists,那么以外层表为驱动表,先被访问,如果是 IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了  只选择所需要的列,而不是所有的列;  不要用 Select * from  如果结果集预期比较大,需要分页功能  查询时,避免通配符放在最前面

 6.5. DAO 规范  所有的 DAO实现类都从 tk.mybatis.mapper.common.Mapper、tk.mybatis.mapper.common.IdsMappe 类派生;  所有业务实体都直接或间接从 BaseReq 类派生;  所有业务实体对应的表都必须包含 creator,create_date,modify_by,modify_date四个字段。

  17

  多对多中间表按照数据库设计规范只需要建立所关联表两个表的外键即可,不需要建立自己的主键。

  create_date,modify_date 两个列的数据类型为 date;  creator,modify_by 两个列的数据类型是 Varchar;  DAO层开发步骤主要包括产生修改实体的 POJO类、定义实体的 DAO接口和实现、配置数据源、定义和编写 DAO层对应的 xml 文件中的 sql、编写DAO层测试用例等几步。DAO 层框架为实现特定 DAO方法提供了强大的功能支持,请参阅本文档 DAO框架部分。

  所有 DAO 层的单元测试类都必须派生于tk.mybatis.mapper.common.Mapper、tk.mybatis.mapper.common.IdsMappe类。DAO 层单元测试中引用的相应 DAO实例都是用 Spring 的 Autowired 机制按照名字自动注入的,所以必须要保证属性和其相应的 get/set 方法与DAO实现中的 bean 实例名声明一致。建议对复杂的实体建立一个简单的testCRUD方法,以验证映射配置的正确性。

  18

  7. 日志 框架中日志模块描述的是系统运行过程中,记录的调试日志,日志的读者应该是维护人员,目标是协助维护人员定位和诊断错误。

 本框架采用 Logback 作为日志实现。

 7.1. 日志的级别

  fatal 非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。

  error 其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。

  warn 运行时不符合预期的状态但还没必要称为 "错误",比如某种资源快到了限制数量。期望这类信息能立即显示在状态控制台上。

  info 运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。

  debug 系统流程中的细节信息,如果生产系统出现错误,期望能提供线索。期望这类信息仅被写入 log 文件中。

 优先级从高到低分别是 fatal, error、warn、info、debug

 7.2. 日志的内容

  写日志内容的时候,请假定当你维护时候仅仅能从 Log上去定位问题,它应该能唯一标识问题;  有 Exception 发生时,要记录日志,并且应当包括最原始的 Exception 内容;  错误时,要有错误代码,供维护人员查询维护手册时使用;  不应该包含敏感的信息,比如密码;  记录 info 级别的日志时,应该将关键的运行时数据一起记录下来。

  记录 error 和 warn 级别的日志时,应该记录相关的运行时数据。

  记录 debug 级别的日志时,应该尽量记录可能会有帮助的运行时数据。

  8. 异常处理的规范  提供统一的异常处理机制(建立统一异常处理类BaseExceptionControllerAdvice 添加注解@ControllerAdvice),当发生异常的时候,系统会统一记录到日志文件中,必要的时候通过 UI 也会呈现给用户相应的消息提示。

  19

  异常的整个分类来看,主要包括:应用异常 (整个用户自定义的异常) 和系统异常(如数据库异常,工作流异常,消息异常等)。

  对于界面将会提示自定义的消息。对于系统异常,界面只是提示系统异常。

 Log文件中将会详细记录所有的异常信息和堆栈。

  20

  9. 权限管理 9.1. 权限管理框架

 权限控制采用基于 JWT+shiro 实现认证及权限校验,其中 shiro 提供安全权限的整体框架,而 shiro 将身份验证委托给 JWT,用 JWT机制来记性身份验证,而验证后用户的权限控制则完全通过 shiro 框架的来实现权限管理。如下是用户登录的权限框架交互示意顺序图。

 9.2. 权限模型

 权限系统核心框架模型如下图所示。权限框架中 Resource类提供了对各类需要对权限进行控制的资源的抽象描述,如菜单资源、功能点资源等。RoleResPermission 类定义了系统中角色与各类资源之间的权限许可。User 代表系统用户,权限系统中可以给系统用户赋予系统角色,来使用户具备相应角色的权限许可。

  21

  9.3. UI 功能点资源

 UI 功能点资源是唯一需要程序员体现在开发代码中的权限控制资源。UI 功能点声明了 html 文件中代表 UI 某个或某些功能的页面标签块。这些页面标签块可以是一个或多个 Button,也可以是一个或多个 Tab页,也可以是其他可以显示的页面内容。在某一 UI 功能点中包含的页面内容,只能由拥有这一功能点访问权限的用户看到,通过动态加载菜单资源来控制用户的页面显示资源。

  对于需要进行权限校验请求 action,通过在指定 controller 类的方法中添加@RequiresPermissions(value = {"add.role"})用于声明需要权限校验,调用 shiro 框架中的 doGetAuthorizationInfo 的方法来进行验证。

  22

  10. 附录 – 开发环境的准备和编程指南

 10.1. 开发环境 10.1.1. 开发工具 开发工具 版本 说明 Tomcat + Idea 8.0

  10.1.2. 版本管 理工具 使用轻量级版本控制工具 SVN作为统一版本控制工具。

 10.1.3. 数据库 Sqlserver 2008。

 10.2. 基于 easypoi 和 和 swagger 的 的 Annotation 10.2.1. ID 、Transient

 所有实体都采用全局唯一的业务无关主键,数据类型采用 Long(64bit)部分建议采用 String(UUID)类型.

 用 Id 标注声明当前 field 为映射表中的主键列。id值的获取方式有五种:TABLE, SEQUENCE, IDENTITY, AUTO, NONE。Oracle 和 DB2支持SEQUENCE,SQL Server 和 Sybase 支持 IDENTITY。所有的数据库都可以指定为AUTO 和 TABLE。NONE (默认)需要用户自己指定 Id的值。

 用 Transient 标注声明当前 field 为辅助字段在数据在没有此映射。

 @Id private Long id ; @Transient private String errorMsg ;

  10.2.2. Easypoi(EXCEL 字段)与 与 swagger 映射 1、Easypoi属性映射

  @Excel(name = "工法编号")//与 excel 的字段映射

  @NotNull(message = "工法编号不能为空" )//验证

  private String code;

 2、swagger 的 POJO 映射

  23

 Swagger 的映射用于后期在线接口文档的管理:

 @ApiModel("工艺工法") public class ResMethods extends BaseReq implements IExcelModel,IExcelDataModel,Comparable<ResMethods> { @ApiModelProperty(value = "工法编号")

 private String code;

 }

 3、swagger 的映射

 @ApiOperation 表示当前控制器所代表的功能名称;@ApiImplicitParams 表示当前控制器所接收的参数值

 @RestController @RequestMapping("resmethods") public class ResMethodsController { @ApiOperation(value = "保存工艺工法数据") @PostMapping("insertResMethods") @ApiImplicitParams({@ApiImplicitParam(name="pid",value = "专业 id")}) public Result<ResMethods> insertResMethods(HttpServletRequest request, HttpServletResponse response ,Integer pid){

  String loginId = JWTUtil.getLoginId(request.getHeader("Authorization"));

  entity.setCreator(loginId);

  resMethodsService.insertSelective(entity,pid);

  return new Result<ResMethods>(request,ResultEnum.SUCCESS,null); }

 }

 10.3. Dao 框架 API 10.3.1. 于 基于 tk.mybatis 的 的 Mapper 和 和 IdsMappe 接口

  tk.mybatis是 github 上一个开源的组件,封装 mybatis,提供通用 Mapper封装了普通的增删改查和 example 操作,使我们不用再每个业务单独开发增删改查等的样板代码,我们采用所有的 Dao都继承 tk.mybatis 的 Mapper 和 IdsMappe 接口。

 (具体使用见样例代码与 tk.mybatis 使用文档)

 @Mapper public interface InfDictItemMapper extends tk.mybatis.mapper.common.Mapper<InfDictItem>,IdsMapper<InfDictItem> {

 }

  24

 10.3.2. 于 基于 pagehelper 的分页 功能

 PageHelper一款非常优秀开源的 mybatis 分页插件,它支持基本主流与常用的数据库。

 Mybatis 的 xml 配置中配置 <plugins>

  <plugin interceptor="com.github.pagehelper.PageHelper">

 <!-- (相当于没有执行分页查询,但是返回结果仍然是 Page 类型)

 -->

 <property name="pageSizeZero" value="true" />

 <!-- 分页参数合理化 -->

  <property name="reasonable" value="true"/>

  </plugin>

 </plugins>

 10.4. Dao 层开发示例 10.4.1. 的 产生实体的 POJO 类

 实体的 POJO类由代码产生工具自动产生,自动产生的代码可能会需要做少量修改。如下所示:

 @Data @ApiModel("工艺工法") public class ResMethods extends BaseReq implements IExcelModel,IExcelDataModel,Comparable<ResMethods> {

 @ApiModelProperty(value = "主键 id",required = true)

  @Id

  private Integer id;

 @ApiModelProperty(value = "工法编号")

  @Excel(name = "工法编号")

  @NotNull(message = "工法编号不能为空" )

  private String code;

 @ApiModelProperty(value = "工法名称")

  @Excel(name = "工法名称")

  @NotNull(message = "工法名称不能为空" )

  private String name;

 @ApiModelProperty(value = "分类")

  @Excel(name = "分类")

  @NotNull(message = "分类不能为空" )

  private String classy;

  25

 @ApiModelProperty(value = "构件名称")

  @Excel(name = "构件名称")

  @NotNull(message = "构件名称不能为空" )

  private String elementName;

 @ApiModelProperty(value = "EBS编码")

  private String ebs;

 @ApiModelProperty(value = "描述")

  @Excel(name = "描述")

  private String description;

 @ApiModelProperty(value = "创建人")

  private String creator;

 @ApiModelProperty(value = "创建时间")

  private Date createDate;

 @ApiModelProperty(value = "更新人")

  private String modifiedBy;

 @ApiModelProperty(value = "更新时间")

  private Date modifyDate;

 @ApiModelProperty(name="ifd")

  @Excel(name = "IFD 编码")

  @NotNull(message = "IFD编码不能为空" )

  private String ifd;

 @Transient

  @Excel(name = "错误提示")

  private String errorMsg;

 @Transient

  private int rowNum;

 @Override

  public int compareTo(ResMethods resMethods) {

  //重写 Comparable 接口的compareTo 方法,

  return this.rowNum - resMethods.getRowNum();// 根据行号升序排列,降序修改相减顺序即可

  }

 }

  26

  10.4.2. 定义实体接口

 @Mapper public interface ResMethodsMapper extends tk.mybatis.mapper.common.Mapper<ResMethods>,IdsMapper<ResMethods> {

 /**

 * @Author bxf

 * @Description 根据 id 更新实体

 * @Date 17:07 2019/7/19

 * @Param

  * @return

  **/

  public int updateByIdSelective(ResMethods resMethods);

 /**

 * @Author bxf

 * @Description 根据 pid 删除实体

 * @Date 17:07 2019/7/19

 * @Param

 * @return

 **/

  public int deleteByPid(String pid[]);

 /**

 * @Author bxf

 * @Description 根据专业 id 获取工法

 * @Date 9:09 2019/7/22

 * @Param id

 * @return

 **/

  List<Map<String,Object>> selectMapByDisciplineId(ResMethods resMethods);

 /* *

 * @Author bxf

 * @Description 选择性插入字段重写(不包含 id)

 * @Date 13:04 2019/7/23

 * @param resMethods

 * @return int

 */

  int insertSelectiveNId(ResMethods resMethods);

  /* *

 * @Author bxf

 * @Description 获取未挂架本专业的工艺工法

  27

  * @Date 14:56 2019/7/23

 * @param resMethods

 * @return java.util.List<com.mymti.mdm.project.sys.entity.ResMethods>

 */

  List<ResMethods> selectListByConditionNotExit(ResMethods resMethods);

 /* *

 * @Author bxf

 * @Description 根据工法获取工艺工法关系

 * @Date 22:23 2019/7/25

 * @param map

 * @return java.util.List<com.mymti.mdm.project.sys.entity.RelDisciplinesMethods>

 */

  List<RelDisciplinesMethods> selectListByCode(Map<String,Object> map);

 int insertBatch(List<ResMethods> list);

 /* *

 * @Author pzw

 * @Description 根据 ebs 编码查询工法列表

 * @Date 22:23 2019/7/25

 * @param map

 * @return java.util.List<com.mymti.mdm.project.sys.entity.RelDisciplinesMethods>

 */

  List<ResMethods> selectListByEBS(Map<String,Object> record);

 /* *

 * @Author bxf

 * @Description 根据项目级 ebsid查询工法列表

 * @Date 15:49 2019/7/31

 * @param map

 * @return java.util.List<com.mymti.mdm.project.sys.entity.RelDisciplinesMethods>

 */

  List<ResMethods> selectListByPidForRelprj(Map<String,Object> map); } 10.5. Service 层开发示例 10.5.1. 义 定义 Service 接口 public interface IResMethodsService {

  /* *

 * @Author bxf

 * @Description 根据主键删除

 * @Date 9:13 2019/7/23

 * @param id

  28

  * @return int

 */

  int deleteByPrimaryKey(Integer id);

  /* *

 * @Author bxf

 * @Description 插入工艺工法表

 * @Date 9:13 2019/7/23

 * @param record

 * @return int

 */

  int insert(ResMethods record);

 /* *

 * @Author bxf

 * @Description 选择性字段插入

 * @Date 10:14 2019/7/23

 * @param record

 * @param pid

 * @return int

 */

  int insertSelective(ResMethods record,Integer pid);

  /* *

 * @Author bxf

 * @Description 根据主键获取

 * @Date 9:14 2019/7/23

 * @param id

 * @return com.mymti.mdm.project.sys.entity.ResMethods

 */

  ResMethods selectByPrimaryKey(Integer id);

  /* *

 * @Author bxf

 * @Description 根据主键选择性字段更新对象

 * @Date 9:14 2019/7/23

 * @param resMethods

 * @return int

 */

  int updateByIdSelective(ResMethods resMethods);

  /* *

 * @Author bxf

 * @Description 根据主键更新对象

 * @Date 9:14 2019/7/23

 * @param record

 * @return int

 */

  int updateByPrimaryKey(ResMethods record);

  29

 /* *

 * @Author bxf

 * @Description 获取所有工艺工法表子目

 * @Date 9:31 2019/7/23

 * @param record

 * @return java.util.List<com.mymti.mdm.project.sys.entity.ResMethods>

 */

  public List<ResMethods> selectAllResMethods(ResMethods record);

 /* *

 * @Author bxf

 * @Description 根据实体中的属性值进行查询,查询条件使用等号

 * @Date 9:13 2019/7/23

 * @param s

 * @return java.util.List<com.mymti.mdm.project.sys.entity.ResMethods>

 */

  public List<ResMethods> selectByPid(String s);

 /* *

 * @Author bxf

 * @Description 根据实体中的属性值进行查询,查询条件使用等号

 * @Date 9:13 2019/7/23

 * @param resMethods

 * @return java.util.List<com.mymti.mdm.project.sys.entity.ResMethods>

 */

  public List<ResMethods> selectResMethods(ResMethods resMethods);

 /* *

 * @Author bxf

 * @Description 根据 ids 删除工艺工法数据并删除关系

 * @Date 9:12 2019/7/23

 * @param ids,remark

 * @return int

 */

  int deleteByPrimaryKeys(String ids,Integer remark);

 /* *

 * @Author bxf

 * @Description 根据条件查找符合要求的工艺工法

 * @Date 9:12 2019/7/23

 * @param ResMethods

 * @return com.github.pagehelper.PageInfo<java.util.Map<java.lang.String,java.lang.Object>>

 */

  public PageInfo<Map<String,Object>> selectListByCondition(ResMethods ResMethods);

  30

  /* *

 * @Author bxf

 * @Description 根据条件查找符合要求的所有工艺工法(分页)

 * @Date 9:32 2019/7/23

 * @param entity

 * @return com.github.pagehelper.PageInfo

 */

  PageInfo selectAllResMethodsByPage(ResMethods entity);

 /* *

 * @Author bxf

 * @Description 获取未挂架本专业的工艺工法

 * @Date 14:56 2019/7/23

 * @param resMethods

 * @return com.github.pagehelper.PageInfo

 */

  PageInfo selectListByConditionNotExit(ResMethods resMethods);

 /* *

 * @Author bxf

 * @Description 导入工艺工法

 * @Date 16:02 2019/7/24

 * @param multipartFile

 * @param disciplineId

 * @return java.util.Map<java.lang.String,java.lang.Object>

 */

  Map<String,Object> uploadFile(MultipartFile multipartFile, Integer disciplineId,HttpServletResponse response,HttpServletRequest request) throws SQLException, IOException;

 /* *

 * @Author pzw

 * @Description 根据 ebs 编码查询工法列表

 * @Date 16:02 2019/7/24

 * @param multipartFile

 * @param disciplineId

 * @return java.util.Map<java.lang.String,java.lang.Object>

 */

  PageInfo<ResMethods> selectListByEBS(ResMethods resMethods);

  /* *

 * @Author bxf

 * @Description 根据项目级 ebsid查询工法列表

 * @Date 16:07 2019/7/31

 * @param entity

 * @return java.util.List<com.mymti.mdm.project.sys.entity.ResMethods>

  31

  */

  List<ResMethods> selectListByPidForRelprj(ResMethods entity);

 /* *

 * @Author pzw

 * @Description 根据 ebs 编码查询工法列表

 * @Date 16:02 2019/7/24

 * @param multipartFile

 * @param disciplineId

 * @return java.util.Map<java.lang.String,java.lang.Object>

 */

  PageInfo selectListByEBSAndPage(ResMethods entity); } 10.5.2. 现 实现 Service 接口 @Service @Slf4j public class ResMethodsServiceImpl implements IResMethodsService{

 @Autowired

  private ResMethodsMapper...

相关热词搜索: 规例 文档 开发