基于javaweb+mysql的个人博客管理系统
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
文章的发表,分类,评论,收搜索,后台管理的的文章新 增,分类新增,评论审核,标签管理,评论管理,分类管 理,博客管理,系统管理等等功能
技术框架
Springboot SpringMVC MyBatis ThymeLeaf HTML JavaScript JQuery Ajax maven
</li>
<li class="chapter " data-level="1.6.1.2" data-path="../axes/cartesian/linear.html">
<a href="../axes/cartesian/linear.html">
Linear
</a>
</li>
<li class="chapter " data-level="1.6.2.1" data-path="../axes/radial/linear.html">
<a href="../axes/radial/linear.html">
Linear
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.6.3" data-path="../axes/labelling.html">
<a href="../axes/labelling.html">
Labelling
* @param blogStatus 草稿,发布
* @param enableComment 可否评论
* @return Result
*/
@PostMapping("/blogs/update")
@ResponseBody
public Result update(@RequestParam("blogId") Long blogId,
@RequestParam("blogTitle") String blogTitle,
@RequestParam(name = "blogSummary", required = false) String blogSummary,
@RequestParam("blogCategoryId") Integer blogCategoryId,
@RequestParam("blogTags") String blogTags,
@RequestParam("blogContent") String blogContent,
@RequestParam("blogStatus") Byte blogStatus,
@RequestParam("enableComment") Byte enableComment) {
if (StringUtils.isEmpty(blogTitle)) {
@RequestParam String websiteUrl, @RequestParam String commentBody) {
if (StringUtils.isEmpty(verifyCode)) {
return ResultGenerator.genFailResult("验证码不能为空");
}
String kaptchaCode = session.getAttribute("verifyCode") + "";
if (StringUtils.isEmpty(kaptchaCode)) {
return ResultGenerator.genFailResult("非法请求");
}
if (!verifyCode.equals(kaptchaCode)) {
return ResultGenerator.genFailResult("验证码错误");
}
String ref = request.getHeader("Referer");
if (StringUtils.isEmpty(ref)) {
return ResultGenerator.genFailResult("非法请求");
}
if (null == blogId || blogId < 0) {
return ResultGenerator.genFailResult("非法请求");
}
if (StringUtils.isEmpty(commentator)) {
return ResultGenerator.genFailResult("请输入称呼");
}
if (StringUtils.isEmpty(email)) {
return ResultGenerator.genFailResult("请输入邮箱地址");
});
this.bindScrollEvent().bindChangeEvent();
if (!recreate)
{
$.proxy(settings.onload, this)();
}
this.state.loaded = true;
return this;
},
/**
* 设置编辑器的宽度
* Set editor width
*
* @param {Number|String} width 编辑器宽度值
* @returns {editormd} 返回editormd的实例对象
*/
width : function(width) {
config.setValue(yourName);
}
if ("footerAbout".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerAbout);
}
if ("footerICP".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerICP);
}
if ("footerCopyRight".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerCopyRight);
}
if ("footerPoweredBy".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerPoweredBy);
}
if ("footerPoweredByURL".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerPoweredByURL);
}
}
return configMap;
}
}
{
alert("Error: The line number must be an integer.");
return this;
}
line = parseInt(line) - 1;
if (line > count)
{
alert("Error: The line number range 1-" + count);
return this;
}
cm.setCursor( {line : line, ch : 0} );
var scrollInfo = cm.getScrollInfo();
var clientHeight = scrollInfo.clientHeight;
var coords = cm.charCoords({line : line, ch : 0}, "local");
</a>
</li>
<li class="chapter " data-level="1.5.3" data-path="radar.html">
<a href="radar.html">
Radar
</a>
</li>
{
if (typeof CodeMirror !== "undefined") {
editormd.$CodeMirror = CodeMirror;
}
if (typeof marked !== "undefined") {
editormd.$marked = marked;
}
this.setCodeMirror().setToolbar().loadedDisplay();
}
else
{
this.loadQueues();
}
return this;
var cm = this.cm;
var selection = cm.getSelection();
var selections = cm.listSelections();
cm.replaceSelection(editormd.wordsFirstUpperCase(selection));
cm.setSelections(selections);
},
uppercase : function() {
var cm = this.cm;
var selection = cm.getSelection();
var selections = cm.listSelections();
if ("footerICP".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerICP);
}
if ("footerCopyRight".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerCopyRight);
}
if ("footerPoweredBy".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerPoweredBy);
}
if ("footerPoweredByURL".equals(config.getKey()) && StringUtils.isEmpty(config.getValue())) {
config.setValue(footerPoweredByURL);
}
}
return configMap;
}
}
<td>Footer font size</td>
</tr>
<tr>
<td><code>footerFontStyle</code></td>
<td><code>String</code></td>
<td><code>'bold'</code></td>
<td>Footer font style</td>
</tr>
<tr>
<td><code>footerFontColor</code></td>
<td><code>Color</code></td>
<td><code>'#fff'</code></td>
<td>Footer font color</td>
</tr>
<tr>
<td><code>footerSpacing</code></td>
#{createTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<insert id="batchInsert" parameterType="java.util.List">
INSERT into tb_blog_tag_relation(blog_id,tag_id)
VALUES
<foreach collection="relationList" item="item" separator=",">
(#{item.blogId,jdbcType=BIGINT},#{item.tagId,jdbcType=INTEGER})
</foreach>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.demo.entity.BlogTagRelation">
update tb_blog_tag_relation
<set>
<if test="blogId != null">
</tbody>
</table>
<h3 id="position-modes">Position Modes</h3>
<p> Possible modes are:</p>
<ul>
<li>'average'</li>
<li>'nearest'</li>
</ul>
<p>'average' mode will place the tooltip at the average position of the items displayed in the tooltip. 'nearest' will place the tooltip at the position of the element closest to the event position.</p>
<p>New modes can be defined by adding functions to the Chart.Tooltip.positioners map.</p>
<p>Example:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">/**
* Custom positioner
* @function Chart.Tooltip.positioners.custom
blog_id,
</if>
<if test="blogTitle != null">
blog_title,
</if>
<if test="blogSummary != null">
blog_summary,
</if>
<if test="blogCategoryId != null">
blog_category_id,
</if>
<if test="blogCategoryName != null">
blog_category_name,
</if>
<if test="blogTags != null">
blog_tags,
</if>
<if test="blogStatus != null">
return this;
},
/**
* 编辑器全屏显示
* Fullscreen show
*
* @returns {editormd} 返回editormd的实例对象
*/
fullscreen : function() {
var _this = this;
var state = this.state;
var editor = this.editor;
var preview = this.preview;
var toolbar = this.toolbar;
var settings = this.settings;
var fullscreenClass = this.classPrefix + "fullscreen";
}
/** Creates a non-strict view of a slice of this $coll.
*
* Note: the difference between `view` and `slice` is that `view` produces
* a view of the current $coll, whereas `slice` produces a new $coll.
*
* Note: `view(from, to)` is equivalent to `view.slice(from, to)`
* $orderDependent
*
* @param from the index of the first element of the view
* @param until the index of the element following the view
* @return a non-strict view of a slice of this $coll, starting at index `from`
* and extending up to (but not including) index `until`.
*/
def view(from: Int, until: Int): TraversableView[A, Repr] = view.slice(from, until)
/** Creates a non-strict filter of this $coll.
*
* Note: the difference between `c filter p` and `c withFilter p` is that
* the former creates a new collection, whereas the latter only
* restricts the domain of subsequent `map`, `flatMap`, `foreach`,
* and `withFilter` operations.