目录约定:
示例:tyboot-api-privilege----------------以下目录为项目约定目录结构org.typroject.api.privilege.controller-------接口目录face.------------业务层model--------voorm.---------数据操作dao------mapper接口目录entity---po目录service------业务实现类约定orm
1.entity需要继承BaseEntity对应的数据表不能缺少通用字段SEQUENCE_NBRbigint20物理主键REC_USER_IDvarchar32最后更新者的idREC_DATEdatetime最后更新时间2.使用了mybatisplus,所以实例项目中不需要引入mapper.xml,baseMapper的方法足够使用。除非要进行复杂查询,可自行引入xml文件3.通常情况下dao层的mapper子接口只是一个空接口,除非要自己写sql,或引入了xml,才会在其中写代码。service
1.继承baseServicepublicclassLocationInfoServiceextendsBaseService<LocationInfoModel,LocationInfo,LocationInfoMapper>{}2.service中的方法不要重载,因为会只根据方法名通过反射获取方法实例。3.service层只有实现类,抛弃了以前接口,觉得麻烦。4.单表单对象的操作可以不需要在service中写方法,也不需要引入mapper,泛型方法足够用,分页查询和列表查询也只需要一行代码,示例如下:分页:publicPage<DictionarieModel>queryDictPage(Pagepage,StringagencyCode,StringbuType,StringdictAlias,@Condition(Operator.like)StringdictName,StringdictCode)throwsException{returnthis.queryForPage(page,"排序字段",false,agencyCode,buType,dictAlias,dictName,dictCode);}作为查询条件的参数名称需要和对应model中的属性名称一致。传入baseService.queryForPage中的params参数列表需要和前置方法(queryDictPage)的参数顺序一致,底层会自动解析前置方法参数名称并对值判空,然后转换为数据库字段名,用于构建条件组装器。注解@Condition用于定义条件操作符,已实现的条件操作符详见Operator,所有查询条件的逻辑关系都是与关系目前还没打算实现或关系。列表:(参数约定与分页方法相同)publicList<DictionarieModel>queryDictList(StringagencyCode,StringbuType,StringdictAlias,@Condition(Operator.like)StringdictName,StringdictCode)throwsException{returnthis.queryForList("排序字段",false,agencyCode,buType,dictAlias,dictName,dictCode);}controller
1.统一返回值,所有接口统一使用ResponseModel封装返回值。2.自定义注解@TycloudOperation用来定义接口的访问级别ApiLevel,鉴权控制needAuth关于缓存
1.单表单对象缓存,单表列表缓存都已经集成到baseService的方法中,可以随着对象的更新刷新或删除缓存,可以查看方法备注以选择是使用。2.其他缓存场景建议直接使用rediTemplate进行操作3.tyboot-component-cache模块提供了基于redisZset分页查询;地理位置计算和查询;redis管道的使用代码生成器的使用
1.使用mybatisplus提供的代码生成器,详见示例项目。最佳实践1.将tyboot-core和tyboot-component中的组件包打包发布到maven私服nexus中统一管理,然后各个实例项目引用后进行业务项目的开发,这样实例项目的业务代码会更加清晰,打包速度更快,可以随时升级所引用的tyboot版本。后续计划1.完善基础模块3.完善通用业务模型4.集成web端
评论