当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 0 Fork 87

xujianHunter / tyboot
暂停

forked from 子杨 / tyboot 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

tyboot

介绍

tyboot是一个基于springboot的服务端脚手架,面向单体服务快速开发,需要微服务方案的可以看另一个项目tycloud(还在完善中)

特点

1.简化基础业务开发过程
    a.针对单表查询,不用写sql。列表,分页,都不用写。
    b.dao层的mapper只是一个空的接口,大部分业务不需要在mapper中写任何代码(除非复杂报表查询),也不需要mapper的xml文件。
    c.baseService中有大量的泛型方法以供使用,单表单对象增删改查在service层也不需要写代码,列表和分页查询也只需要一行代码。
    d.提倡单表操作。不提倡使用复杂sql解决复杂的业务问题。
2.降低学习成本。新人快速上手,基础知识过关的新人,可以快速进入业务开发状态。
3.常用组件集成。redis,mq,事件,mongodb等等
4.通用业务模型的实现。开箱即用的业务模型,可以大大的缩减项目开发周期。计划实现的通用业务模型有
  订单系统,虚拟账户系统,支付网关,动态表单,报表系统,通用预约系统,优惠策略定制,
  基础数据(验证码,字典,内部消息,地理位置信息,通用文件信息存储,操作记录与计数,)
5.集成常用第三方系统。短信(阿里大鱼),存储(七牛,阿里OSS),支付(微信公众平台,支付宝)

技术栈

 1. SpringBoot 2.1.6.RELEASE
 2. MyBatis-Plus 3.x
 3. mybatis-spring-boot-starter 1.2.0
 5. Kaptcha 2.3.2
 6. jackson-databind 2.9.7
 7. springfox-swagger2 2.2.2
 8. HikariCP 2.7.9

项目结构

 tyboot 
  ├─tyboot-api
  │  ├─tyboot-api-boot                示例项目,实现了数据字典,权限管理,其他项目通用的基础功能
  ├─tyboot-component------组件
  │  ├─tyboot-component-activemq------集成activemq
  │  ├─tyboot-component-amqp----------对spring的amqp简单集成
  │  ├─tyboot-component-cache---------缓存,对redis的进一步实现和封装,地理位置,管道,zset实现分页查询,分布式锁
  │  ├─tyboot-component-emq-----------集成mqtt服务 EMQ
  │  ├─tyboot-component-event---------利用spring的事件机制实现基于rest接口的事件处理机制
  │  ├─tyboot-component-mongo---------集成mongo
  │  ├─tyboot-component-opendata------集成常用第三方开放接口,七牛,阿里大鱼,腾讯im,极光推送
  │  └─tyboot-component-validation----参数校验
  ├─tyboot-core-----------核心包,一般情况下实例项目都会引用到
  │  ├─tyboot-core-auth---------------用户认证,session共享
  │  ├─tyboot-core-foundation---------常用工具类库,线程内上下文封装;Bean、File,列表转树结构,加密解密等等。。。。。
  │  ├─tyboot-core-rdbms--------------集成mybatis,mybatisplus,简化orm和封装servic通用操作
  │  └─tyboot-core-restful------------对restful风格的接口封装,集成接口文档,统一异常处理,请求拦截处理,返回数据封装,上下文封装
  └─tyboot-prototype------通用业务模型,针对特定业务场景进行封装实现
      ├─tyboot-prototype-account------虚拟账户系统
      ├─tyboot-prototype-order--------通用订单系统
      └─tyboot-prototype-trade--------简单支付渠道实现,支付宝,微信
 	    

目录约定:

示例:
tyboot-api-privilege----------------以下目录为项目约定目录结构
  	    org.typroject.api.privilege.
  	                            controller-------接口目录 
  	                            face.------------业务层
  	                                model--------vo
  	                                orm.---------数据操作
  	                                    dao------mapper接口目录
  	                                    entity---po目录
  	                                service------业务实现类

约定

orm

1.entity需要继承BaseEntity
    对应的数据表不能缺少通用字段
 
     SEQUENCE_NBR    bigint	20    物理主键
     REC_USER_ID    varchar	32    最后更新者的id
     REC_DATE    datetime        最后更新时间
     
2.使用了mybatisplus,所以实例项目中不需要引入mapper.xml,baseMapper的方法足够使用。
  除非要进行复杂查询,可自行引入xml文件 
3.通常情况下dao层的mapper子接口只是一个空接口,除非要自己写sql,或引入了xml,才会在其中写代码。

service

1.继承baseService
  public class LocationInfoService extends BaseService<LocationInfoModel,LocationInfo,LocationInfoMapper> 
  {}
2.service中的方法不要重载,因为会只根据方法名通过反射获取方法实例。
3.示例项目中的service层没有写接口,直接使用的实现类进行操作。需要接口的自行定夺。负责业务设计时候 设计原则还是要讲究的。对于简单业务,可视情况而定。
4.单表单对象的操作可以不需要在service中写方法,也不需要引入mapper,泛型方法足够用,
  分页查询和列表查询也只需要一行代码,示例如下:
  • 分页:
        public Page<DictionarieModel> queryDictPage(Page page, String agencyCode ,
                                                       String buType,
                                                       String dictAlias,
                                                       @Condition(Operator.like) String dictName,
                                                       String dictCode) throws Exception
            {
                return this.queryForPage(page,"排序字段",false,agencyCode,buType,dictAlias,dictName,dictCode);
            }
      作为查询条件的参数名称需要和对应model中的属性名称一致。
      传入baseService.queryForPage中的params参数列表需要和前置方法(queryDictPage)的参数顺序一致,
      底层会自动解析前置方法参数名称并对值判空,然后转换为数据库字段名,用于构建条件组装器。
      注解@Condition用于定义条件操作符,已实现的条件操作符详见Operator,所有查询条件的逻辑关系都是与关系
      目前还没打算实现或关系。         
  • 列表:(参数约定与分页方法相同)
      public List<DictionarieModel> queryDictList(String agencyCode ,
                                                     String buType,
                                                     String dictAlias,
                                                      @Condition(Operator.like)String dictName,
                                                     String dictCode) throws Exception
          {
              return this.queryForList("排序字段",false,agencyCode,buType,dictAlias,dictName,dictCode);
          }

controller

1.统一返回值,所有接口统一使用ResponseModel封装返回值。
2.自定义注解@TycloudOperation用来定义接口的访问级别ApiLevel,鉴权控制needAuth
3.可以设置是否返回真实http状态,或者全部返回200.

关于缓存

1.单表单对象缓存,单表列表缓存都已经集成到baseService的方法中,可以随着对象的更新刷新或删除缓存,可以查看方法备注以选择是使用。
2.其他缓存场景建议直接使用rediTemplate进行操作
3.tyboot-component-cache模块提供了基于redis Zset分页查询;地理位置计算和查询;redis管道的使用

代码生成器的使用

1.使用mybatisplus提供的代码生成器,详见示例项目。

最佳实践

1.将tyboot-core和tyboot-component中的组件包打包发布到maven私服nexus中统一管理,
  然后各个实例项目引用后进行业务项目的开发,这样实例项目的业务代码会更加清晰,打包速度更快,可以随时升级所引用的tyboot版本。

后续计划

1.完善基础模块
3.完善通用业务模型
4.集成web端
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2018 magintursh Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

基于springboot的脚手架 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/xujianHunter/tyboot.git
git@gitee.com:xujianHunter/tyboot.git
xujianHunter
tyboot
tyboot
master

搜索帮助

14c37bed 8189591 565d56ea 8189591