项目

地址: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

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

项目-MyBlog的更多相关文章

  1. Django学习(一)---基本配置及创建项目、应用

    安装:在Django官网下载最新版Django然后通过pip安装即可 一.创建项目 进入文件夹,打开cmd窗口,输入django-admin startproject myblog(项目名) 二.创建 ...

  2. Django--基本篇:项目结构与设计模式(MVC)

    Django在项目开发中有着结构清晰.层次明显.容易编写理解查阅demo的优点,那么我们来个小案例具体看看.    一.项目结构简析: 我们按照上一篇中的开发流程步骤创建一个新项目myblog,项目下 ...

  3. django-1创建项目创建app设置setting、urls、templates、views等

    1. python -m django --version 查看版本 1.11.4 在需要创建项目的目录下执行: 2. django-admin startproject myblog => 创 ...

  4. (day 1)创建项目--1

    1.利用cmd(命令行)创建项目myblog 确定好项目要放在哪个directory. dir一下创建好的项目看下有什么 django自带有一个小型的服务器可通过  runserver 启动它 可取浏 ...

  5. python Django 学习笔记(六)—— 写一个简单blog做增删改练手

    简单效果图 1,创建一个项目myblog 可参考这里 myblog/ manage.py myblog/ __init__.py settings.py urls.py wsgi.py 2,创建blo ...

  6. 用dango框架搭建博客网站

    1.我早先下载了Anaconda35.0.1.但是Anaconda自带的编辑器Spyder我用的不太熟练.所以还是使用Pycharm来编辑代码.我的Pycharm试用期已经到了,所以需要注册码来使用P ...

  7. Git分布式版本控制工具

    一.安装Git  1.下载Windows版的Git:msysgit:官方下载地址:http://msysgit.github.io,安装选定要安装的目录(路径杜绝中文),剩下的按照默认安装即可,参考: ...

  8. django-2 models

    一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = >  object relation mapping  ORM ...

  9. 搭建个人博客 方式2 使用jekyll

    孙广东  2016.3.12 环境安装:1.通过 RailsInstaller  来安装 Ruby https://www.ruby-lang.org/zh_cn/documentation/inst ...

随机推荐

  1. LGP3349口胡

    建议改为:如何使用FWT直接把反演题草过去 需要清楚 FWT 的本质是什么. 首先我们有一个明显的 DP: 设 \(dp[u][x][S]\) 代表 \(u\) 在图中为 \(x\),子树包含集合 \ ...

  2. Python 基础知识自检,离深入掌握 Python 还有多远

    1. 模块化编程思想 模块化编程是 Python 的基本思想.初学 Python,都应该使用过小海龟.随机.数学模块.使用模块之前,需要导入模块,然后根据自己的问题需要使用这些模块. Python 提 ...

  3. Java案例——猫与狗(接口版)

    一.需求:对猫跟狗进行训练,加入跳高功能,采用抽象类和接口实现,并创建测试类测试 二.分析: 1.定义接口(Jummping) 成员方法 跳高(): /*定义跳高接口 * */public inter ...

  4. Mybatis结果集ResultMap映射

    基本使用: 解决属性名和数据库字段名不一致的问题 <resultMap id="user" type="com.guan.bean.UserBean"&g ...

  5. 后门及持久化访问2----进程注入之AppCertDlls 注册表项

    代码及原理介绍 如果有进程使用了CreateProcess.CreateProcessAsUser.CreateProcessWithLoginW.CreateProcessWithTokenW或Wi ...

  6. [转载]SQL注入绕过WAF的方法总结

    基本/简单绕过方法: 1.注释符 http://www.0dayhack.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4-. 2.使用 ...

  7. 《前端运维》三、Docker--1镜像与容器

    一.基本概念 如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装.那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统, ...

  8. 第九届蓝桥杯 C组 Java 等腰三角形

    目录 题目 解答 题目 题目描述 本题目要求你在控制台输出一个由数字组成的等腰三角形. 具体的步骤是: 1. 先用1,2,3,...的自然数拼一个足够长的串 2. 用这个串填充三角形的三条边.从上方顶 ...

  9. Mysql之InnoDB行格式、数据页结构

    Mysql架构图 存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB.MyISAM.Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Mem ...

  10. Redis的集群搭建(四)

    1.redis-cluster架构图 2.redis-cluster投票:容错 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2) ...