项目MyBlog

作者: ML李嘉图

项目

地址:https://gitee.com/zwtgit/my-blog

由Docker + SpringBoot2.0 + Mybatis + thymeleaf 等技术实现,

功能齐全、部署简单及完善的代码。

启动成功之后访问: http://localhost:8080

访问首页 http://localhost:8080/admin

访问后台 默认账密:admin 123456

访问swagger: http://localhost:8080/swagger-ui.html

架构

  • JDK版本:至少1.8及以上;
  • springboot;
  • thymeleaf;
  • mybatis;
  • pagehelper;
  • druid;
  • swagger;

配置

可以设置多个环境方便开发

application-dev.yml

server:
  port: 8080
spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        druid相关配置
        druid:
          监控统计拦截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          基本属性
          url: jdbc:mysql://127.0.0.1:3306/lu_tale?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: 123456
          配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          获取连接等待超时时间
          max-wait: 60000
          间隔多久进行一次检测,检测需要关闭的空闲连接
          time-between-eviction-runs-millis: 60000
          一个连接在池中最小生存的时间
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20
    thymeleaf:
            prefix: classpath:/templates/
            check-template-location: true
            suffix: .html
            encoding: UTF-8
            mode: LEGACYHTML5
            cache: false
    aop:
      auto: true
      proxy-target-class: true
    servlet:
          multipart:
            max-file-size: 10Mb
            max-request-size: 100Mb
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: cn.luischen.model
pagehelper
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check
logging:
  level:
    cn.luischen.dao : DEBUG
swagger:
  show: true
qiniu:
  accesskey: ""
  serectkey: ""
  bucket: ""
  cdn:
    url: ""

application-prod.yml

server:
  port: 443
  ssl:
    key-store: classpath:luischen.cn.pfx
    key-store-password: l29df164yf5d4z
    key-store-type: PKCS12
spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        druid相关配置
        druid:
          监控统计拦截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          基本属性
          url: jdbc:mysql://127.0.0.1:3306/lu_tale?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: 240055
          配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          获取连接等待超时时间
          max-wait: 60000
          间隔多久进行一次检测,检测需要关闭的空闲连接
          time-between-eviction-runs-millis: 60000
          一个连接在池中最小生存的时间
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20
    thymeleaf:
            prefix: classpath:/templates/
            check-template-location: true
            suffix: .html
            encoding: UTF-8
            mode: LEGACYHTML5
            cache: true
    aop:
      auto: true
      proxy-target-class: true
    servlet:
          multipart:
            max-file-size: 10Mb
            max-request-size: 100Mb
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: cn.luischen.model
pagehelper
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check
swagger:
  show: false

model层以及数据库的设计

attach

    /** 主键编号 */
    private Integer id;
    /** 文件名称 */
    private String fname;
    /** 文件类型 */
    private String ftype;
    /** 文件的地址 */
    private String fkey;
    /** 创建人的id */
    private Integer authorId;
    /** 创建的时间戳 */
    private Integer created;

comments

    /**
     * comment表主键
     */
    private Integer coid;
    /**
     * contents表主键,关联字段
     */
    private Integer cid;
    /**
     * 评论生成时的GMT unix时间戳
     */
    private Integer created;
    /**
     * 评论作者
     */
    private String author;
    /**
     * 评论所属用户id
     */
    private Integer authorId;
    /**
     * 评论所属内容作者id
     */
    private Integer ownerId;
    /**
     * 评论者邮件
     */
    private String mail;
    /**
     * 评论者网址
     */
    private String url;
    /**
     * 评论者ip地址
     */
    private String ip;
    /**
     * 评论者客户端
     */
    private String agent;
    /**
     * 评论类型
     */
    private String type;
    /**
     * 评论状态
     */
    private String status;
    /**
     * 父级评论
     */
    private Integer parent;
    /**
     * 评论内容
     */
    private String content;

contents

    /**
     * 文章的主键编号
     */
    private Integer cid;
    /**
     * 内容标题
     */
    private String title;
    /**
     * 标题图片
     */
    private String titlePic;
    /**
     * 内容缩略名
     */
    private String slug;
    /**
     * 内容生成时的GMT unix时间戳
     */
    private Integer created;
    /**
     * 内容更改时的GMT unix时间戳
     */
    private Integer modified;
    /**
     * 内容文字
     */
    private String content;
    /**
     * 内容所属用户id
     */
    private Integer authorId;
    /**
     * 内容类别
     */
    private String type;
    /**
     * 内容状态
     */
    private String status;
    /**
     * 标签列表
     */
    private String tags;
    /**
     * 分类列表
     */
    private String categories;
    /**
     * 点击次数
     */
    private Integer hits;
    /**
     * 内容所属评论数
     */
    private Integer commentsNum;
    /**
     * 是否允许评论
     */
    private Integer allowComment;
    /**
     * 是否允许ping
     */
    private Integer allowPing;
    /**
     * 允许出现在聚合中
     */
    private Integer allowFeed;

logs

    /**
     * 日志主键
     */
    private Integer id;
    /**
     * 产生的动作
     */
    private String action;
    /**
     * 产生的数据
     */
    private String data;
    /**
     * 发生人id
     */
    private Integer authorId;
    /**
     * 日志产生的ip
     */
    private String ip;
    /**
     * 日志创建时间
     */
    private Integer created;

metas

    /**
     * 项目主键
     */
    private Integer mid;
    /**
     * 名称
     */
    private String name;
    /**
     * 项目缩略名
     */
    private String slug;
    /**
     * 项目类型
     */
    private String type;
    /**
     * 对应的文章类型
     */
    private String contentType;
    /**
     * 选项描述
     */
    private String description;
    /**
     * 项目排序
     */
    private Integer sort;

options

    /** 名称 */
    private String name;
    /** 内容 */
    private String value;
    /** 备注 */
    private String description;

relationships

    /**
     * 文章主键编号
     */
    private Integer cid;
    /**
     * 项目编号
     */
    private Integer mid;

users

    /** 主键编号 */
    private Integer uid;
    /** 用户名 */
    private String username;
    /** 密码 */
    private String password;
    /** email */
    private String email;
    /** 主页地址 */
    private String homeUrl;
    /**  用户显示的名称 */
    private String screenName;
    /** 用户注册时的GMT unix时间戳 */
    private Integer created;
    /** 最后活动时间 */
    private Integer activated;
    /** 上次登录最后活跃时间 */
    private Integer logged;
    /** 用户组 */
    private String groupName;

dao层

@Mapper
@Component
public interface XXXDao {

所有的都叫给Spring管理

service层

具体的一些细致的业务

controller层

BaseController

public abstract class BaseController {
    @Autowired
    private ContentService contentService;
    @Autowired
    private MetaService metaService;
    @Autowired
    private SiteService siteService;
    protected MapCache cache = MapCache.single();
    public BaseController title(HttpServletRequest request, String title) {
        request.setAttribute("title", title);
        return this;
    }
    /**
     * 获取blog页面需要的公共数据
     * @param request
     * @return
     */
    public BaseController blogBaseData(HttpServletRequest request, ContentCond contentCond){
        List<MetaDto> links = metaService.getMetaList(Types.LINK.getType(), null,WebConst.MAX_POSTS);
        request.setAttribute("links", links);
        return this;
    }
    /**
     * 获取请求绑定的登录对象
     * @param request
     * @return
     */
    public UserDomain user(HttpServletRequest request) {
        return TaleUtils.getLoginUser(request);
    }
    public Integer getUid(HttpServletRequest request){
        return this.user(request).getUid();
    }
    /**
     * 数组转字符串
     *
     * @param arr
     * @return
     */
    public String join(String[] arr) {
        StringBuilder ret = new StringBuilder();
        String[] var3 = arr;
        int var4 = arr.length;
        for (int var5 = 0; var5 < var4; ++var5) {
            String item = var3[var5];
            ret.append(',').append(item);
        }
        return ret.length() > 0 ? ret.substring(1) : ret.toString();
    }
}
//协议集描述@Api用在Conntroller类上,swagger
@Api("文章管理")
@Controller
@RequestMapping("/admin/article")
//Spring 事务 -- @Transactional
@Transactional(rollbackFor = BusinessException.class)
public class XXXController extends BaseController {

constant

将一些常用的变量写入常量

原文创作:ML李嘉图

原文链接:https://www.cnblogs.com/zwtblog/p/15202526.html

文章列表

更多推荐

更多
  • 高效读书,实用阅读指南 高效读书,实用阅读指南,,你是否有过? 那种读书三天晒网,二天打鱼的状态,你是否经历过? 那种书读了一半,中途却不知道什么原因放弃了,你是否恨铁不成钢? 那种读书效率特别低,一本书可能会读半个世纪,自己都怀疑人生,世上怎么有如此愚
    叫练

  • Java EE 学习 82 上 - MAVEN基本安装和使用方法 - Java EE 学习 82 上MAVEN基本安装和使用方法一、Maven概述二、Ant比较Maven三、Maven的配置四、maven项目的生命周期五、两个简单项目的练习六、maven仓库  1.什么是Maven?  2.Maven有什
  • Java EE 学习 82 下 - MAVEN整合Eclipse - MAVEN的一些高级概念 - Java EE 学习 82 下MAVEN整合EclipseMAVEN的一些高级概念一、MAVEN整合Eclipse二、依赖管理三、私服四、项目练习地址  1.排除依赖  2.继承  3.部分依赖  4.聚合  1创建父工程  2修改He
  • ElasticSearch7 X X初见模仿京东搜索的实战 ElasticSearch7.X.X-初见-模仿京东搜索的实战简介ES的安装ES核心概念IK分词器插件Rest风格说明集成SpringBoot京东搜索实战慢就是快!聊聊Doug CuttingES&Solr&Lucene安装可视化界面E
  • SprinBootSpringData整合 SprinBoot-SpringData-整合SpringData整合JDBC整合Druid整合MyBatis整合Redis慢就是快!JDBCTemplate配置数据源配置Druid数据源监控整合测试测试整合序列化配置自定义redisT
  • 项目MyBlog 项目-MyBlog项目架构配置慢就是快!application-dev.ymlapplication-prod.ymlmodel层以及数据库的设计dao层service层controller层constant等技术实现, 功能齐全、部
  • 富文本编辑器SpringBoot 富文本编辑器-SpringBoot简介Editor.md基础工程搭建文章编辑整合(重点)文章展示慢就是快!数据库设计基础项目搭建图片上传问题表情包问题* [表情包问题] * [文章展示]
    简介 ========
  • 论坛项目 论坛-项目效果图数据库导入依赖导入静态资源配置文件慢就是快!bs> 博客地址: 效果图 ----------------------
  • Java爬虫小项目 Java-爬虫-小项目慢就是快!34608462-891083387.png) **项目地址** : 导入依赖,写一个工具类 ```xml
  • SpringBootWeb初见 SpringBoot-Web-初见怎么开发一个网站?静态资源首页定制模板引擎Thymeleaf员工管理系统-初见慢就是快!找到静态资源的存放目录扩展自定义路径国际化登陆功能拦截器国际化实现编写国际化配置类编写index.html设置请求
  • 近期文章

    更多
    文章目录

      推荐作者

      更多