手把手搭建springBoot-Mybatis Plus下的简单脚手架

闲来无事发现最近公司新来的同事,远远只停留在别人的项目中没法自拔,坚信了一些固定开发方式,对如何搭建项目一无所知,也不曾尝试,这让我非常郁闷。

如今我把本身搭建的一些脚手架贡献出来给一些初学者参考,仍是那句话,一切从简。适合本身的才是最好的。

Spring boot MyBatis Plus

本项目涉及到的东西:

缓存:redis
安全框架:shiro
文档框架:swagger2
持久层框架:Mybatis plus
开源工具:hutool  ,全部你想要的工具,里面几乎都有,包括excel导出导入 https://www.hutool.club/docs/#/

该脚手架具有了以下基本功能:

一、基于MyBatis plus基本的CRUD
    二、RedisUtil已封装,可以使用
    三、Shiro下的权限认证、角色认证、Session过时认证,异地登陆检查,单机版、分布式皆适用
    四、动态多数据源 https://mp.baomidou.com/guide/dynamic-datasource.html
    五、swagger2
    六、统一的报文处理,异常处理、请求日志打印(AOP)
    七、归入了很是丰富的工具类 hutool  https://github.com/changyu3590/hutool.git
    八、支持事务
    九、定时任务
    十、基于mybatis-plus的审计(公共字段自动填充)

先浏览下项目结构

demo文件下的全部文件夹就是主要的工做目录了

  • aop:html

    这里主要用于切面日志,就是输出日志git

  • base:github

    基础的常量类:redis

    哈哈,就一个Excel模板存放的地址;spring

    父类Controller:跨域

    如今里面只有个全局异常的处理,全部的Exception会捕捉到这里,而后集中处理返回自定义报文,方便统一异常报文格式浏览器

    父类Service:缓存

    里面只有个变量。。。用于自动装配Dao接口的,后面有业务service的话,能够先直接继承这个Service,泛型里直接传入对应的Dao类就能够用了:this.dao.xxxxxxx();安全

    ServiceException:这个没啥可看的就是自定义异常,为了规范,业务中时常要本身抛出一些业务异常,配合全局异常捕获,随时随地抛出。可千万不能retrun到controller,再以一个map返回去,这样很容易出Bug。cookie

    StartupRunner:

    程序启动后加载,这里你能够根据业务须要写你想要的,没啥事就打个日志就能够了。

    TimeoutException:

    同ServiceException,专门用来返回超时或异地登陆的报文的

  • config:

    WebMvcListener:

    它主要负责跨域配置、控制哪些路由须要进入Interceptor拦截器,哪里不须要。@Bean那里用于把Interceptor交给spring管理,生产单例的对象,没啥可要说的。

    Interceptor:

    preHandler首先会被触发。一般我这里主要用于异地登陆检查,由于结合了shiro,浏览器每次请求都会传递cookie里的sessionId,这里就是结合sessionId,实现了一个异地登陆检查。若是项目没有引入shiro的话,这里可能彻底用于本身设计的token的校验检查,看看每次用户发送的Request里传过来的token是否还存在在redis中,不存在就盘他,存在就刷新过时时间,固然key通常是token,value通常是当前用户信息。

    AutoTableField:

    用的是mybatis plus里的自动填充注解,@TableField(value = "create_by", fill = FieldFill.INSERT) ,这个注解标注的字段将会在这个类里面实现,主要用于建立时间、修改时间、建立人、修改人。

    MybatisConfig:

    配置分页插件,照这样写就行了。

    RedisConfig、RedisUtil:没啥可说的,配置+封装,而后就能够用了。

    CustomeRelam:

    shiro中最重要的实现部分,主要实现用户密码认证(后续的session过时认证,也会由shiro自动处理)、填装用户信息到Subject里方便后续直接从Subject里取得在线用户信息。再一个就是获取角色权限信息,配合@RequireRoles、@RequirePermissions,这两个注解会检查你AuthorizationInfo中加载的当前用户的角色及权限。

    ShiroConfig:

    shiro的所有配置就在这里,这里粘贴了部分代码,如图可看到它设定了哪些路由是须要anno即不检查session的,剩下的都会authc就是检查session信息,没登陆就滚一边去。固然一些静态资源须要放醒,例如swagger。因为单机版几乎在商业中不存在,因此shiro最好配合redis,让shiro自动将session存储到redis,用redis管理session。

    ScheduledConfig:

    自带的定时任务配置类,足够用了。 具体怎么用,面向百度,很简单。

  • Controller

    UserController:本身写的一个关于用户的接口,demo而已。

  • dao

    RoleDao、UserDao:持久层接口,继承了BaseMapper CRUD就一套都有了。下图展现其中一个dao

  • dto:

    GeneralResponseDto:

    自定义交互报文,要求全部的报文返回统一该改格式返回。

  • entity:实体类

    User:

    实体类,注解都是mybatis plus里的注解,并继承了AttributeEntity

  • serviceimp:业务层 没啥可说的,里面就是一些demo,夹杂了一个mybatis plus的分页查询。

  • resources:

    mapper:mybatis xml都在这里

    application.yml: 公共配置

    application-dev.yml: 本地配置

    红框中数据源的配置格式基于mybatis plus中的多数据源配置, 参考官方文档便可

    banner.txt:个性化的输出

写了这么多,其实项目很精简,老手都能看出来,几乎没啥东西,若有不对的地方,请见谅提出。

主要是为了透过项目看本质,框架是为业务模型而生的,每一个人的喜爱都不同,把框架缩到最精简、可用、让初学者能更好明白练练手。从而让搭建项目不是那么高不可攀的事情对一些人来讲。

最后附上该项目的仓库地址:

https://gitee.com/yuchang1/spring-demo

还有个同款jpa的以下:

https://gitee.com/yuchang1/spring-demo-jpa
相关文章
相关标签/搜索