From 48f3a1be3d6262f04c3601e95ddea43ad73c2a21 Mon Sep 17 00:00:00 2001
From: zy <942628598@qq.com>
Date: Wed, 6 Nov 2019 09:51:00 +0800
Subject: [PATCH 1/3] =?UTF-8?q?blog=E5=8D=9A=E5=AE=A2=E6=A8=A1=E5=9D=97?=
=?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
rboat-blog/pom.xml | 30 +
.../controller/BlogArticleController.java | 125 +
.../controller/BlogArticleTypeController.java | 125 +
.../blog/controller/BlogFriendController.java | 125 +
.../blog/controller/BlogMasterController.java | 125 +
.../blog/controller/BlogPhotoController.java | 125 +
.../blog/controller/BlogReviewController.java | 125 +
.../blog/controller/BlogWordController.java | 125 +
.../com/rboat/blog/domain/BlogArticle.java | 150 +
.../rboat/blog/domain/BlogArticleType.java | 79 +
.../com/rboat/blog/domain/BlogFriend.java | 79 +
.../com/rboat/blog/domain/BlogMaster.java | 93 +
.../java/com/rboat/blog/domain/BlogPhoto.java | 94 +
.../com/rboat/blog/domain/BlogReview.java | 108 +
.../java/com/rboat/blog/domain/BlogWord.java | 108 +
.../rboat/blog/mapper/BlogArticleMapper.java | 61 +
.../blog/mapper/BlogArticleTypeMapper.java | 61 +
.../rboat/blog/mapper/BlogFriendMapper.java | 61 +
.../rboat/blog/mapper/BlogMasterMapper.java | 61 +
.../rboat/blog/mapper/BlogPhotoMapper.java | 61 +
.../rboat/blog/mapper/BlogReviewMapper.java | 61 +
.../com/rboat/blog/mapper/BlogWordMapper.java | 61 +
.../blog/service/IBlogArticleService.java | 61 +
.../blog/service/IBlogArticleTypeService.java | 61 +
.../blog/service/IBlogFriendService.java | 61 +
.../blog/service/IBlogMasterService.java | 61 +
.../rboat/blog/service/IBlogPhotoService.java | 61 +
.../blog/service/IBlogReviewService.java | 61 +
.../rboat/blog/service/IBlogWordService.java | 61 +
.../service/impl/BlogArticleServiceImpl.java | 94 +
.../impl/BlogArticleTypeServiceImpl.java | 94 +
.../service/impl/BlogFriendServiceImpl.java | 94 +
.../service/impl/BlogMasterServiceImpl.java | 94 +
.../service/impl/BlogPhotoServiceImpl.java | 94 +
.../service/impl/BlogReviewServiceImpl.java | 94 +
.../service/impl/BlogWordServiceImpl.java | 94 +
.../mapper/blog/BlogArticleMapper.xml | 94 +
.../mapper/blog/BlogArticleTypeMapper.xml | 69 +
.../mapper/blog/BlogFriendMapper.xml | 69 +
.../mapper/blog/BlogMasterMapper.xml | 74 +
.../resources/mapper/blog/BlogPhotoMapper.xml | 74 +
.../mapper/blog/BlogReviewMapper.xml | 79 +
.../resources/mapper/blog/BlogWordMapper.xml | 79 +
.../resources/templates/blog/article/add.html | 84 +
.../templates/blog/article/article.html | 140 +
.../templates/blog/article/edit.html | 85 +
.../resources/templates/blog/friend/add.html | 43 +
.../resources/templates/blog/friend/edit.html | 44 +
.../templates/blog/friend/friend.html | 102 +
.../resources/templates/blog/master/add.html | 52 +
.../resources/templates/blog/master/edit.html | 53 +
.../templates/blog/master/master.html | 113 +
.../resources/templates/blog/photo/add.html | 60 +
.../resources/templates/blog/photo/edit.html | 61 +
.../resources/templates/blog/photo/photo.html | 112 +
.../resources/templates/blog/review/add.html | 66 +
.../resources/templates/blog/review/edit.html | 67 +
.../templates/blog/review/review.html | 120 +
.../resources/templates/blog/type/add.html | 43 +
.../resources/templates/blog/type/edit.html | 44 +
.../resources/templates/blog/type/type.html | 102 +
.../resources/templates/blog/word/add.html | 66 +
.../resources/templates/blog/word/edit.html | 67 +
.../resources/templates/blog/word/word.html | 120 +
sql/t_blog.sql | 122 +
...6\350\210\237\345\215\232\345\256\242.pdm" | 2513 +++++++++++++++++
66 files changed, 7945 insertions(+)
create mode 100644 rboat-blog/pom.xml
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticle.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticleType.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogFriend.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogMaster.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogPhoto.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogReview.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/domain/BlogWord.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleTypeMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogFriendMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogMasterMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogPhotoMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogReviewMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/mapper/BlogWordMapper.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleTypeService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogFriendService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogMasterService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogPhotoService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogReviewService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/IBlogWordService.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleServiceImpl.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleTypeServiceImpl.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogFriendServiceImpl.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogMasterServiceImpl.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogPhotoServiceImpl.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogReviewServiceImpl.java
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogWordServiceImpl.java
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogArticleMapper.xml
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogArticleTypeMapper.xml
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogFriendMapper.xml
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogMasterMapper.xml
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogPhotoMapper.xml
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogReviewMapper.xml
create mode 100644 rboat-blog/src/main/resources/mapper/blog/BlogWordMapper.xml
create mode 100644 rboat-blog/src/main/resources/templates/blog/article/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/article/article.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/article/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/friend/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/friend/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/friend/friend.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/master/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/master/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/master/master.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/photo/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/photo/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/photo/photo.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/review/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/review/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/review/review.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/type/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/type/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/type/type.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/word/add.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/word/edit.html
create mode 100644 rboat-blog/src/main/resources/templates/blog/word/word.html
create mode 100644 sql/t_blog.sql
create mode 100644 "sql/\351\200\206\350\210\237\345\215\232\345\256\242.pdm"
diff --git a/rboat-blog/pom.xml b/rboat-blog/pom.xml
new file mode 100644
index 0000000..2209a1e
--- /dev/null
+++ b/rboat-blog/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ rboat
+ com.rboat
+ 4.0.0
+
+ 4.0.0
+
+ rboat-blog
+
+
+ 博客系统
+
+
+
+
+
+
+
+
+ com.rboat
+ rboat-common
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java
new file mode 100644
index 0000000..e725745
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogArticle;
+import com.rboat.blog.service.IBlogArticleService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 文章Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/article")
+public class BlogArticleController extends BaseController
+{
+ private String prefix = "blog/article";
+
+ @Autowired
+ private IBlogArticleService blogArticleService;
+
+ @RequiresPermissions("blog:article:view")
+ @GetMapping()
+ public String article()
+ {
+ return prefix + "/article";
+ }
+
+ /**
+ * 查询文章列表
+ */
+ @RequiresPermissions("blog:article:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogArticle blogArticle)
+ {
+ startPage();
+ List list = blogArticleService.selectBlogArticleList(blogArticle);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出文章列表
+ */
+ @RequiresPermissions("blog:article:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogArticle blogArticle)
+ {
+ List list = blogArticleService.selectBlogArticleList(blogArticle);
+ ExcelUtil util = new ExcelUtil(BlogArticle.class);
+ return util.exportExcel(list, "article");
+ }
+
+ /**
+ * 新增文章
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存文章
+ */
+ @RequiresPermissions("blog:article:add")
+ @Log(title = "文章", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogArticle blogArticle)
+ {
+ return toAjax(blogArticleService.insertBlogArticle(blogArticle));
+ }
+
+ /**
+ * 修改文章
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogArticle blogArticle = blogArticleService.selectBlogArticleById(id);
+ mmap.put("blogArticle", blogArticle);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存文章
+ */
+ @RequiresPermissions("blog:article:edit")
+ @Log(title = "文章", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogArticle blogArticle)
+ {
+ return toAjax(blogArticleService.updateBlogArticle(blogArticle));
+ }
+
+ /**
+ * 删除文章
+ */
+ @RequiresPermissions("blog:article:remove")
+ @Log(title = "文章", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogArticleService.deleteBlogArticleByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java
new file mode 100644
index 0000000..0f944a0
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogArticleType;
+import com.rboat.blog.service.IBlogArticleTypeService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 文章类型Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/type")
+public class BlogArticleTypeController extends BaseController
+{
+ private String prefix = "blog/type";
+
+ @Autowired
+ private IBlogArticleTypeService blogArticleTypeService;
+
+ @RequiresPermissions("blog:type:view")
+ @GetMapping()
+ public String type()
+ {
+ return prefix + "/type";
+ }
+
+ /**
+ * 查询文章类型列表
+ */
+ @RequiresPermissions("blog:type:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogArticleType blogArticleType)
+ {
+ startPage();
+ List list = blogArticleTypeService.selectBlogArticleTypeList(blogArticleType);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出文章类型列表
+ */
+ @RequiresPermissions("blog:type:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogArticleType blogArticleType)
+ {
+ List list = blogArticleTypeService.selectBlogArticleTypeList(blogArticleType);
+ ExcelUtil util = new ExcelUtil(BlogArticleType.class);
+ return util.exportExcel(list, "type");
+ }
+
+ /**
+ * 新增文章类型
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存文章类型
+ */
+ @RequiresPermissions("blog:type:add")
+ @Log(title = "文章类型", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogArticleType blogArticleType)
+ {
+ return toAjax(blogArticleTypeService.insertBlogArticleType(blogArticleType));
+ }
+
+ /**
+ * 修改文章类型
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogArticleType blogArticleType = blogArticleTypeService.selectBlogArticleTypeById(id);
+ mmap.put("blogArticleType", blogArticleType);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存文章类型
+ */
+ @RequiresPermissions("blog:type:edit")
+ @Log(title = "文章类型", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogArticleType blogArticleType)
+ {
+ return toAjax(blogArticleTypeService.updateBlogArticleType(blogArticleType));
+ }
+
+ /**
+ * 删除文章类型
+ */
+ @RequiresPermissions("blog:type:remove")
+ @Log(title = "文章类型", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogArticleTypeService.deleteBlogArticleTypeByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java
new file mode 100644
index 0000000..7bdfef4
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogFriend;
+import com.rboat.blog.service.IBlogFriendService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 好友Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/friend")
+public class BlogFriendController extends BaseController
+{
+ private String prefix = "blog/friend";
+
+ @Autowired
+ private IBlogFriendService blogFriendService;
+
+ @RequiresPermissions("blog:friend:view")
+ @GetMapping()
+ public String friend()
+ {
+ return prefix + "/friend";
+ }
+
+ /**
+ * 查询好友列表
+ */
+ @RequiresPermissions("blog:friend:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogFriend blogFriend)
+ {
+ startPage();
+ List list = blogFriendService.selectBlogFriendList(blogFriend);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出好友列表
+ */
+ @RequiresPermissions("blog:friend:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogFriend blogFriend)
+ {
+ List list = blogFriendService.selectBlogFriendList(blogFriend);
+ ExcelUtil util = new ExcelUtil(BlogFriend.class);
+ return util.exportExcel(list, "friend");
+ }
+
+ /**
+ * 新增好友
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存好友
+ */
+ @RequiresPermissions("blog:friend:add")
+ @Log(title = "好友", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogFriend blogFriend)
+ {
+ return toAjax(blogFriendService.insertBlogFriend(blogFriend));
+ }
+
+ /**
+ * 修改好友
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogFriend blogFriend = blogFriendService.selectBlogFriendById(id);
+ mmap.put("blogFriend", blogFriend);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存好友
+ */
+ @RequiresPermissions("blog:friend:edit")
+ @Log(title = "好友", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogFriend blogFriend)
+ {
+ return toAjax(blogFriendService.updateBlogFriend(blogFriend));
+ }
+
+ /**
+ * 删除好友
+ */
+ @RequiresPermissions("blog:friend:remove")
+ @Log(title = "好友", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogFriendService.deleteBlogFriendByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java
new file mode 100644
index 0000000..122b7b7
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogMaster;
+import com.rboat.blog.service.IBlogMasterService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 博主Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/master")
+public class BlogMasterController extends BaseController
+{
+ private String prefix = "blog/master";
+
+ @Autowired
+ private IBlogMasterService blogMasterService;
+
+ @RequiresPermissions("blog:master:view")
+ @GetMapping()
+ public String master()
+ {
+ return prefix + "/master";
+ }
+
+ /**
+ * 查询博主列表
+ */
+ @RequiresPermissions("blog:master:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogMaster blogMaster)
+ {
+ startPage();
+ List list = blogMasterService.selectBlogMasterList(blogMaster);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出博主列表
+ */
+ @RequiresPermissions("blog:master:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogMaster blogMaster)
+ {
+ List list = blogMasterService.selectBlogMasterList(blogMaster);
+ ExcelUtil util = new ExcelUtil(BlogMaster.class);
+ return util.exportExcel(list, "master");
+ }
+
+ /**
+ * 新增博主
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存博主
+ */
+ @RequiresPermissions("blog:master:add")
+ @Log(title = "博主", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogMaster blogMaster)
+ {
+ return toAjax(blogMasterService.insertBlogMaster(blogMaster));
+ }
+
+ /**
+ * 修改博主
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogMaster blogMaster = blogMasterService.selectBlogMasterById(id);
+ mmap.put("blogMaster", blogMaster);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存博主
+ */
+ @RequiresPermissions("blog:master:edit")
+ @Log(title = "博主", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogMaster blogMaster)
+ {
+ return toAjax(blogMasterService.updateBlogMaster(blogMaster));
+ }
+
+ /**
+ * 删除博主
+ */
+ @RequiresPermissions("blog:master:remove")
+ @Log(title = "博主", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogMasterService.deleteBlogMasterByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java
new file mode 100644
index 0000000..b76df42
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogPhoto;
+import com.rboat.blog.service.IBlogPhotoService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 相册Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/photo")
+public class BlogPhotoController extends BaseController
+{
+ private String prefix = "blog/photo";
+
+ @Autowired
+ private IBlogPhotoService blogPhotoService;
+
+ @RequiresPermissions("blog:photo:view")
+ @GetMapping()
+ public String photo()
+ {
+ return prefix + "/photo";
+ }
+
+ /**
+ * 查询相册列表
+ */
+ @RequiresPermissions("blog:photo:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogPhoto blogPhoto)
+ {
+ startPage();
+ List list = blogPhotoService.selectBlogPhotoList(blogPhoto);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出相册列表
+ */
+ @RequiresPermissions("blog:photo:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogPhoto blogPhoto)
+ {
+ List list = blogPhotoService.selectBlogPhotoList(blogPhoto);
+ ExcelUtil util = new ExcelUtil(BlogPhoto.class);
+ return util.exportExcel(list, "photo");
+ }
+
+ /**
+ * 新增相册
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存相册
+ */
+ @RequiresPermissions("blog:photo:add")
+ @Log(title = "相册", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogPhoto blogPhoto)
+ {
+ return toAjax(blogPhotoService.insertBlogPhoto(blogPhoto));
+ }
+
+ /**
+ * 修改相册
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogPhoto blogPhoto = blogPhotoService.selectBlogPhotoById(id);
+ mmap.put("blogPhoto", blogPhoto);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存相册
+ */
+ @RequiresPermissions("blog:photo:edit")
+ @Log(title = "相册", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogPhoto blogPhoto)
+ {
+ return toAjax(blogPhotoService.updateBlogPhoto(blogPhoto));
+ }
+
+ /**
+ * 删除相册
+ */
+ @RequiresPermissions("blog:photo:remove")
+ @Log(title = "相册", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogPhotoService.deleteBlogPhotoByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java
new file mode 100644
index 0000000..8d1becd
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogReview;
+import com.rboat.blog.service.IBlogReviewService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 评论Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/review")
+public class BlogReviewController extends BaseController
+{
+ private String prefix = "blog/review";
+
+ @Autowired
+ private IBlogReviewService blogReviewService;
+
+ @RequiresPermissions("blog:review:view")
+ @GetMapping()
+ public String review()
+ {
+ return prefix + "/review";
+ }
+
+ /**
+ * 查询评论列表
+ */
+ @RequiresPermissions("blog:review:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogReview blogReview)
+ {
+ startPage();
+ List list = blogReviewService.selectBlogReviewList(blogReview);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出评论列表
+ */
+ @RequiresPermissions("blog:review:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogReview blogReview)
+ {
+ List list = blogReviewService.selectBlogReviewList(blogReview);
+ ExcelUtil util = new ExcelUtil(BlogReview.class);
+ return util.exportExcel(list, "review");
+ }
+
+ /**
+ * 新增评论
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存评论
+ */
+ @RequiresPermissions("blog:review:add")
+ @Log(title = "评论", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogReview blogReview)
+ {
+ return toAjax(blogReviewService.insertBlogReview(blogReview));
+ }
+
+ /**
+ * 修改评论
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogReview blogReview = blogReviewService.selectBlogReviewById(id);
+ mmap.put("blogReview", blogReview);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存评论
+ */
+ @RequiresPermissions("blog:review:edit")
+ @Log(title = "评论", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogReview blogReview)
+ {
+ return toAjax(blogReviewService.updateBlogReview(blogReview));
+ }
+
+ /**
+ * 删除评论
+ */
+ @RequiresPermissions("blog:review:remove")
+ @Log(title = "评论", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogReviewService.deleteBlogReviewByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java
new file mode 100644
index 0000000..2e4396f
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java
@@ -0,0 +1,125 @@
+package com.rboat.web.controller.blog;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.rboat.common.annotation.Log;
+import com.rboat.common.enums.BusinessType;
+import com.rboat.blog.domain.BlogWord;
+import com.rboat.blog.service.IBlogWordService;
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.core.domain.AjaxResult;
+import com.rboat.common.utils.poi.ExcelUtil;
+import com.rboat.common.core.page.TableDataInfo;
+
+/**
+ * 留言Controller
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Controller
+@RequestMapping("/blog/word")
+public class BlogWordController extends BaseController
+{
+ private String prefix = "blog/word";
+
+ @Autowired
+ private IBlogWordService blogWordService;
+
+ @RequiresPermissions("blog:word:view")
+ @GetMapping()
+ public String word()
+ {
+ return prefix + "/word";
+ }
+
+ /**
+ * 查询留言列表
+ */
+ @RequiresPermissions("blog:word:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(BlogWord blogWord)
+ {
+ startPage();
+ List list = blogWordService.selectBlogWordList(blogWord);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出留言列表
+ */
+ @RequiresPermissions("blog:word:export")
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(BlogWord blogWord)
+ {
+ List list = blogWordService.selectBlogWordList(blogWord);
+ ExcelUtil util = new ExcelUtil(BlogWord.class);
+ return util.exportExcel(list, "word");
+ }
+
+ /**
+ * 新增留言
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存留言
+ */
+ @RequiresPermissions("blog:word:add")
+ @Log(title = "留言", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(BlogWord blogWord)
+ {
+ return toAjax(blogWordService.insertBlogWord(blogWord));
+ }
+
+ /**
+ * 修改留言
+ */
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") String id, ModelMap mmap)
+ {
+ BlogWord blogWord = blogWordService.selectBlogWordById(id);
+ mmap.put("blogWord", blogWord);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存留言
+ */
+ @RequiresPermissions("blog:word:edit")
+ @Log(title = "留言", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(BlogWord blogWord)
+ {
+ return toAjax(blogWordService.updateBlogWord(blogWord));
+ }
+
+ /**
+ * 删除留言
+ */
+ @RequiresPermissions("blog:word:remove")
+ @Log(title = "留言", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(blogWordService.deleteBlogWordByIds(ids));
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticle.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticle.java
new file mode 100644
index 0000000..6f8a312
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticle.java
@@ -0,0 +1,150 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+import java.util.Date;
+
+/**
+ * 文章对象 blog_article
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogArticle extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 文章类型id */
+ @Excel(name = "文章类型id")
+ private String articleTypeId;
+
+ /** 文章标题 */
+ @Excel(name = "文章标题")
+ private String articleTitle;
+
+ /** 文章信息 */
+ @Excel(name = "文章信息")
+ private String articleInfo;
+
+ /** 文章内容 */
+ @Excel(name = "文章内容")
+ private String articleContent;
+
+ /** 发布时间 */
+ @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date articlePublishTime;
+
+ /** 阅读数(自增) */
+ @Excel(name = "阅读数(自增)")
+ private Long articleCount;
+
+ /** 文章来源(0:原创;1:转载) */
+ @Excel(name = "文章来源(0:原创;1:转载)")
+ private Long articleFrom;
+
+ /** 博主id */
+ @Excel(name = "博主id")
+ private String articleMasterId;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setArticleTypeId(String articleTypeId)
+ {
+ this.articleTypeId = articleTypeId;
+ }
+
+ public String getArticleTypeId()
+ {
+ return articleTypeId;
+ }
+ public void setArticleTitle(String articleTitle)
+ {
+ this.articleTitle = articleTitle;
+ }
+
+ public String getArticleTitle()
+ {
+ return articleTitle;
+ }
+ public void setArticleInfo(String articleInfo)
+ {
+ this.articleInfo = articleInfo;
+ }
+
+ public String getArticleInfo()
+ {
+ return articleInfo;
+ }
+ public void setArticleContent(String articleContent)
+ {
+ this.articleContent = articleContent;
+ }
+
+ public String getArticleContent()
+ {
+ return articleContent;
+ }
+ public void setArticlePublishTime(Date articlePublishTime)
+ {
+ this.articlePublishTime = articlePublishTime;
+ }
+
+ public Date getArticlePublishTime()
+ {
+ return articlePublishTime;
+ }
+ public void setArticleCount(Long articleCount)
+ {
+ this.articleCount = articleCount;
+ }
+
+ public Long getArticleCount()
+ {
+ return articleCount;
+ }
+ public void setArticleFrom(Long articleFrom)
+ {
+ this.articleFrom = articleFrom;
+ }
+
+ public Long getArticleFrom()
+ {
+ return articleFrom;
+ }
+ public void setArticleMasterId(String articleMasterId)
+ {
+ this.articleMasterId = articleMasterId;
+ }
+
+ public String getArticleMasterId()
+ {
+ return articleMasterId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("articleTypeId", getArticleTypeId())
+ .append("articleTitle", getArticleTitle())
+ .append("articleInfo", getArticleInfo())
+ .append("articleContent", getArticleContent())
+ .append("articlePublishTime", getArticlePublishTime())
+ .append("articleCount", getArticleCount())
+ .append("articleFrom", getArticleFrom())
+ .append("articleMasterId", getArticleMasterId())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticleType.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticleType.java
new file mode 100644
index 0000000..38e0c1c
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogArticleType.java
@@ -0,0 +1,79 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+
+/**
+ * 文章类型对象 blog_article_type
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogArticleType extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 类型名称 */
+ @Excel(name = "类型名称")
+ private String name;
+
+ /** 父级id */
+ @Excel(name = "父级id")
+ private String parent;
+
+ /** 描述信息 */
+ @Excel(name = "描述信息")
+ private String info;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setParent(String parent)
+ {
+ this.parent = parent;
+ }
+
+ public String getParent()
+ {
+ return parent;
+ }
+ public void setInfo(String info)
+ {
+ this.info = info;
+ }
+
+ public String getInfo()
+ {
+ return info;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("name", getName())
+ .append("parent", getParent())
+ .append("info", getInfo())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogFriend.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogFriend.java
new file mode 100644
index 0000000..4cd0f62
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogFriend.java
@@ -0,0 +1,79 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+
+/**
+ * 好友对象 blog_friend
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogFriend extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 博主id */
+ @Excel(name = "博主id")
+ private String friendMasterId;
+
+ /** 好友的id */
+ @Excel(name = "好友的id")
+ private String friendFriendId;
+
+ /** 好友备注名 */
+ @Excel(name = "好友备注名")
+ private String friendReName;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setFriendMasterId(String friendMasterId)
+ {
+ this.friendMasterId = friendMasterId;
+ }
+
+ public String getFriendMasterId()
+ {
+ return friendMasterId;
+ }
+ public void setFriendFriendId(String friendFriendId)
+ {
+ this.friendFriendId = friendFriendId;
+ }
+
+ public String getFriendFriendId()
+ {
+ return friendFriendId;
+ }
+ public void setFriendReName(String friendReName)
+ {
+ this.friendReName = friendReName;
+ }
+
+ public String getFriendReName()
+ {
+ return friendReName;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("friendMasterId", getFriendMasterId())
+ .append("friendFriendId", getFriendFriendId())
+ .append("friendReName", getFriendReName())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogMaster.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogMaster.java
new file mode 100644
index 0000000..d5e437f
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogMaster.java
@@ -0,0 +1,93 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+
+/**
+ * 博主对象 blog_master
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogMaster extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 博主名称 */
+ @Excel(name = "博主名称")
+ private String masterName;
+
+ /** 密码 */
+ @Excel(name = "密码")
+ private String masterPassword;
+
+ /** 博主oicq(三方id) */
+ @Excel(name = "博主oicq(三方id)")
+ private String masterOicq;
+
+ /** 0:女;1:男 */
+ @Excel(name = "0:女;1:男")
+ private String masterSex;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setMasterName(String masterName)
+ {
+ this.masterName = masterName;
+ }
+
+ public String getMasterName()
+ {
+ return masterName;
+ }
+ public void setMasterPassword(String masterPassword)
+ {
+ this.masterPassword = masterPassword;
+ }
+
+ public String getMasterPassword()
+ {
+ return masterPassword;
+ }
+ public void setMasterOicq(String masterOicq)
+ {
+ this.masterOicq = masterOicq;
+ }
+
+ public String getMasterOicq()
+ {
+ return masterOicq;
+ }
+ public void setMasterSex(String masterSex)
+ {
+ this.masterSex = masterSex;
+ }
+
+ public String getMasterSex()
+ {
+ return masterSex;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("masterName", getMasterName())
+ .append("masterPassword", getMasterPassword())
+ .append("masterOicq", getMasterOicq())
+ .append("masterSex", getMasterSex())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogPhoto.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogPhoto.java
new file mode 100644
index 0000000..539b126
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogPhoto.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+import java.util.Date;
+
+/**
+ * 相册对象 blog_photo
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogPhoto extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 图片存放地址 */
+ @Excel(name = "图片存放地址")
+ private String photoAddr;
+
+ /** 上传日期 */
+ @Excel(name = "上传日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date photoAddTime;
+
+ /** 图片备注 */
+ @Excel(name = "图片备注")
+ private String photoInfo;
+
+ /** 上传人(博主) */
+ @Excel(name = "上传人(博主)")
+ private String photoMasterId;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setPhotoAddr(String photoAddr)
+ {
+ this.photoAddr = photoAddr;
+ }
+
+ public String getPhotoAddr()
+ {
+ return photoAddr;
+ }
+ public void setPhotoAddTime(Date photoAddTime)
+ {
+ this.photoAddTime = photoAddTime;
+ }
+
+ public Date getPhotoAddTime()
+ {
+ return photoAddTime;
+ }
+ public void setPhotoInfo(String photoInfo)
+ {
+ this.photoInfo = photoInfo;
+ }
+
+ public String getPhotoInfo()
+ {
+ return photoInfo;
+ }
+ public void setPhotoMasterId(String photoMasterId)
+ {
+ this.photoMasterId = photoMasterId;
+ }
+
+ public String getPhotoMasterId()
+ {
+ return photoMasterId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("photoAddr", getPhotoAddr())
+ .append("photoAddTime", getPhotoAddTime())
+ .append("photoInfo", getPhotoInfo())
+ .append("photoMasterId", getPhotoMasterId())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogReview.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogReview.java
new file mode 100644
index 0000000..a520b42
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogReview.java
@@ -0,0 +1,108 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+import java.util.Date;
+
+/**
+ * 评论对象 blog_review
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogReview extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 评论的文章id */
+ @Excel(name = "评论的文章id")
+ private String reviewArticleid;
+
+ /** 博主id */
+ @Excel(name = "博主id")
+ private String reviewMasterId;
+
+ /** 评论的作者id */
+ @Excel(name = "评论的作者id")
+ private String reviewAuthorId;
+
+ /** 评论内容 */
+ @Excel(name = "评论内容")
+ private String reviewContent;
+
+ /** 评论时间 */
+ @Excel(name = "评论时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date reviewTime;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setReviewArticleid(String reviewArticleid)
+ {
+ this.reviewArticleid = reviewArticleid;
+ }
+
+ public String getReviewArticleid()
+ {
+ return reviewArticleid;
+ }
+ public void setReviewMasterId(String reviewMasterId)
+ {
+ this.reviewMasterId = reviewMasterId;
+ }
+
+ public String getReviewMasterId()
+ {
+ return reviewMasterId;
+ }
+ public void setReviewAuthorId(String reviewAuthorId)
+ {
+ this.reviewAuthorId = reviewAuthorId;
+ }
+
+ public String getReviewAuthorId()
+ {
+ return reviewAuthorId;
+ }
+ public void setReviewContent(String reviewContent)
+ {
+ this.reviewContent = reviewContent;
+ }
+
+ public String getReviewContent()
+ {
+ return reviewContent;
+ }
+ public void setReviewTime(Date reviewTime)
+ {
+ this.reviewTime = reviewTime;
+ }
+
+ public Date getReviewTime()
+ {
+ return reviewTime;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("reviewArticleid", getReviewArticleid())
+ .append("reviewMasterId", getReviewMasterId())
+ .append("reviewAuthorId", getReviewAuthorId())
+ .append("reviewContent", getReviewContent())
+ .append("reviewTime", getReviewTime())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/domain/BlogWord.java b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogWord.java
new file mode 100644
index 0000000..832c4fa
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/domain/BlogWord.java
@@ -0,0 +1,108 @@
+package com.rboat.blog.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.rboat.common.annotation.Excel;
+import com.rboat.common.core.domain.BaseEntity;
+import java.util.Date;
+
+/**
+ * 留言对象 blog_word
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public class BlogWord extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键id */
+ private String id;
+
+ /** 留言标题 */
+ @Excel(name = "留言标题")
+ private String wordTitle;
+
+ /** 留言内容 */
+ @Excel(name = "留言内容")
+ private String wordContent;
+
+ /** 留言的时间 */
+ @Excel(name = "留言的时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date wordTime;
+
+ /** 留言的作者id */
+ @Excel(name = "留言的作者id")
+ private String wordAuthorId;
+
+ /** 留言的对象id(博主id) */
+ @Excel(name = "留言的对象id(博主id)")
+ private String wordMasterId;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setWordTitle(String wordTitle)
+ {
+ this.wordTitle = wordTitle;
+ }
+
+ public String getWordTitle()
+ {
+ return wordTitle;
+ }
+ public void setWordContent(String wordContent)
+ {
+ this.wordContent = wordContent;
+ }
+
+ public String getWordContent()
+ {
+ return wordContent;
+ }
+ public void setWordTime(Date wordTime)
+ {
+ this.wordTime = wordTime;
+ }
+
+ public Date getWordTime()
+ {
+ return wordTime;
+ }
+ public void setWordAuthorId(String wordAuthorId)
+ {
+ this.wordAuthorId = wordAuthorId;
+ }
+
+ public String getWordAuthorId()
+ {
+ return wordAuthorId;
+ }
+ public void setWordMasterId(String wordMasterId)
+ {
+ this.wordMasterId = wordMasterId;
+ }
+
+ public String getWordMasterId()
+ {
+ return wordMasterId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("wordTitle", getWordTitle())
+ .append("wordContent", getWordContent())
+ .append("wordTime", getWordTime())
+ .append("wordAuthorId", getWordAuthorId())
+ .append("wordMasterId", getWordMasterId())
+ .toString();
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleMapper.java
new file mode 100644
index 0000000..50f8528
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogArticle;
+import java.util.List;
+
+/**
+ * 文章Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogArticleMapper
+{
+ /**
+ * 查询文章
+ *
+ * @param id 文章ID
+ * @return 文章
+ */
+ public BlogArticle selectBlogArticleById(String id);
+
+ /**
+ * 查询文章列表
+ *
+ * @param blogArticle 文章
+ * @return 文章集合
+ */
+ public List selectBlogArticleList(BlogArticle blogArticle);
+
+ /**
+ * 新增文章
+ *
+ * @param blogArticle 文章
+ * @return 结果
+ */
+ public int insertBlogArticle(BlogArticle blogArticle);
+
+ /**
+ * 修改文章
+ *
+ * @param blogArticle 文章
+ * @return 结果
+ */
+ public int updateBlogArticle(BlogArticle blogArticle);
+
+ /**
+ * 删除文章
+ *
+ * @param id 文章ID
+ * @return 结果
+ */
+ public int deleteBlogArticleById(String id);
+
+ /**
+ * 批量删除文章
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogArticleByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleTypeMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleTypeMapper.java
new file mode 100644
index 0000000..b932a73
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogArticleTypeMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogArticleType;
+import java.util.List;
+
+/**
+ * 文章类型Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogArticleTypeMapper
+{
+ /**
+ * 查询文章类型
+ *
+ * @param id 文章类型ID
+ * @return 文章类型
+ */
+ public BlogArticleType selectBlogArticleTypeById(String id);
+
+ /**
+ * 查询文章类型列表
+ *
+ * @param blogArticleType 文章类型
+ * @return 文章类型集合
+ */
+ public List selectBlogArticleTypeList(BlogArticleType blogArticleType);
+
+ /**
+ * 新增文章类型
+ *
+ * @param blogArticleType 文章类型
+ * @return 结果
+ */
+ public int insertBlogArticleType(BlogArticleType blogArticleType);
+
+ /**
+ * 修改文章类型
+ *
+ * @param blogArticleType 文章类型
+ * @return 结果
+ */
+ public int updateBlogArticleType(BlogArticleType blogArticleType);
+
+ /**
+ * 删除文章类型
+ *
+ * @param id 文章类型ID
+ * @return 结果
+ */
+ public int deleteBlogArticleTypeById(String id);
+
+ /**
+ * 批量删除文章类型
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogArticleTypeByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogFriendMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogFriendMapper.java
new file mode 100644
index 0000000..4abd5dc
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogFriendMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogFriend;
+import java.util.List;
+
+/**
+ * 好友Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogFriendMapper
+{
+ /**
+ * 查询好友
+ *
+ * @param id 好友ID
+ * @return 好友
+ */
+ public BlogFriend selectBlogFriendById(String id);
+
+ /**
+ * 查询好友列表
+ *
+ * @param blogFriend 好友
+ * @return 好友集合
+ */
+ public List selectBlogFriendList(BlogFriend blogFriend);
+
+ /**
+ * 新增好友
+ *
+ * @param blogFriend 好友
+ * @return 结果
+ */
+ public int insertBlogFriend(BlogFriend blogFriend);
+
+ /**
+ * 修改好友
+ *
+ * @param blogFriend 好友
+ * @return 结果
+ */
+ public int updateBlogFriend(BlogFriend blogFriend);
+
+ /**
+ * 删除好友
+ *
+ * @param id 好友ID
+ * @return 结果
+ */
+ public int deleteBlogFriendById(String id);
+
+ /**
+ * 批量删除好友
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogFriendByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogMasterMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogMasterMapper.java
new file mode 100644
index 0000000..54e3c4f
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogMasterMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogMaster;
+import java.util.List;
+
+/**
+ * 博主Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogMasterMapper
+{
+ /**
+ * 查询博主
+ *
+ * @param id 博主ID
+ * @return 博主
+ */
+ public BlogMaster selectBlogMasterById(String id);
+
+ /**
+ * 查询博主列表
+ *
+ * @param blogMaster 博主
+ * @return 博主集合
+ */
+ public List selectBlogMasterList(BlogMaster blogMaster);
+
+ /**
+ * 新增博主
+ *
+ * @param blogMaster 博主
+ * @return 结果
+ */
+ public int insertBlogMaster(BlogMaster blogMaster);
+
+ /**
+ * 修改博主
+ *
+ * @param blogMaster 博主
+ * @return 结果
+ */
+ public int updateBlogMaster(BlogMaster blogMaster);
+
+ /**
+ * 删除博主
+ *
+ * @param id 博主ID
+ * @return 结果
+ */
+ public int deleteBlogMasterById(String id);
+
+ /**
+ * 批量删除博主
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogMasterByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogPhotoMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogPhotoMapper.java
new file mode 100644
index 0000000..47b47ca
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogPhotoMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogPhoto;
+import java.util.List;
+
+/**
+ * 相册Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogPhotoMapper
+{
+ /**
+ * 查询相册
+ *
+ * @param id 相册ID
+ * @return 相册
+ */
+ public BlogPhoto selectBlogPhotoById(String id);
+
+ /**
+ * 查询相册列表
+ *
+ * @param blogPhoto 相册
+ * @return 相册集合
+ */
+ public List selectBlogPhotoList(BlogPhoto blogPhoto);
+
+ /**
+ * 新增相册
+ *
+ * @param blogPhoto 相册
+ * @return 结果
+ */
+ public int insertBlogPhoto(BlogPhoto blogPhoto);
+
+ /**
+ * 修改相册
+ *
+ * @param blogPhoto 相册
+ * @return 结果
+ */
+ public int updateBlogPhoto(BlogPhoto blogPhoto);
+
+ /**
+ * 删除相册
+ *
+ * @param id 相册ID
+ * @return 结果
+ */
+ public int deleteBlogPhotoById(String id);
+
+ /**
+ * 批量删除相册
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogPhotoByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogReviewMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogReviewMapper.java
new file mode 100644
index 0000000..cca2f04
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogReviewMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogReview;
+import java.util.List;
+
+/**
+ * 评论Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogReviewMapper
+{
+ /**
+ * 查询评论
+ *
+ * @param id 评论ID
+ * @return 评论
+ */
+ public BlogReview selectBlogReviewById(String id);
+
+ /**
+ * 查询评论列表
+ *
+ * @param blogReview 评论
+ * @return 评论集合
+ */
+ public List selectBlogReviewList(BlogReview blogReview);
+
+ /**
+ * 新增评论
+ *
+ * @param blogReview 评论
+ * @return 结果
+ */
+ public int insertBlogReview(BlogReview blogReview);
+
+ /**
+ * 修改评论
+ *
+ * @param blogReview 评论
+ * @return 结果
+ */
+ public int updateBlogReview(BlogReview blogReview);
+
+ /**
+ * 删除评论
+ *
+ * @param id 评论ID
+ * @return 结果
+ */
+ public int deleteBlogReviewById(String id);
+
+ /**
+ * 批量删除评论
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogReviewByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogWordMapper.java b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogWordMapper.java
new file mode 100644
index 0000000..61a3076
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/mapper/BlogWordMapper.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.mapper;
+
+import com.rboat.blog.domain.BlogWord;
+import java.util.List;
+
+/**
+ * 留言Mapper接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface BlogWordMapper
+{
+ /**
+ * 查询留言
+ *
+ * @param id 留言ID
+ * @return 留言
+ */
+ public BlogWord selectBlogWordById(String id);
+
+ /**
+ * 查询留言列表
+ *
+ * @param blogWord 留言
+ * @return 留言集合
+ */
+ public List selectBlogWordList(BlogWord blogWord);
+
+ /**
+ * 新增留言
+ *
+ * @param blogWord 留言
+ * @return 结果
+ */
+ public int insertBlogWord(BlogWord blogWord);
+
+ /**
+ * 修改留言
+ *
+ * @param blogWord 留言
+ * @return 结果
+ */
+ public int updateBlogWord(BlogWord blogWord);
+
+ /**
+ * 删除留言
+ *
+ * @param id 留言ID
+ * @return 结果
+ */
+ public int deleteBlogWordById(String id);
+
+ /**
+ * 批量删除留言
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogWordByIds(String[] ids);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleService.java
new file mode 100644
index 0000000..54cb4b7
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogArticle;
+import java.util.List;
+
+/**
+ * 文章Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogArticleService
+{
+ /**
+ * 查询文章
+ *
+ * @param id 文章ID
+ * @return 文章
+ */
+ public BlogArticle selectBlogArticleById(String id);
+
+ /**
+ * 查询文章列表
+ *
+ * @param blogArticle 文章
+ * @return 文章集合
+ */
+ public List selectBlogArticleList(BlogArticle blogArticle);
+
+ /**
+ * 新增文章
+ *
+ * @param blogArticle 文章
+ * @return 结果
+ */
+ public int insertBlogArticle(BlogArticle blogArticle);
+
+ /**
+ * 修改文章
+ *
+ * @param blogArticle 文章
+ * @return 结果
+ */
+ public int updateBlogArticle(BlogArticle blogArticle);
+
+ /**
+ * 批量删除文章
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogArticleByIds(String ids);
+
+ /**
+ * 删除文章信息
+ *
+ * @param id 文章ID
+ * @return 结果
+ */
+ public int deleteBlogArticleById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleTypeService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleTypeService.java
new file mode 100644
index 0000000..23ce91d
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogArticleTypeService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogArticleType;
+import java.util.List;
+
+/**
+ * 文章类型Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogArticleTypeService
+{
+ /**
+ * 查询文章类型
+ *
+ * @param id 文章类型ID
+ * @return 文章类型
+ */
+ public BlogArticleType selectBlogArticleTypeById(String id);
+
+ /**
+ * 查询文章类型列表
+ *
+ * @param blogArticleType 文章类型
+ * @return 文章类型集合
+ */
+ public List selectBlogArticleTypeList(BlogArticleType blogArticleType);
+
+ /**
+ * 新增文章类型
+ *
+ * @param blogArticleType 文章类型
+ * @return 结果
+ */
+ public int insertBlogArticleType(BlogArticleType blogArticleType);
+
+ /**
+ * 修改文章类型
+ *
+ * @param blogArticleType 文章类型
+ * @return 结果
+ */
+ public int updateBlogArticleType(BlogArticleType blogArticleType);
+
+ /**
+ * 批量删除文章类型
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogArticleTypeByIds(String ids);
+
+ /**
+ * 删除文章类型信息
+ *
+ * @param id 文章类型ID
+ * @return 结果
+ */
+ public int deleteBlogArticleTypeById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogFriendService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogFriendService.java
new file mode 100644
index 0000000..0977686
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogFriendService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogFriend;
+import java.util.List;
+
+/**
+ * 好友Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogFriendService
+{
+ /**
+ * 查询好友
+ *
+ * @param id 好友ID
+ * @return 好友
+ */
+ public BlogFriend selectBlogFriendById(String id);
+
+ /**
+ * 查询好友列表
+ *
+ * @param blogFriend 好友
+ * @return 好友集合
+ */
+ public List selectBlogFriendList(BlogFriend blogFriend);
+
+ /**
+ * 新增好友
+ *
+ * @param blogFriend 好友
+ * @return 结果
+ */
+ public int insertBlogFriend(BlogFriend blogFriend);
+
+ /**
+ * 修改好友
+ *
+ * @param blogFriend 好友
+ * @return 结果
+ */
+ public int updateBlogFriend(BlogFriend blogFriend);
+
+ /**
+ * 批量删除好友
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogFriendByIds(String ids);
+
+ /**
+ * 删除好友信息
+ *
+ * @param id 好友ID
+ * @return 结果
+ */
+ public int deleteBlogFriendById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogMasterService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogMasterService.java
new file mode 100644
index 0000000..e2f7225
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogMasterService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogMaster;
+import java.util.List;
+
+/**
+ * 博主Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogMasterService
+{
+ /**
+ * 查询博主
+ *
+ * @param id 博主ID
+ * @return 博主
+ */
+ public BlogMaster selectBlogMasterById(String id);
+
+ /**
+ * 查询博主列表
+ *
+ * @param blogMaster 博主
+ * @return 博主集合
+ */
+ public List selectBlogMasterList(BlogMaster blogMaster);
+
+ /**
+ * 新增博主
+ *
+ * @param blogMaster 博主
+ * @return 结果
+ */
+ public int insertBlogMaster(BlogMaster blogMaster);
+
+ /**
+ * 修改博主
+ *
+ * @param blogMaster 博主
+ * @return 结果
+ */
+ public int updateBlogMaster(BlogMaster blogMaster);
+
+ /**
+ * 批量删除博主
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogMasterByIds(String ids);
+
+ /**
+ * 删除博主信息
+ *
+ * @param id 博主ID
+ * @return 结果
+ */
+ public int deleteBlogMasterById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogPhotoService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogPhotoService.java
new file mode 100644
index 0000000..08a2238
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogPhotoService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogPhoto;
+import java.util.List;
+
+/**
+ * 相册Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogPhotoService
+{
+ /**
+ * 查询相册
+ *
+ * @param id 相册ID
+ * @return 相册
+ */
+ public BlogPhoto selectBlogPhotoById(String id);
+
+ /**
+ * 查询相册列表
+ *
+ * @param blogPhoto 相册
+ * @return 相册集合
+ */
+ public List selectBlogPhotoList(BlogPhoto blogPhoto);
+
+ /**
+ * 新增相册
+ *
+ * @param blogPhoto 相册
+ * @return 结果
+ */
+ public int insertBlogPhoto(BlogPhoto blogPhoto);
+
+ /**
+ * 修改相册
+ *
+ * @param blogPhoto 相册
+ * @return 结果
+ */
+ public int updateBlogPhoto(BlogPhoto blogPhoto);
+
+ /**
+ * 批量删除相册
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogPhotoByIds(String ids);
+
+ /**
+ * 删除相册信息
+ *
+ * @param id 相册ID
+ * @return 结果
+ */
+ public int deleteBlogPhotoById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogReviewService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogReviewService.java
new file mode 100644
index 0000000..7b0c074
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogReviewService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogReview;
+import java.util.List;
+
+/**
+ * 评论Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogReviewService
+{
+ /**
+ * 查询评论
+ *
+ * @param id 评论ID
+ * @return 评论
+ */
+ public BlogReview selectBlogReviewById(String id);
+
+ /**
+ * 查询评论列表
+ *
+ * @param blogReview 评论
+ * @return 评论集合
+ */
+ public List selectBlogReviewList(BlogReview blogReview);
+
+ /**
+ * 新增评论
+ *
+ * @param blogReview 评论
+ * @return 结果
+ */
+ public int insertBlogReview(BlogReview blogReview);
+
+ /**
+ * 修改评论
+ *
+ * @param blogReview 评论
+ * @return 结果
+ */
+ public int updateBlogReview(BlogReview blogReview);
+
+ /**
+ * 批量删除评论
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogReviewByIds(String ids);
+
+ /**
+ * 删除评论信息
+ *
+ * @param id 评论ID
+ * @return 结果
+ */
+ public int deleteBlogReviewById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/IBlogWordService.java b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogWordService.java
new file mode 100644
index 0000000..5c333d9
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/IBlogWordService.java
@@ -0,0 +1,61 @@
+package com.rboat.blog.service;
+
+import com.rboat.blog.domain.BlogWord;
+import java.util.List;
+
+/**
+ * 留言Service接口
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+public interface IBlogWordService
+{
+ /**
+ * 查询留言
+ *
+ * @param id 留言ID
+ * @return 留言
+ */
+ public BlogWord selectBlogWordById(String id);
+
+ /**
+ * 查询留言列表
+ *
+ * @param blogWord 留言
+ * @return 留言集合
+ */
+ public List selectBlogWordList(BlogWord blogWord);
+
+ /**
+ * 新增留言
+ *
+ * @param blogWord 留言
+ * @return 结果
+ */
+ public int insertBlogWord(BlogWord blogWord);
+
+ /**
+ * 修改留言
+ *
+ * @param blogWord 留言
+ * @return 结果
+ */
+ public int updateBlogWord(BlogWord blogWord);
+
+ /**
+ * 批量删除留言
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBlogWordByIds(String ids);
+
+ /**
+ * 删除留言信息
+ *
+ * @param id 留言ID
+ * @return 结果
+ */
+ public int deleteBlogWordById(String id);
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleServiceImpl.java
new file mode 100644
index 0000000..b894b16
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogArticleMapper;
+import com.rboat.blog.domain.BlogArticle;
+import com.rboat.blog.service.IBlogArticleService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 文章Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogArticleServiceImpl implements IBlogArticleService
+{
+ @Autowired
+ private BlogArticleMapper blogArticleMapper;
+
+ /**
+ * 查询文章
+ *
+ * @param id 文章ID
+ * @return 文章
+ */
+ @Override
+ public BlogArticle selectBlogArticleById(String id)
+ {
+ return blogArticleMapper.selectBlogArticleById(id);
+ }
+
+ /**
+ * 查询文章列表
+ *
+ * @param blogArticle 文章
+ * @return 文章
+ */
+ @Override
+ public List selectBlogArticleList(BlogArticle blogArticle)
+ {
+ return blogArticleMapper.selectBlogArticleList(blogArticle);
+ }
+
+ /**
+ * 新增文章
+ *
+ * @param blogArticle 文章
+ * @return 结果
+ */
+ @Override
+ public int insertBlogArticle(BlogArticle blogArticle)
+ {
+ return blogArticleMapper.insertBlogArticle(blogArticle);
+ }
+
+ /**
+ * 修改文章
+ *
+ * @param blogArticle 文章
+ * @return 结果
+ */
+ @Override
+ public int updateBlogArticle(BlogArticle blogArticle)
+ {
+ return blogArticleMapper.updateBlogArticle(blogArticle);
+ }
+
+ /**
+ * 删除文章对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogArticleByIds(String ids)
+ {
+ return blogArticleMapper.deleteBlogArticleByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除文章信息
+ *
+ * @param id 文章ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogArticleById(String id)
+ {
+ return blogArticleMapper.deleteBlogArticleById(id);
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleTypeServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleTypeServiceImpl.java
new file mode 100644
index 0000000..96b9874
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogArticleTypeServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogArticleTypeMapper;
+import com.rboat.blog.domain.BlogArticleType;
+import com.rboat.blog.service.IBlogArticleTypeService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 文章类型Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogArticleTypeServiceImpl implements IBlogArticleTypeService
+{
+ @Autowired
+ private BlogArticleTypeMapper blogArticleTypeMapper;
+
+ /**
+ * 查询文章类型
+ *
+ * @param id 文章类型ID
+ * @return 文章类型
+ */
+ @Override
+ public BlogArticleType selectBlogArticleTypeById(String id)
+ {
+ return blogArticleTypeMapper.selectBlogArticleTypeById(id);
+ }
+
+ /**
+ * 查询文章类型列表
+ *
+ * @param blogArticleType 文章类型
+ * @return 文章类型
+ */
+ @Override
+ public List selectBlogArticleTypeList(BlogArticleType blogArticleType)
+ {
+ return blogArticleTypeMapper.selectBlogArticleTypeList(blogArticleType);
+ }
+
+ /**
+ * 新增文章类型
+ *
+ * @param blogArticleType 文章类型
+ * @return 结果
+ */
+ @Override
+ public int insertBlogArticleType(BlogArticleType blogArticleType)
+ {
+ return blogArticleTypeMapper.insertBlogArticleType(blogArticleType);
+ }
+
+ /**
+ * 修改文章类型
+ *
+ * @param blogArticleType 文章类型
+ * @return 结果
+ */
+ @Override
+ public int updateBlogArticleType(BlogArticleType blogArticleType)
+ {
+ return blogArticleTypeMapper.updateBlogArticleType(blogArticleType);
+ }
+
+ /**
+ * 删除文章类型对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogArticleTypeByIds(String ids)
+ {
+ return blogArticleTypeMapper.deleteBlogArticleTypeByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除文章类型信息
+ *
+ * @param id 文章类型ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogArticleTypeById(String id)
+ {
+ return blogArticleTypeMapper.deleteBlogArticleTypeById(id);
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogFriendServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogFriendServiceImpl.java
new file mode 100644
index 0000000..1ba8354
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogFriendServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogFriendMapper;
+import com.rboat.blog.domain.BlogFriend;
+import com.rboat.blog.service.IBlogFriendService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 好友Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogFriendServiceImpl implements IBlogFriendService
+{
+ @Autowired
+ private BlogFriendMapper blogFriendMapper;
+
+ /**
+ * 查询好友
+ *
+ * @param id 好友ID
+ * @return 好友
+ */
+ @Override
+ public BlogFriend selectBlogFriendById(String id)
+ {
+ return blogFriendMapper.selectBlogFriendById(id);
+ }
+
+ /**
+ * 查询好友列表
+ *
+ * @param blogFriend 好友
+ * @return 好友
+ */
+ @Override
+ public List selectBlogFriendList(BlogFriend blogFriend)
+ {
+ return blogFriendMapper.selectBlogFriendList(blogFriend);
+ }
+
+ /**
+ * 新增好友
+ *
+ * @param blogFriend 好友
+ * @return 结果
+ */
+ @Override
+ public int insertBlogFriend(BlogFriend blogFriend)
+ {
+ return blogFriendMapper.insertBlogFriend(blogFriend);
+ }
+
+ /**
+ * 修改好友
+ *
+ * @param blogFriend 好友
+ * @return 结果
+ */
+ @Override
+ public int updateBlogFriend(BlogFriend blogFriend)
+ {
+ return blogFriendMapper.updateBlogFriend(blogFriend);
+ }
+
+ /**
+ * 删除好友对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogFriendByIds(String ids)
+ {
+ return blogFriendMapper.deleteBlogFriendByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除好友信息
+ *
+ * @param id 好友ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogFriendById(String id)
+ {
+ return blogFriendMapper.deleteBlogFriendById(id);
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogMasterServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogMasterServiceImpl.java
new file mode 100644
index 0000000..898dc85
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogMasterServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogMasterMapper;
+import com.rboat.blog.domain.BlogMaster;
+import com.rboat.blog.service.IBlogMasterService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 博主Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogMasterServiceImpl implements IBlogMasterService
+{
+ @Autowired
+ private BlogMasterMapper blogMasterMapper;
+
+ /**
+ * 查询博主
+ *
+ * @param id 博主ID
+ * @return 博主
+ */
+ @Override
+ public BlogMaster selectBlogMasterById(String id)
+ {
+ return blogMasterMapper.selectBlogMasterById(id);
+ }
+
+ /**
+ * 查询博主列表
+ *
+ * @param blogMaster 博主
+ * @return 博主
+ */
+ @Override
+ public List selectBlogMasterList(BlogMaster blogMaster)
+ {
+ return blogMasterMapper.selectBlogMasterList(blogMaster);
+ }
+
+ /**
+ * 新增博主
+ *
+ * @param blogMaster 博主
+ * @return 结果
+ */
+ @Override
+ public int insertBlogMaster(BlogMaster blogMaster)
+ {
+ return blogMasterMapper.insertBlogMaster(blogMaster);
+ }
+
+ /**
+ * 修改博主
+ *
+ * @param blogMaster 博主
+ * @return 结果
+ */
+ @Override
+ public int updateBlogMaster(BlogMaster blogMaster)
+ {
+ return blogMasterMapper.updateBlogMaster(blogMaster);
+ }
+
+ /**
+ * 删除博主对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogMasterByIds(String ids)
+ {
+ return blogMasterMapper.deleteBlogMasterByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除博主信息
+ *
+ * @param id 博主ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogMasterById(String id)
+ {
+ return blogMasterMapper.deleteBlogMasterById(id);
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogPhotoServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogPhotoServiceImpl.java
new file mode 100644
index 0000000..2a60fea
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogPhotoServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogPhotoMapper;
+import com.rboat.blog.domain.BlogPhoto;
+import com.rboat.blog.service.IBlogPhotoService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 相册Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogPhotoServiceImpl implements IBlogPhotoService
+{
+ @Autowired
+ private BlogPhotoMapper blogPhotoMapper;
+
+ /**
+ * 查询相册
+ *
+ * @param id 相册ID
+ * @return 相册
+ */
+ @Override
+ public BlogPhoto selectBlogPhotoById(String id)
+ {
+ return blogPhotoMapper.selectBlogPhotoById(id);
+ }
+
+ /**
+ * 查询相册列表
+ *
+ * @param blogPhoto 相册
+ * @return 相册
+ */
+ @Override
+ public List selectBlogPhotoList(BlogPhoto blogPhoto)
+ {
+ return blogPhotoMapper.selectBlogPhotoList(blogPhoto);
+ }
+
+ /**
+ * 新增相册
+ *
+ * @param blogPhoto 相册
+ * @return 结果
+ */
+ @Override
+ public int insertBlogPhoto(BlogPhoto blogPhoto)
+ {
+ return blogPhotoMapper.insertBlogPhoto(blogPhoto);
+ }
+
+ /**
+ * 修改相册
+ *
+ * @param blogPhoto 相册
+ * @return 结果
+ */
+ @Override
+ public int updateBlogPhoto(BlogPhoto blogPhoto)
+ {
+ return blogPhotoMapper.updateBlogPhoto(blogPhoto);
+ }
+
+ /**
+ * 删除相册对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogPhotoByIds(String ids)
+ {
+ return blogPhotoMapper.deleteBlogPhotoByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除相册信息
+ *
+ * @param id 相册ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogPhotoById(String id)
+ {
+ return blogPhotoMapper.deleteBlogPhotoById(id);
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogReviewServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogReviewServiceImpl.java
new file mode 100644
index 0000000..52acc20
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogReviewServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogReviewMapper;
+import com.rboat.blog.domain.BlogReview;
+import com.rboat.blog.service.IBlogReviewService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 评论Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogReviewServiceImpl implements IBlogReviewService
+{
+ @Autowired
+ private BlogReviewMapper blogReviewMapper;
+
+ /**
+ * 查询评论
+ *
+ * @param id 评论ID
+ * @return 评论
+ */
+ @Override
+ public BlogReview selectBlogReviewById(String id)
+ {
+ return blogReviewMapper.selectBlogReviewById(id);
+ }
+
+ /**
+ * 查询评论列表
+ *
+ * @param blogReview 评论
+ * @return 评论
+ */
+ @Override
+ public List selectBlogReviewList(BlogReview blogReview)
+ {
+ return blogReviewMapper.selectBlogReviewList(blogReview);
+ }
+
+ /**
+ * 新增评论
+ *
+ * @param blogReview 评论
+ * @return 结果
+ */
+ @Override
+ public int insertBlogReview(BlogReview blogReview)
+ {
+ return blogReviewMapper.insertBlogReview(blogReview);
+ }
+
+ /**
+ * 修改评论
+ *
+ * @param blogReview 评论
+ * @return 结果
+ */
+ @Override
+ public int updateBlogReview(BlogReview blogReview)
+ {
+ return blogReviewMapper.updateBlogReview(blogReview);
+ }
+
+ /**
+ * 删除评论对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogReviewByIds(String ids)
+ {
+ return blogReviewMapper.deleteBlogReviewByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除评论信息
+ *
+ * @param id 评论ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogReviewById(String id)
+ {
+ return blogReviewMapper.deleteBlogReviewById(id);
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogWordServiceImpl.java b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogWordServiceImpl.java
new file mode 100644
index 0000000..e1419d2
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/service/impl/BlogWordServiceImpl.java
@@ -0,0 +1,94 @@
+package com.rboat.blog.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.rboat.blog.mapper.BlogWordMapper;
+import com.rboat.blog.domain.BlogWord;
+import com.rboat.blog.service.IBlogWordService;
+import com.rboat.common.core.text.Convert;
+
+/**
+ * 留言Service业务层处理
+ *
+ * @author rboat
+ * @date 2019-11-05
+ */
+@Service
+public class BlogWordServiceImpl implements IBlogWordService
+{
+ @Autowired
+ private BlogWordMapper blogWordMapper;
+
+ /**
+ * 查询留言
+ *
+ * @param id 留言ID
+ * @return 留言
+ */
+ @Override
+ public BlogWord selectBlogWordById(String id)
+ {
+ return blogWordMapper.selectBlogWordById(id);
+ }
+
+ /**
+ * 查询留言列表
+ *
+ * @param blogWord 留言
+ * @return 留言
+ */
+ @Override
+ public List selectBlogWordList(BlogWord blogWord)
+ {
+ return blogWordMapper.selectBlogWordList(blogWord);
+ }
+
+ /**
+ * 新增留言
+ *
+ * @param blogWord 留言
+ * @return 结果
+ */
+ @Override
+ public int insertBlogWord(BlogWord blogWord)
+ {
+ return blogWordMapper.insertBlogWord(blogWord);
+ }
+
+ /**
+ * 修改留言
+ *
+ * @param blogWord 留言
+ * @return 结果
+ */
+ @Override
+ public int updateBlogWord(BlogWord blogWord)
+ {
+ return blogWordMapper.updateBlogWord(blogWord);
+ }
+
+ /**
+ * 删除留言对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogWordByIds(String ids)
+ {
+ return blogWordMapper.deleteBlogWordByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除留言信息
+ *
+ * @param id 留言ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBlogWordById(String id)
+ {
+ return blogWordMapper.deleteBlogWordById(id);
+ }
+}
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogArticleMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogArticleMapper.xml
new file mode 100644
index 0000000..3c851df
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogArticleMapper.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, article_type_id, article_title, article_info, article_content, article_publish_time, article_count, article_from, article_master_id from blog_article
+
+
+
+
+
+
+
+ insert into blog_article
+
+ id,
+ article_type_id,
+ article_title,
+ article_info,
+ article_content,
+ article_publish_time,
+ article_count,
+ article_from,
+ article_master_id,
+
+
+ #{id},
+ #{articleTypeId},
+ #{articleTitle},
+ #{articleInfo},
+ #{articleContent},
+ #{articlePublishTime},
+ #{articleCount},
+ #{articleFrom},
+ #{articleMasterId},
+
+
+
+
+ update blog_article
+
+ article_type_id = #{articleTypeId},
+ article_title = #{articleTitle},
+ article_info = #{articleInfo},
+ article_content = #{articleContent},
+ article_publish_time = #{articlePublishTime},
+ article_count = #{articleCount},
+ article_from = #{articleFrom},
+ article_master_id = #{articleMasterId},
+
+ where id = #{id}
+
+
+
+ delete from blog_article where id = #{id}
+
+
+
+ delete from blog_article where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogArticleTypeMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogArticleTypeMapper.xml
new file mode 100644
index 0000000..7016463
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogArticleTypeMapper.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, name, parent, info from blog_article_type
+
+
+
+
+
+
+
+ insert into blog_article_type
+
+ id,
+ name,
+ parent,
+ info,
+
+
+ #{id},
+ #{name},
+ #{parent},
+ #{info},
+
+
+
+
+ update blog_article_type
+
+ name = #{name},
+ parent = #{parent},
+ info = #{info},
+
+ where id = #{id}
+
+
+
+ delete from blog_article_type where id = #{id}
+
+
+
+ delete from blog_article_type where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogFriendMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogFriendMapper.xml
new file mode 100644
index 0000000..867484b
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogFriendMapper.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, friend_master_id, friend_friend_id, friend_re_name from blog_friend
+
+
+
+
+
+
+
+ insert into blog_friend
+
+ id,
+ friend_master_id,
+ friend_friend_id,
+ friend_re_name,
+
+
+ #{id},
+ #{friendMasterId},
+ #{friendFriendId},
+ #{friendReName},
+
+
+
+
+ update blog_friend
+
+ friend_master_id = #{friendMasterId},
+ friend_friend_id = #{friendFriendId},
+ friend_re_name = #{friendReName},
+
+ where id = #{id}
+
+
+
+ delete from blog_friend where id = #{id}
+
+
+
+ delete from blog_friend where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogMasterMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogMasterMapper.xml
new file mode 100644
index 0000000..e4a2bab
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogMasterMapper.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, master_name, master_password, master_oicq, master_sex from blog_master
+
+
+
+
+
+
+
+ insert into blog_master
+
+ id,
+ master_name,
+ master_password,
+ master_oicq,
+ master_sex,
+
+
+ #{id},
+ #{masterName},
+ #{masterPassword},
+ #{masterOicq},
+ #{masterSex},
+
+
+
+
+ update blog_master
+
+ master_name = #{masterName},
+ master_password = #{masterPassword},
+ master_oicq = #{masterOicq},
+ master_sex = #{masterSex},
+
+ where id = #{id}
+
+
+
+ delete from blog_master where id = #{id}
+
+
+
+ delete from blog_master where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogPhotoMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogPhotoMapper.xml
new file mode 100644
index 0000000..15f47d6
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogPhotoMapper.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, photo_addr, photo_add_time, photo_info, photo_master_id from blog_photo
+
+
+
+
+
+
+
+ insert into blog_photo
+
+ id,
+ photo_addr,
+ photo_add_time,
+ photo_info,
+ photo_master_id,
+
+
+ #{id},
+ #{photoAddr},
+ #{photoAddTime},
+ #{photoInfo},
+ #{photoMasterId},
+
+
+
+
+ update blog_photo
+
+ photo_addr = #{photoAddr},
+ photo_add_time = #{photoAddTime},
+ photo_info = #{photoInfo},
+ photo_master_id = #{photoMasterId},
+
+ where id = #{id}
+
+
+
+ delete from blog_photo where id = #{id}
+
+
+
+ delete from blog_photo where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogReviewMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogReviewMapper.xml
new file mode 100644
index 0000000..2d2b4fd
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogReviewMapper.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, review_articleID, review_master_id, review_author_id, review_content, review_time from blog_review
+
+
+
+
+
+
+
+ insert into blog_review
+
+ id,
+ review_articleID,
+ review_master_id,
+ review_author_id,
+ review_content,
+ review_time,
+
+
+ #{id},
+ #{reviewArticleid},
+ #{reviewMasterId},
+ #{reviewAuthorId},
+ #{reviewContent},
+ #{reviewTime},
+
+
+
+
+ update blog_review
+
+ review_articleID = #{reviewArticleid},
+ review_master_id = #{reviewMasterId},
+ review_author_id = #{reviewAuthorId},
+ review_content = #{reviewContent},
+ review_time = #{reviewTime},
+
+ where id = #{id}
+
+
+
+ delete from blog_review where id = #{id}
+
+
+
+ delete from blog_review where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/mapper/blog/BlogWordMapper.xml b/rboat-blog/src/main/resources/mapper/blog/BlogWordMapper.xml
new file mode 100644
index 0000000..f256744
--- /dev/null
+++ b/rboat-blog/src/main/resources/mapper/blog/BlogWordMapper.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, word_title, word_content, word_time, word_author_id, word_master_id from blog_word
+
+
+
+
+
+
+
+ insert into blog_word
+
+ id,
+ word_title,
+ word_content,
+ word_time,
+ word_author_id,
+ word_master_id,
+
+
+ #{id},
+ #{wordTitle},
+ #{wordContent},
+ #{wordTime},
+ #{wordAuthorId},
+ #{wordMasterId},
+
+
+
+
+ update blog_word
+
+ word_title = #{wordTitle},
+ word_content = #{wordContent},
+ word_time = #{wordTime},
+ word_author_id = #{wordAuthorId},
+ word_master_id = #{wordMasterId},
+
+ where id = #{id}
+
+
+
+ delete from blog_word where id = #{id}
+
+
+
+ delete from blog_word where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/article/add.html b/rboat-blog/src/main/resources/templates/blog/article/add.html
new file mode 100644
index 0000000..5623ced
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/article/add.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/article/article.html b/rboat-blog/src/main/resources/templates/blog/article/article.html
new file mode 100644
index 0000000..07db1bd
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/article/article.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/article/edit.html b/rboat-blog/src/main/resources/templates/blog/article/edit.html
new file mode 100644
index 0000000..1081c83
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/article/edit.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/friend/add.html b/rboat-blog/src/main/resources/templates/blog/friend/add.html
new file mode 100644
index 0000000..29459a6
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/friend/add.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/friend/edit.html b/rboat-blog/src/main/resources/templates/blog/friend/edit.html
new file mode 100644
index 0000000..6d7422b
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/friend/edit.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/friend/friend.html b/rboat-blog/src/main/resources/templates/blog/friend/friend.html
new file mode 100644
index 0000000..760a87f
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/friend/friend.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/master/add.html b/rboat-blog/src/main/resources/templates/blog/master/add.html
new file mode 100644
index 0000000..dac8894
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/master/add.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/master/edit.html b/rboat-blog/src/main/resources/templates/blog/master/edit.html
new file mode 100644
index 0000000..086c176
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/master/edit.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/master/master.html b/rboat-blog/src/main/resources/templates/blog/master/master.html
new file mode 100644
index 0000000..b02c3f6
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/master/master.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/photo/add.html b/rboat-blog/src/main/resources/templates/blog/photo/add.html
new file mode 100644
index 0000000..7044a8c
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/photo/add.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/photo/edit.html b/rboat-blog/src/main/resources/templates/blog/photo/edit.html
new file mode 100644
index 0000000..7243667
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/photo/edit.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/photo/photo.html b/rboat-blog/src/main/resources/templates/blog/photo/photo.html
new file mode 100644
index 0000000..4c229e3
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/photo/photo.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/review/add.html b/rboat-blog/src/main/resources/templates/blog/review/add.html
new file mode 100644
index 0000000..07b5b7a
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/review/add.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/review/edit.html b/rboat-blog/src/main/resources/templates/blog/review/edit.html
new file mode 100644
index 0000000..4da7527
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/review/edit.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/review/review.html b/rboat-blog/src/main/resources/templates/blog/review/review.html
new file mode 100644
index 0000000..384444a
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/review/review.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/type/add.html b/rboat-blog/src/main/resources/templates/blog/type/add.html
new file mode 100644
index 0000000..83e36f7
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/type/add.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/type/edit.html b/rboat-blog/src/main/resources/templates/blog/type/edit.html
new file mode 100644
index 0000000..d0fce42
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/type/edit.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/type/type.html b/rboat-blog/src/main/resources/templates/blog/type/type.html
new file mode 100644
index 0000000..5ade725
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/type/type.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/word/add.html b/rboat-blog/src/main/resources/templates/blog/word/add.html
new file mode 100644
index 0000000..e83c606
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/word/add.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/word/edit.html b/rboat-blog/src/main/resources/templates/blog/word/edit.html
new file mode 100644
index 0000000..bec88fe
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/word/edit.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/resources/templates/blog/word/word.html b/rboat-blog/src/main/resources/templates/blog/word/word.html
new file mode 100644
index 0000000..7a9cd58
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/word/word.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sql/t_blog.sql b/sql/t_blog.sql
new file mode 100644
index 0000000..8ba44f5
--- /dev/null
+++ b/sql/t_blog.sql
@@ -0,0 +1,122 @@
+drop table if exists blog_article;
+
+drop table if exists blog_article_type;
+
+drop table if exists blog_friend;
+
+drop table if exists blog_master;
+
+drop table if exists blog_photo;
+
+drop table if exists blog_review;
+
+drop table if exists blog_word;
+
+/*==============================================================*/
+/* Table: blog_article */
+/*==============================================================*/
+create table blog_article
+(
+ id varchar(32) not null comment '主键id',
+ article_type_id varchar(32) not null comment '文章类型id',
+ article_title varchar(60) not null comment '文章标题',
+ article_info varchar(500) not null comment '文章信息',
+ article_content text not null comment '文章内容',
+ article_publish_time timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '发布时间',
+ article_count int not null default 0 comment '阅读数(自增)',
+ article_from int not null default 0 comment '文章来源(0:原创;1:转载)',
+ article_master_id varchar(32) not null comment '博主id',
+ primary key (id)
+);
+
+alter table blog_article comment '文章表';
+
+/*==============================================================*/
+/* Table: blog_article_type */
+/*==============================================================*/
+create table blog_article_type
+(
+ id varchar(32) not null comment '主键id',
+ name varchar(20) not null comment '类型名称',
+ parent varchar(32) not null default '#' comment '父级id',
+ info varchar(1) not null comment '描述信息',
+ primary key (id)
+);
+
+alter table blog_article_type comment '文章类型';
+
+/*==============================================================*/
+/* Table: blog_friend */
+/*==============================================================*/
+create table blog_friend
+(
+ id varchar(32) not null comment '主键id',
+ friend_master_id varchar(32) not null comment '博主id',
+ friend_friend_id varchar(32) not null comment '好友的id',
+ friend_re_name varchar(20) comment '好友备注名',
+ primary key (id)
+);
+
+alter table blog_friend comment '好友表';
+
+/*==============================================================*/
+/* Table: blog_master */
+/*==============================================================*/
+create table blog_master
+(
+ id varchar(32) not null comment '主键id',
+ master_name varchar(40) not null comment '博主名称',
+ master_password varchar(64) not null comment '密码',
+ master_oicq varchar(20) comment '博主oicq(三方id)',
+ master_sex varchar(1) not null default '1' comment '0:女;1:男',
+ primary key (id)
+);
+
+alter table blog_master comment '博主表';
+
+/*==============================================================*/
+/* Table: blog_photo */
+/*==============================================================*/
+create table blog_photo
+(
+ id varchar(32) not null comment '主键id',
+ photo_addr varchar(200) not null comment '图片存放地址',
+ photo_add_time timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '上传日期',
+ photo_info varchar(100) comment '图片备注',
+ photo_master_id varchar(32) not null comment '上传人(博主)',
+ primary key (id)
+);
+
+alter table blog_photo comment '相册表';
+
+/*==============================================================*/
+/* Table: blog_review */
+/*==============================================================*/
+create table blog_review
+(
+ id varchar(32) not null comment '主键id',
+ review_articleID varchar(40) not null comment '评论的文章id',
+ review_master_id varchar(32) not null default '1' comment '博主id',
+ review_author_id varchar(32) not null default '1' comment '评论的作者id',
+ review_content varchar(400) not null default '1' comment '评论内容',
+ review_time timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '评论时间',
+ primary key (id)
+);
+
+alter table blog_review comment '评论表';
+
+/*==============================================================*/
+/* Table: blog_word */
+/*==============================================================*/
+create table blog_word
+(
+ id varchar(32) not null comment '主键id',
+ word_title varchar(40) not null comment '留言标题',
+ word_content varchar(400) not null comment '留言内容',
+ word_time timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '留言的时间',
+ word_author_id varchar(32) not null default '1' comment '留言的作者id',
+ word_master_id varchar(32) not null default '1' comment '留言的对象id(博主id)',
+ primary key (id)
+);
+
+alter table blog_word comment '留言表';
diff --git "a/sql/\351\200\206\350\210\237\345\215\232\345\256\242.pdm" "b/sql/\351\200\206\350\210\237\345\215\232\345\256\242.pdm"
new file mode 100644
index 0000000..c4147ec
--- /dev/null
+++ "b/sql/\351\200\206\350\210\237\345\215\232\345\256\242.pdm"
@@ -0,0 +1,2513 @@
+
+
+
+
+
+
+
+
+
+0CA50702-CEDF-4212-AD26-552153803866
+PhysicalDataModel_1
+PhysicalDataModel_1
+1572964661
+zhangyang
+1572967606
+zhangyang
+[FolderOptions]
+
+[FolderOptions\Physical Objects]
+GenerationCheckModel=Yes
+GenerationPath=
+GenerationOptions=
+GenerationTasks=
+GenerationTargets=
+GenerationSelections=
+RevPkey=Yes
+RevFkey=Yes
+RevAkey=Yes
+RevCheck=Yes
+RevIndx=Yes
+RevOpts=Yes
+RevViewAsTabl=No
+RevViewOpts=Yes
+RevSystAsTabl=Yes
+RevTablPerm=No
+RevViewPerm=No
+RevProcPerm=No
+RevDbpkPerm=No
+RevSqncPerm=No
+RevAdtPerm=No
+RevUserPriv=No
+RevUserOpts=No
+RevGrpePriv=No
+RevRolePriv=No
+RevDtbsOpts=Yes
+RevDtbsPerm=No
+RevViewIndx=Yes
+RevJidxOpts=Yes
+RevStats=No
+RevTspcPerm=No
+RevCaseSensitive=No
+GenTrgrStdMsg=Yes
+GenTrgrMsgTab=
+GenTrgrMsgNo=
+GenTrgrMsgTxt=
+TrgrPreserve=No
+TrgrIns=Yes
+TrgrUpd=Yes
+TrgrDel=Yes
+TrgrC2Ins=Yes
+TrgrC2Upd=Yes
+TrgrC3=Yes
+TrgrC4=Yes
+TrgrC5=Yes
+TrgrC6=Yes
+TrgrC7=Yes
+TrgrC8=Yes
+TrgrC9=Yes
+TrgrC10=Yes
+TrgrC11=Yes
+TrgrC1=Yes
+TrgrC12Ins=Yes
+TrgrC12Upd=Yes
+TrgrC13=Yes
+UpdateTableStatistics=Yes
+UpdateColumnStatistics=Yes
+
+[FolderOptions\Physical Objects\Database Generation]
+GenScriptName=crebas
+GenScriptName0=crebas
+GenScriptName1=
+GenScriptName2=
+GenScriptName3=
+GenScriptName4=
+GenScriptName5=
+GenScriptName6=
+GenScriptName7=
+GenScriptName8=
+GenScriptName9=
+GenPathName=E:\Program Files (x86)\Sybase\PowerDesigner 16\
+GenSingleFile=Yes
+GenODBC=No
+GenCheckModel=Yes
+GenScriptPrev=Yes
+GenArchiveModel=No
+GenUseSync=No
+GenSyncChoice=0
+GenSyncArch=
+GenSyncRmg=0
+
+[FolderOptions\Physical Objects\Database Generation\Format]
+GenScriptTitle=Yes
+GenScriptNamLabl=No
+GenScriptQDtbs=No
+GenScriptQOwnr=Yes
+GenScriptCase=0
+GenScriptEncoding=ANSI
+GenScriptNAcct=No
+IdentifierDelimiter="
+
+[FolderOptions\Physical Objects\Database Generation\Database]
+Create=Yes
+Open=Yes
+Close=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Database\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Storage]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\User]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\User\Create]
+Physical Options=No
+
+[FolderOptions\Physical Objects\Database Generation\Group]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\Role]
+Create=Yes
+Drop=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create]
+Default value=Yes
+Check=Yes
+
+[FolderOptions\Physical Objects\Database Generation\AbstractDataType]
+Create=Yes
+Header=Yes
+Footer=Yes
+Drop=Yes
+Comment=Yes
+Install JAVA class=Yes
+Remove JAVA class=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Rule]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Default]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Sequence]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column]
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create]
+Check=Yes
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column]
+User datatype=No
+Default value=Yes
+Check=Yes
+Physical Options=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key]
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key\Create]
+Constraint declaration=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Create]
+Constraint declaration=Yes
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Filter]
+Primary key=No
+Foreign key=No
+Alternate key=No
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\View\Create]
+Force Column list=No
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewColumn]
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create]
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter]
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DBMSTrigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym\Filter]
+Table=Yes
+View=Yes
+Proc=Yes
+Synonym=Yes
+Database Package=Yes
+Sequence=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Procedure]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Procedure\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DatabasePackage]
+Create=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\WebService]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Dimension]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synchronization]
+GenBackupTabl=1
+GenKeepBackTabl=1
+GenTmpTablDrop=No
+GenKeepTablOpts=No
+
+[FolderOptions\Physical Objects\Test Data]
+GenDataPathName=
+GenDataSinglefile=Yes
+GenDataScriptName=testdata
+GenDataScriptName0=
+GenDataScriptName1=
+GenDataScriptName2=
+GenDataScriptName3=
+GenDataScriptName4=
+GenDataScriptName5=
+GenDataScriptName6=
+GenDataScriptName7=
+GenDataScriptName8=
+GenDataScriptName9=
+GenDataOdbc=0
+GenDataDelOld=No
+GenDataTitle=No
+GenDataDefNumRows=20
+GenDataCommit=0
+GenDataPacket=0
+GenDataOwner=No
+GenDataProfNumb=
+GenDataProfChar=
+GenDataProfDate=
+GenDataCSVSeparator=,
+GenDataFileFormat=CSV
+GenDataUseWizard=No
+
+[FolderOptions\Pdm]
+IndxIQName=%COLUMN%_%INDEXTYPE%
+IndxPK=Yes
+IndxFK=Yes
+IndxAK=Yes
+IndxPKName=%TABLE%_PK
+IndxFKName=%REFR%_FK
+IndxAKName=%AKEY%_AK
+IndxPreserve=No
+IndxThreshold=0
+IndxStats=No
+RefrPreserve=No
+JidxPreserve=No
+RbldMultiFact=Yes
+RbldMultiDim=Yes
+RbldMultiJidx=Yes
+CubePreserve=No
+TablStProcPreserve=No
+ProcDepPreserve=Yes
+TrgrDepPreserve=Yes
+CubeScriptPath=
+CubeScriptCase=0
+CubeScriptEncoding=ANSI
+CubeScriptNacct=No
+CubeScriptHeader=No
+CubeScriptExt=csv
+CubeScriptExt0=txt
+CubeScriptExt1=
+CubeScriptExt2=
+CubeScriptSep=,
+CubeScriptDeli="
+EstimationYears=0
+DfltDomnName=D_%.U:VALUE%
+DfltColnName=D_%.U:VALUE%
+DfltReuse=Yes
+DfltDrop=Yes
+[ModelOptions]
+
+[ModelOptions\Physical Objects]
+CaseSensitive=No
+DisplayName=Yes
+EnableTrans=No
+UseTerm=No
+EnableRequirements=No
+EnableFullShortcut=Yes
+DefaultDttp=
+IgnoreOwner=No
+RebuildTrigger=Yes
+RefrUnique=No
+RefrAutoMigrate=Yes
+RefrMigrateReuse=Yes
+RefrMigrateDomain=Yes
+RefrMigrateCheck=Yes
+RefrMigrateRule=Yes
+RefrMigrateExtd=No
+RefrMigrDefaultLink=No
+RefrDfltImpl=D
+RefrPrgtColn=No
+RefrMigrateToEnd=No
+RebuildTriggerDep=No
+ColnFKName=%.3:PARENT%_%COLUMN%
+ColnFKNameUse=No
+DomnCopyDttp=Yes
+DomnCopyChck=No
+DomnCopyRule=No
+DomnCopyMand=No
+DomnCopyExtd=No
+DomnCopyProf=No
+Notation=0
+DomnDefaultMandatory=No
+ColnDefaultMandatory=No
+TablDefaultOwner=
+ViewDefaultOwner=
+TrgrDefaultOwnerTabl=
+TrgrDefaultOwnerView=
+IdxDefaultOwnerTabl=
+IdxDefaultOwnerView=
+JdxDefaultOwner=
+DBPackDefaultOwner=
+SeqDefaultOwner=
+ProcDefaultOwner=
+DBMSTrgrDefaultOwner=
+Currency=USD
+RefrDeleteConstraint=1
+RefrUpdateConstraint=1
+RefrParentMandatory=No
+RefrParentChangeAllow=Yes
+RefrCheckOnCommit=No
+
+[ModelOptions\Physical Objects\NamingOptionsTemplates]
+
+[ModelOptions\Physical Objects\ClssNamingOptions]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()"
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()"
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Connection]
+
+[ModelOptions\Pdm]
+
+[ModelOptions\Generate]
+
+[ModelOptions\Generate\Xsm]
+GenRootElement=Yes
+GenComplexType=No
+GenAttribute=Yes
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=No
+
+[ModelOptions\Generate\Pdm]
+RRMapping=No
+
+[ModelOptions\Generate\Cdm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+Notation=2
+
+[ModelOptions\Generate\Oom]
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=Yes
+ClassPrefix=
+
+[ModelOptions\Generate\Ldm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+
+[ModelOptions\Default Opts]
+
+[ModelOptions\Default Opts\TABL]
+PhysOpts=
+
+[ModelOptions\Default Opts\COLN]
+PhysOpts=
+
+[ModelOptions\Default Opts\INDX]
+PhysOpts=
+
+[ModelOptions\Default Opts\AKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\PKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\STOR]
+PhysOpts=
+
+[ModelOptions\Default Opts\TSPC]
+PhysOpts=
+
+[ModelOptions\Default Opts\SQNC]
+PhysOpts=
+
+[ModelOptions\Default Opts\DTBS]
+PhysOpts=
+
+[ModelOptions\Default Opts\USER]
+PhysOpts=
+
+[ModelOptions\Default Opts\JIDX]
+PhysOpts=
+
+
+B7B876B0-2D19-4D5B-A1FD-86D6A3D09B26
+MySQL 5.0
+MYSQL50
+1572964660
+zhangyang
+1572964660
+zhangyang
+
+F4F16ECD-F2F1-4006-AF6F-638D5C65F35E
+4BA9F647-DAB1-11D1-9944-006097355D9B
+
+
+
+
+7D8BE664-BB5A-4B7F-936B-89507F419D27
+PhysicalDiagram_1
+PhysicalDiagram_1
+1572964661
+zhangyang
+1572967155
+zhangyang
+[DisplayPreferences]
+
+[DisplayPreferences\PDM]
+
+[DisplayPreferences\General]
+Adjust to text=Yes
+Snap Grid=No
+Constrain Labels=Yes
+Display Grid=No
+Show Page Delimiter=Yes
+Show Links intersections=No
+Activate automatic link routing=No
+Grid size=0
+Graphic unit=2
+Window color=255, 255, 255
+Background image=
+Background mode=8
+Watermark image=
+Watermark mode=8
+Show watermark on screen=No
+Gradient mode=0
+Gradient end color=255, 255, 255
+Show Swimlane=No
+SwimlaneVert=Yes
+TreeVert=No
+CompDark=0
+
+[DisplayPreferences\Object]
+Show Icon=No
+Mode=2
+Trunc Length=40
+Word Length=40
+Word Text=!"#$%&')*+,-./:;=>?@\]^_`|}~
+Shortcut IntIcon=Yes
+Shortcut IntLoct=Yes
+Shortcut IntFullPath=No
+Shortcut IntLastPackage=Yes
+Shortcut ExtIcon=Yes
+Shortcut ExtLoct=No
+Shortcut ExtFullPath=No
+Shortcut ExtLastPackage=Yes
+Shortcut ExtIncludeModl=Yes
+EObjShowStrn=Yes
+ExtendedObject.Comment=No
+ExtendedObject.IconPicture=No
+ExtendedObject.TextStyle=No
+ExtendedObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Object Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+ELnkShowStrn=Yes
+ELnkShowName=Yes
+ExtendedLink_SymbolLayout=<Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Source" >[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] </Form>[CRLF]</Form>
+FileObject.Stereotype=No
+FileObject.DisplayName=Yes
+FileObject.LocationOrName=No
+FileObject.IconPicture=No
+FileObject.TextStyle=No
+FileObject.IconMode=Yes
+FileObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Location" Attribute="LocationOrName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+Package.Stereotype=Yes
+Package.Comment=No
+Package.IconPicture=No
+Package.TextStyle=No
+Package_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+Display Model Version=Yes
+Table.Stereotype=Yes
+Table.DisplayName=Yes
+Table.OwnerDisplayName=No
+Table.Columns=Yes
+Table.Columns._Filter="All Columns" PDMCOLNALL
+Table.Columns._Columns=Stereotype DataType KeyIndicator
+Table.Columns._Limit=-5
+Table.Keys=No
+Table.Keys._Columns=Stereotype Indicator
+Table.Indexes=No
+Table.Indexes._Columns=Stereotype
+Table.Triggers=No
+Table.Triggers._Columns=Stereotype
+Table.Comment=No
+Table.IconPicture=No
+Table.TextStyle=No
+Table_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No "Domain or Data type"\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No" Filters=""All Columns" PDMCOLNALL ""\r\n"PK Columns" PDMCOLNPK "\"PRIM \"TRUE\" TRUE\""\r\n"Key Columns" PDMCOLNKEY "\"KEYS \"TRUE\" TRUE\""" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Keys" Collection="Keys" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Triggers" Collection="Triggers" Columns="Stereotype No\r\nDisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+View.Stereotype=Yes
+View.DisplayName=Yes
+View.OwnerDisplayName=No
+View.Columns=Yes
+View.Columns._Columns=DisplayName
+View.Columns._Limit=-5
+View.TemporaryVTables=Yes
+View.Indexes=No
+View.Comment=No
+View.IconPicture=No
+View.TextStyle=No
+View_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No "Domain or Data type"\r\nIndexIndicator No" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Tables" Collection="TemporaryVTables" Columns="Name Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="DisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+Procedure.Stereotype=No
+Procedure.DisplayName=Yes
+Procedure.OwnerDisplayName=No
+Procedure.Comment=No
+Procedure.IconPicture=No
+Procedure.TextStyle=No
+Procedure_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+Reference.Cardinality=No
+Reference.ImplementationType=No
+Reference.ChildRole=Yes
+Reference.Stereotype=Yes
+Reference.DisplayName=No
+Reference.ForeignKeyConstraintName=No
+Reference.JoinExpression=No
+Reference.Integrity=No
+Reference.ParentRole=Yes
+Reference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Cardinality" Attribute="Cardinality" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Implementation" Attribute="ImplementationType" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Cons&traint Name" Attribute="ForeignKeyConstraintName" Prefix="" Suffix="" Caption="Cons&traint Name" Mandatory="No" />[CRLF] <StandardAttribute Name="Join" Attribute="JoinExpression" Prefix="" Suffix="" Caption="Join" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Referential integrity" Attribute="Integrity" Prefix="" Suffix="" Caption="Referential integrity" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form>
+ViewReference.ChildRole=Yes
+ViewReference.Stereotype=Yes
+ViewReference.DisplayName=No
+ViewReference.JoinExpression=No
+ViewReference.ParentRole=Yes
+ViewReference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Join Expression" Attribute="JoinExpression" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form>
+
+[DisplayPreferences\Symbol]
+
+[DisplayPreferences\Symbol\FRMEOBJ]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=6000
+Height=2000
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=64
+Brush gradient color=192 192 192
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 255 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMELNK]
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+Line style=1
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FILO]
+OBJSTRNFont=新宋体,8,N
+OBJSTRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LCNMFont=新宋体,8,N
+LCNMFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=3600
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PDMPCKG]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 178 178 178
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\TABL]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+ColumnsFont=新宋体,8,N
+ColumnsFont color=0, 0, 0
+TablePkColumnsFont=新宋体,8,U
+TablePkColumnsFont color=0, 0, 0
+TableFkColumnsFont=新宋体,8,N
+TableFkColumnsFont color=0, 0, 0
+KeysFont=新宋体,8,N
+KeysFont color=0, 0, 0
+IndexesFont=新宋体,8,N
+IndexesFont color=0, 0, 0
+TriggersFont=新宋体,8,N
+TriggersFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=178 214 252
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VIEW]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+ColumnsFont=新宋体,8,N
+ColumnsFont color=0, 0, 0
+TablePkColumnsFont=新宋体,8,U
+TablePkColumnsFont color=0, 0, 0
+TableFkColumnsFont=新宋体,8,N
+TableFkColumnsFont color=0, 0, 0
+TemporaryVTablesFont=新宋体,8,N
+TemporaryVTablesFont color=0, 0, 0
+IndexesFont=新宋体,8,N
+IndexesFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=208 208 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PROC]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4000
+Height=1000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 108 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\REFR]
+SOURCEFont=新宋体,8,N
+SOURCEFont color=0, 0, 0
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+DESTINATIONFont=新宋体,8,N
+DESTINATIONFont color=0, 0, 0
+Line style=1
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VREF]
+SOURCEFont=新宋体,8,N
+SOURCEFont color=0, 0, 0
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+DESTINATIONFont=新宋体,8,N
+DESTINATIONFont color=0, 0, 0
+Line style=1
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\USRDEPD]
+OBJXSTRFont=新宋体,8,N
+OBJXSTRFont color=0, 0, 0
+Line style=1
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=2 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\Free Symbol]
+Free TextFont=新宋体,8,N
+Free TextFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=0
+(8268, 11693)
+((315,354), (433,354))
+1
+15
+
+
+1572964673
+1572966410
+-1
+((-20700,3974), (-6150,13436))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+1572964675
+1572966418
+-1
+((-22036,-5700), (-8400,529))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+1572964677
+1572966413
+-1
+((222,5626), (11700,13050))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+1572966169
+1572966423
+-1
+((2940,-4799), (17024,1685))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+1572966553
+1572966809
+-1
+((-21443,-16952), (-7807,-10723))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+1572966861
+1572966863
+-1
+((3307,-16202), (16943,-9973))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+1572967155
+1572967166
+-1
+((-18518,17023), (-4882,23252))
+0
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+1
+
+
+
+
+
+
+
+
+
+
+
+
+96F3672C-2B69-4F2D-BB3D-BD02AD17BE48
+blog_article
+blog_article
+1572964673
+zhangyang
+1572965603
+zhangyang
+文章表
+
+
+
+FFDE5881-18A8-4206-99DF-830A9009F256
+id
+id
+1572964981
+zhangyang
+1572965036
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+4A8C1DEE-7CA3-4788-925F-A39C53ACC334
+article_type_id
+article_type_id
+1572965036
+zhangyang
+1572965114
+zhangyang
+文章类型id
+varchar(32)
+32
+1
+
+
+2701E213-24CF-40B9-A673-539F2F6347A2
+article_title
+article_title
+1572965036
+zhangyang
+1572965508
+zhangyang
+文章标题
+varchar(60)
+60
+1
+
+
+12C4CCDC-AF72-49FA-B630-3D8645124122
+article_info
+article_info
+1572965036
+zhangyang
+1572965603
+zhangyang
+文章信息
+varchar(500)
+500
+1
+
+
+AAD2538A-0386-4973-A807-7B613EE0AC61
+article_content
+article_content
+1572965036
+zhangyang
+1572965484
+zhangyang
+文章内容
+text
+1
+
+
+320BE7D5-8BAF-4979-B02C-AA01A7B08B35
+article_publish_time
+article_publish_time
+1572965036
+zhangyang
+1572965563
+zhangyang
+发布时间
+CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+timestamp
+1
+
+
+CE1FC10F-11C5-4CC3-86F4-7B1D45D17D16
+article_count
+article_count
+1572965036
+zhangyang
+1572965381
+zhangyang
+阅读数(自增)
+0
+int
+1
+
+
+CBD16635-6A8D-4D60-8AE9-62CE4241B7A0
+article_from
+article_from
+1572965272
+zhangyang
+1572966471
+zhangyang
+文章来源(0:原创;1:转载)
+0
+int
+1
+
+
+9A3BB905-6C0B-49D9-BCB0-8236E4AB9E58
+article_master_id
+article_master_id
+1572965272
+zhangyang
+1572967556
+zhangyang
+博主id
+varchar(32)
+32
+1
+
+
+
+
+2B2BDADC-F711-4AC6-8ABB-9AC0A116C230
+Key_1
+Key_1
+1572964981
+zhangyang
+1572965036
+zhangyang
+
+
+
+
+
+
+
+
+
+
+44A282EC-DF6C-4CB5-BAD3-D8ADFD1FE6D7
+blog_friend
+blog_friend
+1572964675
+zhangyang
+1572966134
+zhangyang
+好友表
+
+
+
+C5E9B601-106A-4CD3-94EC-FFD38A398D5E
+id
+id
+1572965971
+zhangyang
+1572965997
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+6646ABBE-0D8E-4299-A579-06D73CE51DBF
+friend_master_id
+friend_master_id
+1572965997
+zhangyang
+1572966047
+zhangyang
+博主id
+varchar(32)
+32
+1
+
+
+CC29B8AA-59D6-4B12-A8C8-DA9D64034BA1
+friend_friend_id
+friend_friend_id
+1572965997
+zhangyang
+1572966090
+zhangyang
+好友的id
+varchar(32)
+32
+1
+
+
+0784E208-6EB7-4CC8-96AF-BD893763E4F0
+friend_re_name
+friend_re_name
+1572966090
+zhangyang
+1572966442
+zhangyang
+好友备注名
+varchar(20)
+20
+
+
+
+
+F61731FA-E551-469E-8687-13E071D0C223
+Key_1
+Key_1
+1572965971
+zhangyang
+1572965997
+zhangyang
+
+
+
+
+
+
+
+
+
+
+FF84ED16-BEFC-472B-A05C-3191DD98BD38
+blog_articletype
+blog_article_type
+1572964677
+zhangyang
+1572965917
+zhangyang
+文章类型
+
+
+
+264DC366-8117-42DE-A483-72602FC382E7
+id
+id
+1572965633
+zhangyang
+1572965669
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+5FF9C759-18E3-4E68-9572-5AC46EDFF0FE
+name
+name
+1572965669
+zhangyang
+1572965965
+zhangyang
+类型名称
+varchar(20)
+20
+1
+
+
+44B0D4A8-1FB6-48E4-8414-267E469FCAB2
+parent
+parent
+1572965669
+zhangyang
+1572966459
+zhangyang
+父级id
+#
+varchar(32)
+32
+1
+
+
+56F48DAC-7BB0-4333-B32A-BFDD1D7F9B72
+info
+info
+1572965669
+zhangyang
+1572965871
+zhangyang
+描述信息
+varchar(1)
+1
+1
+
+
+
+
+DCEFE149-6658-4B46-8EE5-5D5BFB6ECBDA
+Key_1
+Key_1
+1572965633
+zhangyang
+1572965669
+zhangyang
+
+
+
+
+
+
+
+
+
+
+14128AD0-27BD-4BF2-B6E6-505CF0E9300F
+blog_photo
+blog_photo
+1572964675
+zhangyang
+1572966339
+zhangyang
+相册表
+
+
+
+4CFC7902-3E20-4C1B-811E-0BD67A4AD94F
+id
+id
+1572965971
+zhangyang
+1572966169
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+988F1DC0-754D-480E-82AE-3FC21235528E
+photo_addr
+photo_addr
+1572965997
+zhangyang
+1572966225
+zhangyang
+图片存放地址
+varchar(200)
+200
+1
+
+
+ED52EF84-9C87-4839-8869-3989B96CFBD5
+photo_add_time
+photo_add_time
+1572965997
+zhangyang
+1572966364
+zhangyang
+上传日期
+CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+timestamp
+1
+
+
+F23AEFDD-204D-48DC-9D34-B47E0A5FF78A
+photo_info
+photo_info
+1572966090
+zhangyang
+1572966291
+zhangyang
+图片备注
+varchar(100)
+100
+
+
+F07CEE10-A7B2-49A3-8341-249BDCA28763
+photo_master_id
+photo_master_id
+1572966291
+zhangyang
+1572966359
+zhangyang
+上传人(博主)
+varchar(32)
+32
+1
+
+
+
+
+02AA6FDD-7E5F-4F6E-B247-E4FC7E10132F
+Key_1
+Key_1
+1572965971
+zhangyang
+1572966169
+zhangyang
+
+
+
+
+
+
+
+
+
+
+93F51F74-4E94-4B1D-B293-72D169BB0380
+blog_master
+blog_master
+1572964675
+zhangyang
+1572966769
+zhangyang
+博主表
+
+
+
+F5F680AB-F4D1-4F60-9B26-765042EC064A
+id
+id
+1572965971
+zhangyang
+1572966553
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+0F7A0E65-341F-47C7-8118-8069F7934096
+master_name
+master_name
+1572965997
+zhangyang
+1572966769
+zhangyang
+博主名称
+varchar(40)
+40
+1
+
+
+16285953-88B2-45AE-B189-4EAD3318E336
+master_password
+master_password
+1572965997
+zhangyang
+1572966769
+zhangyang
+密码
+varchar(64)
+64
+1
+
+
+40836D2B-2010-459D-802A-6988D902C7E9
+master_oicq
+master_oicq
+1572966090
+zhangyang
+1572966781
+zhangyang
+博主oicq(三方id)
+varchar(20)
+20
+
+
+27C87867-A148-4FA4-9B27-0B029B84239A
+master_sex
+master_sex
+1572966559
+zhangyang
+1572966769
+zhangyang
+0:女;1:男
+1
+varchar(1)
+1
+1
+
+
+
+
+2ECA47E1-3070-47CA-8334-7EA9227D4D31
+Key_1
+Key_1
+1572965971
+zhangyang
+1572966553
+zhangyang
+
+
+
+
+
+
+
+
+
+
+DB119724-13CF-4D06-BDAB-7A6560990A5D
+blog_word
+blog_word
+1572964675
+zhangyang
+1572967126
+zhangyang
+留言表
+
+
+
+45FDE551-1614-4BF9-B93B-2953AE6E7199
+id
+id
+1572965971
+zhangyang
+1572966861
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+E610FACB-C547-4814-8BA6-61904C7B65D6
+word_title
+word_title
+1572965997
+zhangyang
+1572967126
+zhangyang
+留言标题
+varchar(40)
+40
+1
+
+
+446E2C9A-5BE9-4C9C-99E3-612AA5980345
+word_content
+word_content
+1572965997
+zhangyang
+1572967126
+zhangyang
+留言内容
+varchar(400)
+400
+1
+
+
+EEF467E9-7778-4FE8-82B1-6FA98A6948DD
+word_sdTime
+word_time
+1572966090
+zhangyang
+1572967831
+zhangyang
+留言的时间
+CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+timestamp
+1
+
+
+BB32A267-605C-4670-97D8-244C2C50F152
+word_author_id
+word_author_id
+1572966559
+zhangyang
+1572967126
+zhangyang
+留言的作者id
+1
+varchar(32)
+32
+1
+
+
+A93B9FE7-9A4E-4240-8CB3-58FD3D246631
+word_master_id
+word_master_id
+1572966559
+zhangyang
+1572967126
+zhangyang
+留言的对象id(博主id)
+1
+varchar(32)
+32
+1
+
+
+
+
+FE0CD817-A4D5-4850-9C04-D99B9590C91B
+Key_1
+Key_1
+1572965971
+zhangyang
+1572966861
+zhangyang
+
+
+
+
+
+
+
+
+
+
+F452EC5A-1ECB-4B51-B5C8-0982EBC8486E
+blog_review
+blog_review
+1572964675
+zhangyang
+1572967601
+zhangyang
+评论表
+
+
+
+9D8B321F-0DF2-49A7-9BDB-12DACDDA95DB
+id
+id
+1572965971
+zhangyang
+1572967155
+zhangyang
+主键id
+varchar(32)
+32
+1
+
+
+1D9BD507-5136-4E2F-947E-DDC8A1509961
+review_articleID
+review_articleID
+1572965997
+zhangyang
+1572967408
+zhangyang
+评论的文章id
+varchar(40)
+40
+1
+
+
+4C6071AF-0744-4042-8BCE-E38A5C74C98A
+review_master_id
+review_master_id
+1572966559
+zhangyang
+1572967408
+zhangyang
+博主id
+1
+varchar(32)
+32
+1
+
+
+D604EF4C-162D-4856-8B54-FCEFFD8BB213
+review_author_id
+review_author_id
+1572966559
+zhangyang
+1572967408
+zhangyang
+评论的作者id
+1
+varchar(32)
+32
+1
+
+
+D264E1B1-A7A1-443A-ACD3-14B1B9D49809
+review_content
+review_content
+1572966559
+zhangyang
+1572967408
+zhangyang
+评论内容
+1
+varchar(400)
+400
+1
+
+
+BD08FF2E-615F-4BDE-8F5B-F5A6261BEDB6
+review_time
+review_time
+1572966090
+zhangyang
+1572967764
+zhangyang
+评论时间
+CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+timestamp
+1
+
+
+
+
+8B9736CB-FA8B-4353-8BF1-2FF8BF06C149
+Key_1
+Key_1
+1572965971
+zhangyang
+1572967155
+zhangyang
+
+
+
+
+
+
+
+
+
+
+
+
+25F88292-6AF2-4CD9-983A-C403515D4928
+PUBLIC
+PUBLIC
+1572964660
+zhangyang
+1572964660
+zhangyang
+
+
+
+
+F5808528-CBAF-4F13-AF21-839A3EEB02F2
+MySQL 5.0
+MYSQL50
+1572964660
+zhangyang
+1572964660
+zhangyang
+file:///%_DBMS%/mysql50.xdb
+F4F16ECD-F2F1-4006-AF6F-638D5C65F35E
+4BA9F647-DAB1-11D1-9944-006097355D9B
+1276524678
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
Gitee
From c8e6c367f73e71181637154a14862ecab1f3a4c6 Mon Sep 17 00:00:00 2001
From: zy <942628598@qq.com>
Date: Wed, 6 Nov 2019 14:13:15 +0800
Subject: [PATCH 2/3] =?UTF-8?q?blog=E5=8D=9A=E5=AE=A2=E5=8F=AF=E8=AE=BF?=
=?UTF-8?q?=E9=97=AE=E9=A6=96=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 6 ++
rboat-admin/pom.xml | 6 ++
.../src/main/java/com/rboat/TestMain.java | 10 ++
.../src/main/java/com/rboat/diagramUtil.java | 35 +++++++
rboat-admin/src/main/resources/banner.txt | 87 +++++++++++++-----
.../static/UI/Hplus-v.4.1.0/rboat.png | Bin 0 -> 8397 bytes
.../src/main/resources/static/favicon.ico | Bin 16958 -> 67646 bytes
.../src/main/resources/static/rboat.png | Bin 5645 -> 4623 bytes
.../src/main/resources/static/rboat1.png | Bin 0 -> 8397 bytes
rboat-blog/pom.xml | 15 +--
.../controller/BlogArticleController.java | 2 +-
.../controller/BlogArticleTypeController.java | 2 +-
.../rboat/blog/controller/BlogController.java | 19 ++++
.../blog/controller/BlogFriendController.java | 2 +-
.../blog/controller/BlogMasterController.java | 2 +-
.../blog/controller/BlogPhotoController.java | 2 +-
.../blog/controller/BlogReviewController.java | 2 +-
.../blog/controller/BlogWordController.java | 2 +-
.../main/resources/templates/blog/main.html | 12 +++
.../rboat/framework/config/ShiroConfig.java | 2 +
sql/rb_20190822.sql | 7 +-
21 files changed, 171 insertions(+), 42 deletions(-)
create mode 100644 rboat-admin/src/main/java/com/rboat/TestMain.java
create mode 100644 rboat-admin/src/main/java/com/rboat/diagramUtil.java
create mode 100644 rboat-admin/src/main/resources/static/UI/Hplus-v.4.1.0/rboat.png
create mode 100644 rboat-admin/src/main/resources/static/rboat1.png
create mode 100644 rboat-blog/src/main/java/com/rboat/blog/controller/BlogController.java
create mode 100644 rboat-blog/src/main/resources/templates/blog/main.html
diff --git a/pom.xml b/pom.xml
index d20a5b4..309dceb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -216,6 +216,11 @@
rboat-activiti
${rboat.version}
+
+ com.rboat
+ rboat-blog
+ 4.0.0
+
@@ -228,6 +233,7 @@
rboat-common
rboat-exam
rboat-activiti
+ rboat-blog
pom
diff --git a/rboat-admin/pom.xml b/rboat-admin/pom.xml
index 2b7e673..5ea018d 100644
--- a/rboat-admin/pom.xml
+++ b/rboat-admin/pom.xml
@@ -84,6 +84,12 @@
rboat-activiti
4.0.0
+
+
+ com.rboat
+ rboat-blog
+ 4.0.0
+
diff --git a/rboat-admin/src/main/java/com/rboat/TestMain.java b/rboat-admin/src/main/java/com/rboat/TestMain.java
new file mode 100644
index 0000000..c98fd93
--- /dev/null
+++ b/rboat-admin/src/main/java/com/rboat/TestMain.java
@@ -0,0 +1,10 @@
+package com.rboat;
+
+public class TestMain {
+
+ public static void main(String[] args) {
+ System.out.println( TestMain.class.getResource("/"));
+ System.out.println( TestMain.class.getResource("../../"));
+ System.out.println( TestMain.class.getResource("../../../"));
+ }
+}
diff --git a/rboat-admin/src/main/java/com/rboat/diagramUtil.java b/rboat-admin/src/main/java/com/rboat/diagramUtil.java
new file mode 100644
index 0000000..2c50726
--- /dev/null
+++ b/rboat-admin/src/main/java/com/rboat/diagramUtil.java
@@ -0,0 +1,35 @@
+package com.rboat;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+public class diagramUtil {
+ public static void createAsciiPic(final String path) {
+ //final String base = "@#&$%*o!;.";// 字符串由复杂到简单
+ final String base = "KSPksp;.";
+ try {
+ final BufferedImage image = ImageIO.read(new File(path));
+ System.out.println("W:" + image.getWidth() + " H:" + image.getHeight());
+ for (int y = 0; y < image.getHeight(); y += 2) {
+ for (int x = 0; x < image.getWidth(); x++) {
+ final int pixel = image.getRGB(x, y);
+ final int r = (pixel & 0xff0000) >> 16, g = (pixel & 0xff00) >> 8, b = pixel & 0xff;
+ final float gray = 0.299f * r + 0.578f * g + 0.114f * b;
+ final int index = Math.round(gray * (base.length() + 1) / 255);
+ System.out.print(index >= base.length() ? " " : String.valueOf(base.charAt(index)));
+ }
+ System.out.println();
+ }
+ } catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String args[]) {
+ diagramUtil.createAsciiPic("F:\\favicon.ico");
+ }
+
+
+}
diff --git a/rboat-admin/src/main/resources/banner.txt b/rboat-admin/src/main/resources/banner.txt
index 1a2e383..245feb9 100644
--- a/rboat-admin/src/main/resources/banner.txt
+++ b/rboat-admin/src/main/resources/banner.txt
@@ -1,24 +1,67 @@
Application Version: ${rboat.version}
Spring Boot Version: ${spring-boot.version}
-////////////////////////////////////////////////////////////////////
-// _ooOoo_ //
-// o8888888o //
-// 88" . "88 //
-// (| ^_^ |) //
-// O\ = /O //
-// ____/`---'\____ //
-// .' \\| |// `. //
-// / \\||| : |||// \ //
-// / _||||| -:- |||||- \ //
-// | | \\\ - /// | | //
-// | \_| ''\---/'' | | //
-// \ .-\__ `-` ___/-. / //
-// ___`. .' /--.--\ `. . ___ //
-// ."" '< `.___\_<|>_/___.' >'"". //
-// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
-// \ \ `-. \_ __\ /__ _/ .-` / / //
-// ========`-.____`-.___\_____/___.-`____.-'======== //
-// `=---=' //
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
-// 佛祖保佑 永不宕机 永无BUG //
-////////////////////////////////////////////////////////////////////
\ No newline at end of file
+ *****************************************************************************************************************************************
+* ;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk; .sPPSSSSSSSSSSSSSSSSSSSSSSSSSSSSSPkp *
+* k k kSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS. *
+* ;p p; PSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSp *
+* k k ;SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSP *
+* k k pSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS *
+* k s. kk .Ps k pSSSSSSSSSSSSSSSSk .SSSSSSSSSSSSSSSSSSSSSSSS *
+* k ;Ss ;Sp kSp k pSSSSSSSSSSSSPSS; PSSSSSSSSSSPPSSSSSSSSSSSS *
+* k pSs PSSSSSSSSSSSSSSSSSS; k pSSSSSSSSSSSSp; ; .SSSSSSSSSSSS *
+* k .p k pSSSSSSSSSSSS;.pskPSSSSSSPks; .SSSSSSSSSSSS *
+* k . p; ; k pSSSSSSSSSSSS.kSSSS..PSSSSSSSS SSSSSSSSSSSS *
+* k pSSSSk pp P. ss k pSSSSSSSSSSSS sSSSSP kSSSSSSS SSSSSSSSSSSS *
+* k PS ;P S Sp k pSSSSSSSSSSSS pSSSSSP kSSSSSS PSSSSSSSSSSS *
+* k kS ;S ;S .Sp k pSSSSSSSSSSSS pSSSSSSS .SSSSSS PSSSSSSSSSSS *
+* k kS ;S pP .Sp k pSSSSSSSSSSSS pSSSSSSSSSSSSSSS kSSSSSSSSSSS *
+* k kS sS;;;;;kP;;;;;Sk k pSSSSSS; ;SSSSSSS *
+* k kS PSSSSSSSSSSSSSSS k pSSSSSSsppppp .pppppp;;ppppppp ;pppkSSSSSSS *
+* k kS ;P Ps ks k pSSSSSSSSSSSP ;SSSSSSp;SSSSSSP kSSSSSSSSSSS *
+* k kS s Sp k pSSSSSSSSSSSP ;SSSSSS; SSSSSSP kSSSSSSSSSSS *
+* k kS .Sp k pSSSSSSSSSSSP ;SSSSSS; SSSSSSP sSSSSSSSSSSS *
+* k kS ;S; k pSSSSSSSSSSSP .SSSSSS. SSSSSSP sSSSSSSSSSSS *
+* k kS pS. k pSSSSSSSSSSSP ;SSSSSS. SSSSSSP sSSSSSSSSSSS *
+* k kS kS k pSSSSSSSSSSSP ;SSSSSS; SSSSSSP sSSSSSSSSSSS *
+* k kS PP k pSSSSSSSSSSSP ;SSSSSS; SSSSSSP sSSSSSSSSSSS *
+* k kS .Ss k pSSSSSSSSSSSk ;SSSSSSs.SSSSSSP sSSSSSSSSSSS *
+* k kS pS; k pSSSSSSSSSSSk pSSSSSSPsSSSSSSP sSSSSSSSSSSS *
+* k kS kS k pSSSSSSSSSSSs pSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k kS Sk k pSSSSSSSSSSSs sSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k kS ;S; k pSSSSSSSSSSSp kSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k PS kP k pSSSSSSSSSSS; PSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k PP .Sp k pSSSSSSSSSSS. SSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k Pk kP k pSSSSSSSSSSS .SSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k Ss .S; k pSSSSSSSSSSP ;SSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k .S; Pk k pSSSSSSSSSSk sSSSSSSSSSSSSSSSP sSSSSSSSSSSS *
+* k pS pP k pSSSSSSSSSSs kSSSSSSSSSSSSSSSS kSSSSSSSSSSS *
+* k PSs ;S k pSSSSSSSSSS; SSSSSSSSSSSSSSSSS kSSSSSSSSSSS *
+* k ;S;Ps ;P k pSSSSSSSSSS.;SSSSSSSSSSSSSSSSS kSSSSSSSSSSS *
+* k kk PP k pSSSSSSSSSP sSSSSSSSSSSSSSSSSS PSSSSSSSSSSS *
+* k .S sSPp k pSSSSSSSSSs SSSSSSSSSSSSSSSSSS. PSSSSSSSSSSS *
+* k P; sPSSSSSSSSSSSSSSSSSPP; k pSSSSSSSSS;pSSSSSSSSSSSSSSSSSS; SSSSSSSSSSSS *
+* k p; k pSSSSSSSSP PSSSSSSSSSSSSSSSSSSp.SSSSSSSSSSSS *
+* k ;. k pSSSSSSSSSSSSSSSSSSSSSSSSSSSSSPkSSSSSSSSSSSS *
+* k k pSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS *
+* s s .SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSk *
+* k k pSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSP *
+* .k; pk. kSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSP. *
+* *
+* *
+* *
+* *
+* *
+* *
+* SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS *
+* *
+* *
+* *
+* *
+* *
+* kSs S. pS PPPPPPPS; kk .S. ;PPsskSk kk .S. *
+* kskP S. pS PP kk .S. kP pS. kk .S. *
+* ks pP S. pS pS; kPkkkkkkS. .S; ks kk .S. *
+* ks .S; S. pS Pk kk .S. .S; Ps kk .S. *
+* ks PkS. pS sP. kk .S. pP. kP pS. sP *
+* ks kS. pS sSSSSSSSS; kk .S. pPSSPk. sPSSP; *
+ *****************************************************************************************************************************************
\ No newline at end of file
diff --git a/rboat-admin/src/main/resources/static/UI/Hplus-v.4.1.0/rboat.png b/rboat-admin/src/main/resources/static/UI/Hplus-v.4.1.0/rboat.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc48c4cdccff1db06a5ecbea3b3e5b8efac7f8a3
GIT binary patch
literal 8397
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
Vt~$rx0GmY4**V(Qp1FGOKLGBLZvy}T
literal 0
HcmV?d00001
diff --git a/rboat-admin/src/main/resources/static/favicon.ico b/rboat-admin/src/main/resources/static/favicon.ico
index 6f07782abfc7881a73d3f47a00b761c183e06ff9..d8360c8047def919c6cf7357c38d8cfce7b5b8aa 100644
GIT binary patch
literal 67646
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
diff --git a/rboat-admin/src/main/resources/static/rboat.png b/rboat-admin/src/main/resources/static/rboat.png
index b0af01fefabd113d23cde619dda7a429653e99c2..c6eec97faf959034bb3e5a24db83e62ea20600b4 100644
GIT binary patch
literal 4623
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%0D$!ZU`JAc<;8D?TJ~a
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
diff --git a/rboat-admin/src/main/resources/static/rboat1.png b/rboat-admin/src/main/resources/static/rboat1.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc48c4cdccff1db06a5ecbea3b3e5b8efac7f8a3
GIT binary patch
literal 8397
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
Vt~$rx0GmY4**V(Qp1FGOKLGBLZvy}T
literal 0
HcmV?d00001
diff --git a/rboat-blog/pom.xml b/rboat-blog/pom.xml
index 2209a1e..c5d7b7f 100644
--- a/rboat-blog/pom.xml
+++ b/rboat-blog/pom.xml
@@ -10,21 +10,16 @@
4.0.0
rboat-blog
-
博客系统
-
-
-
-
-
- com.rboat
- rboat-common
-
-
+
+
+ com.rboat
+ rboat-framework
+
\ No newline at end of file
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java
index e725745..f02bb8f 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java
index 0f944a0..011c6e7 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogArticleTypeController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogController.java
new file mode 100644
index 0000000..6615106
--- /dev/null
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogController.java
@@ -0,0 +1,19 @@
+package com.rboat.blog.controller;
+
+import com.rboat.common.core.controller.BaseController;
+import com.rboat.common.utils.ServletUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Controller
+public class BlogController {
+ private String prefix = "blog";
+ @GetMapping("/blog")
+ public String login(HttpServletRequest request, HttpServletResponse response) {
+ return prefix+"/main";
+ }
+}
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java
index 7bdfef4..0a1eb33 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogFriendController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java
index 122b7b7..b9f3a9a 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogMasterController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java
index b76df42..6286b21 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogPhotoController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java
index 8d1becd..c3ba699 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogReviewController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java
index 2e4396f..2cd3fa5 100644
--- a/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java
+++ b/rboat-blog/src/main/java/com/rboat/blog/controller/BlogWordController.java
@@ -1,4 +1,4 @@
-package com.rboat.web.controller.blog;
+package com.rboat.blog.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
diff --git a/rboat-blog/src/main/resources/templates/blog/main.html b/rboat-blog/src/main/resources/templates/blog/main.html
new file mode 100644
index 0000000..e67b8be
--- /dev/null
+++ b/rboat-blog/src/main/resources/templates/blog/main.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ 博客首页
+
+
+博客主页
+
+
diff --git a/rboat-framework/src/main/java/com/rboat/framework/config/ShiroConfig.java b/rboat-framework/src/main/java/com/rboat/framework/config/ShiroConfig.java
index 8d941bf..d61eb4a 100644
--- a/rboat-framework/src/main/java/com/rboat/framework/config/ShiroConfig.java
+++ b/rboat-framework/src/main/java/com/rboat/framework/config/ShiroConfig.java
@@ -251,6 +251,8 @@ public class ShiroConfig
filterChainDefinitionMap.put("/rboat/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
+ //博客页面,不需要拦截
+ filterChainDefinitionMap.put("/blog/**", "anon");
// 退出 logout地址,shiro去清除session
filterChainDefinitionMap.put("/logout", "logout");
// 不需要拦截的访问
diff --git a/sql/rb_20190822.sql b/sql/rb_20190822.sql
index 50e6de1..4707405 100644
--- a/sql/rb_20190822.sql
+++ b/sql/rb_20190822.sql
@@ -254,9 +254,7 @@ insert into sys_menu values('1058', '生成删除', '114', '3', '#', '', 'F', '
insert into sys_menu values('1059', '预览代码', '114', '4', '#', '', 'F', '0', 'tool:gen:preview', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
insert into sys_menu values('1060', '生成代码', '114', '5', '#', '', 'F', '0', 'tool:gen:code', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-- 工作流按钮
-INSERT INTO `sys_menu` VALUES ('1058', '模型查询', '116', '1','','#', 'F', '0', 'activiti:model:list', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
-INSERT INTO `sys_menu` VALUES ('1059', '模型新增', '116', '2','','#', 'F', '0', 'activiti:model:add', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
-INSERT INTO `sys_menu` VALUES ('1060', '模型修改', '116', '3','','#', 'F', '0', 'activiti:model:edit', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
+
INSERT INTO `sys_menu` VALUES ('1061', '模型删除', '116', '4','','#', 'F', '0', 'activiti:model:remove', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
INSERT INTO `sys_menu` VALUES ('1062', '模型部署', '116', '5','','#', 'F', '0', 'activiti:model:deploy', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
INSERT INTO `sys_menu` VALUES ('1063', '模型导出', '116', '6','','#', 'F', '0', 'activiti:model:export', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
@@ -264,6 +262,9 @@ INSERT INTO `sys_menu` VALUES ('1064', '流程查询', '117', '1','','#', 'F', '
INSERT INTO `sys_menu` VALUES ('1065', '流程新增', '117', '2','','#', 'F', '0', 'activiti:process:add', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
INSERT INTO `sys_menu` VALUES ('1066', '流程删除', '117', '3','','#', 'F', '0', 'activiti:process:remove', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
INSERT INTO `sys_menu` VALUES ('1067', '转为模型', '117', '4','','#', 'F', '0', 'activiti:process:model', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
+INSERT INTO `sys_menu` VALUES ('1068', '模型查询', '116', '1','','#', 'F', '0', 'activiti:model:list', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
+INSERT INTO `sys_menu` VALUES ('1069', '模型新增', '116', '2','','#', 'F', '0', 'activiti:model:add', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
+INSERT INTO `sys_menu` VALUES ('1070', '模型修改', '116', '3','','#', 'F', '0', 'activiti:model:edit', '#', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '');
-- ----------------------------
-- 6、用户和角色关联表 用户N-1角色
--
Gitee
From 261bbae26a4318634ccb9abfd96f371d5d71e026 Mon Sep 17 00:00:00 2001
From: zy <942628598@qq.com>
Date: Wed, 6 Nov 2019 18:03:56 +0800
Subject: [PATCH 3/3] ..
---
pom.xml | 1 +
.../main/resources/static/images/favicon.ico | Bin 0 -> 67646 bytes
.../src/main/resources/static/images/rboat.png | Bin 0 -> 4623 bytes
.../src/main/resources/static/images/rboat1.png | Bin 0 -> 8397 bytes
.../src/main/resources/templates/blog/main.html | 4 +++-
5 files changed, 4 insertions(+), 1 deletion(-)
create mode 100644 rboat-blog/src/main/resources/static/images/favicon.ico
create mode 100644 rboat-blog/src/main/resources/static/images/rboat.png
create mode 100644 rboat-blog/src/main/resources/static/images/rboat1.png
diff --git a/pom.xml b/pom.xml
index 309dceb..2f5f8aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -216,6 +216,7 @@
rboat-activiti
${rboat.version}
+
com.rboat
rboat-blog
diff --git a/rboat-blog/src/main/resources/static/images/favicon.ico b/rboat-blog/src/main/resources/static/images/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..d8360c8047def919c6cf7357c38d8cfce7b5b8aa
GIT binary patch
literal 67646
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