学习vue,就想着自己搭建一个框架学习一下,本文属于vue与后台的增删改查入门demo,不做讲解,只为了记录一下代码.
后台框架前台框架的搭建自己百度就可以做到了
项目的源码地址 https://gitee.com/cuixt/vueDemo01.git
附上一部自己实现的日记系统,springboot+vue实现github地址
先看一下大体结构
后台
前台
废话不多说,直接上代码
后台代码
1.Article
package com.mt.vuedemo.bean;
import javax.validation.constraints.NotNull;
import java.util.Date;
public class Article {
private Integer id;
@NotNull(message = "文章 姓名不能为空")
private String articlename;
private String articledesc;
@NotNull(message = "文章 作者不能为空")
private String articleauthor;
private Integer idtopping;
private Date createtime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getArticlename() {
return articlename;
}
public void setArticlename(String articlename) {
this.articlename = articlename == null ? null : articlename.trim();
}
public String getArticledesc() {
return articledesc;
}
public void setArticledesc(String articledesc) {
this.articledesc = articledesc == null ? null : articledesc.trim();
}
public String getArticleauthor() {
return articleauthor;
}
public void setArticleauthor(String articleauthor) {
this.articleauthor = articleauthor == null ? null : articleauthor.trim();
}
public Integer getIdtopping() {
return idtopping;
}
public void setIdtopping(Integer idtopping) {
this.idtopping = idtopping;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
}
2.ArticleExample
package com.mt.vuedemo.bean;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ArticleExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public ArticleExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(Integer value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(Integer value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(Integer value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(Integer value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(Integer value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(Integer value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<Integer> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<Integer> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(Integer value1, Integer value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(Integer value1, Integer value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andArticlenameIsNull() {
addCriterion("articleName is null");
return (Criteria) this;
}
public Criteria andArticlenameIsNotNull() {
addCriterion("articleName is not null");
return (Criteria) this;
}
public Criteria andArticlenameEqualTo(String value) {
addCriterion("articleName =", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameNotEqualTo(String value) {
addCriterion("articleName <>", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameGreaterThan(String value) {
addCriterion("articleName >", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameGreaterThanOrEqualTo(String value) {
addCriterion("articleName >=", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameLessThan(String value) {
addCriterion("articleName <", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameLessThanOrEqualTo(String value) {
addCriterion("articleName <=", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameLike(String value) {
addCriterion("articleName like", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameNotLike(String value) {
addCriterion("articleName not like", value, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameIn(List<String> values) {
addCriterion("articleName in", values, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameNotIn(List<String> values) {
addCriterion("articleName not in", values, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameBetween(String value1, String value2) {
addCriterion("articleName between", value1, value2, "articlename");
return (Criteria) this;
}
public Criteria andArticlenameNotBetween(String value1, String value2) {
addCriterion("articleName not between", value1, value2, "articlename");
return (Criteria) this;
}
public Criteria andArticledescIsNull() {
addCriterion("articleDesc is null");
return (Criteria) this;
}
public Criteria andArticledescIsNotNull() {
addCriterion("articleDesc is not null");
return (Criteria) this;
}
public Criteria andArticledescEqualTo(String value) {
addCriterion("articleDesc =", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescNotEqualTo(String value) {
addCriterion("articleDesc <>", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescGreaterThan(String value) {
addCriterion("articleDesc >", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescGreaterThanOrEqualTo(String value) {
addCriterion("articleDesc >=", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescLessThan(String value) {
addCriterion("articleDesc <", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescLessThanOrEqualTo(String value) {
addCriterion("articleDesc <=", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescLike(String value) {
addCriterion("articleDesc like", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescNotLike(String value) {
addCriterion("articleDesc not like", value, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescIn(List<String> values) {
addCriterion("articleDesc in", values, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescNotIn(List<String> values) {
addCriterion("articleDesc not in", values, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescBetween(String value1, String value2) {
addCriterion("articleDesc between", value1, value2, "articledesc");
return (Criteria) this;
}
public Criteria andArticledescNotBetween(String value1, String value2) {
addCriterion("articleDesc not between", value1, value2, "articledesc");
return (Criteria) this;
}
public Criteria andArticleauthorIsNull() {
addCriterion("articleAuthor is null");
return (Criteria) this;
}
public Criteria andArticleauthorIsNotNull() {
addCriterion("articleAuthor is not null");
return (Criteria) this;
}
public Criteria andArticleauthorEqualTo(String value) {
addCriterion("articleAuthor =", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorNotEqualTo(String value) {
addCriterion("articleAuthor <>", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorGreaterThan(String value) {
addCriterion("articleAuthor >", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorGreaterThanOrEqualTo(String value) {
addCriterion("articleAuthor >=", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorLessThan(String value) {
addCriterion("articleAuthor <", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorLessThanOrEqualTo(String value) {
addCriterion("articleAuthor <=", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorLike(String value) {
addCriterion("articleAuthor like", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorNotLike(String value) {
addCriterion("articleAuthor not like", value, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorIn(List<String> values) {
addCriterion("articleAuthor in", values, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorNotIn(List<String> values) {
addCriterion("articleAuthor not in", values, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorBetween(String value1, String value2) {
addCriterion("articleAuthor between", value1, value2, "articleauthor");
return (Criteria) this;
}
public Criteria andArticleauthorNotBetween(String value1, String value2) {
addCriterion("articleAuthor not between", value1, value2, "articleauthor");
return (Criteria) this;
}
public Criteria andIdtoppingIsNull() {
addCriterion("idTopping is null");
return (Criteria) this;
}
public Criteria andIdtoppingIsNotNull() {
addCriterion("idTopping is not null");
return (Criteria) this;
}
public Criteria andIdtoppingEqualTo(Integer value) {
addCriterion("idTopping =", value, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingNotEqualTo(Integer value) {
addCriterion("idTopping <>", value, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingGreaterThan(Integer value) {
addCriterion("idTopping >", value, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingGreaterThanOrEqualTo(Integer value) {
addCriterion("idTopping >=", value, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingLessThan(Integer value) {
addCriterion("idTopping <", value, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingLessThanOrEqualTo(Integer value) {
addCriterion("idTopping <=", value, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingIn(List<Integer> values) {
addCriterion("idTopping in", values, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingNotIn(List<Integer> values) {
addCriterion("idTopping not in", values, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingBetween(Integer value1, Integer value2) {
addCriterion("idTopping between", value1, value2, "idtopping");
return (Criteria) this;
}
public Criteria andIdtoppingNotBetween(Integer value1, Integer value2) {
addCriterion("idTopping not between", value1, value2, "idtopping");
return (Criteria) this;
}
public Criteria andCreatetimeIsNull() {
addCriterion("createTime is null");
return (Criteria) this;
}
public Criteria andCreatetimeIsNotNull() {
addCriterion("createTime is not null");
return (Criteria) this;
}
public Criteria andCreatetimeEqualTo(Date value) {
addCriterion("createTime =", value, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeNotEqualTo(Date value) {
addCriterion("createTime <>", value, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeGreaterThan(Date value) {
addCriterion("createTime >", value, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeGreaterThanOrEqualTo(Date value) {
addCriterion("createTime >=", value, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeLessThan(Date value) {
addCriterion("createTime <", value, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeLessThanOrEqualTo(Date value) {
addCriterion("createTime <=", value, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeIn(List<Date> values) {
addCriterion("createTime in", values, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeNotIn(List<Date> values) {
addCriterion("createTime not in", values, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeBetween(Date value1, Date value2) {
addCriterion("createTime between", value1, value2, "createtime");
return (Criteria) this;
}
public Criteria andCreatetimeNotBetween(Date value1, Date value2) {
addCriterion("createTime not between", value1, value2, "createtime");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}
- ResultCode
package com.mt.vuedemo.bean;
/**
* @author tian
* @description
* @create 2019-02-12 15:39
*/
public enum ResultCode {
/**
* 成功
*/
SUCCESS(200),
/**
* 失败
*/
FAIL(400),
/**
* 未认证(签名错误)
*/
UNAUTHORIZED(401),
/**
* 接口不存在
*/
NOT_FOUND(404),
/**
* 服务器内部错误
*/
INTERNAL_SERVER_ERROR(500);
public int code;
ResultCode(int code) {
this.code = code;
}
}
- VueLoginInfoVo
package com.mt.vuedemo.bean;
import javax.validation.constraints.NotNull;
/**
* @author tian
* @description
* @create 2019-02-12 15:37
*/
public class VueLoginInfoVo {
@NotNull(message="用户名不允许为空")
private String username;
@NotNull(message="密码不允许为空")
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- ResultFactory
package com.mt.vuedemo.config;
import com.mt.vuedemo.bean.ResultCode;
import com.mt.vuedemo.result.Result;
/**
* @author tian
* @description 返回结构处理生成工厂
* @create 2019-02-12 15:40
*/
public class ResultFactory {
public static Result buildSuccessResult(Object data){
return buildResult(ResultCode.SUCCESS,"成功",data);
}
public static Result buildFailResult(String message){
return buildResult(ResultCode.FAIL,message,null);
}
public static Result buildResult(ResultCode resultCode,String message,Object data){
return buildResult(resultCode.code,message,data);
}
public static Result buildResult(int resultCode,String message,Object data){
return new Result(resultCode,message,data);
}
}
- SimpleCorsConfig
package com.mt.vuedemo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* @author tian
* @description cors跨域处理
* @resource https://www.cnblogs.com/cityspace/p/6858969.html
* @resource https://www.jianshu.com/p/f9c21da2c661
* @create 2019-01-24 17:10
*/
@Configuration
public class SimpleCorsConfig {
/**
* 设置 跨域请求参数,处理跨域请求
*
* @return
*/
@Bean
public CorsFilter corsFilter()
{
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
private CorsConfiguration buildConfig()
{
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许跨域访问的域名
corsConfiguration.addAllowedOrigin("*");
// 请求头
corsConfiguration.addAllowedHeader("*");
// 请求方法
corsConfiguration.addAllowedMethod(HttpMethod.DELETE);
corsConfiguration.addAllowedMethod(HttpMethod.POST);
corsConfiguration.addAllowedMethod(HttpMethod.GET);
corsConfiguration.addAllowedMethod(HttpMethod.PUT);
corsConfiguration.addAllowedMethod(HttpMethod.DELETE);
corsConfiguration.addAllowedMethod(HttpMethod.OPTIONS);
// 预检请求的有效期,单位为秒。
corsConfiguration.setMaxAge(3600L);
// 是否支持安全证书
corsConfiguration.setAllowCredentials(true);
return corsConfiguration;
}
}
- ArticleController
package com.mt.vuedemo.controller;
import com.mt.vuedemo.bean.Article;
import com.mt.vuedemo.config.ResultFactory;
import com.mt.vuedemo.result.Result;
import com.mt.vuedemo.server.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @author tian
* @description 文章控制器
* @create 2019-02-13 11:12
*/
@RestController
@RequestMapping("/api")
public class ArticleController {
@Autowired
private ArticleService articleService;
/**
* @Author cui
* @Description 查看全部
* @Date 09:04 2019/2/14 0014
* @param
* @return com.mt.vuedemo.result.Result
**/
@PostMapping("/getArticleList")
public Result getArticleList(){
return articleService.getArticleList();
}
/**
* @Author cui
* @Description 删除
* @Date 11:35 2019/2/14 0014
* @param id
* @return com.mt.vuedemo.result.Result
**/
@GetMapping("/deleteById")
public Result deleteById( Integer id){
return articleService.deleteById(id);
}
/**
* @Author cui
* @Description 添加
* @Date 11:35 2019/2/14 0014
* @param article
* @param bindingResult
* @return com.mt.vuedemo.result.Result
**/
@PostMapping("/addArticle")
public Result addArticle(@Valid @RequestBody Article article, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
String message = String.format("添加失败,详细信息[%s]。", bindingResult.getFieldError().getDefaultMessage());
return ResultFactory.buildFailResult(message);
}
return articleService.addArticle(article);
}
/**
* @Author cui
* @Description 根据id查询
* @Date 11:37 2019/2/14 0014
* @param id
* @return com.mt.vuedemo.result.Result
**/
@GetMapping("/getArticleById")
public Result getArticleById(Integer id){
return articleService.getArticleById(id);
}
/**
* @Author cui
* @Description 修改
* @Date 11:55 2019/2/14 0014
* @param article
* @param bindingResult
* @return com.mt.vuedemo.result.Result
**/
@PostMapping("/updateArticle")
public Result updateArticle(@Valid @RequestBody Article article, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
String message = String.format("修改失败,详细信息[%s]。", bindingResult.getFieldError().getDefaultMessage());
return ResultFactory.buildFailResult(message);
}
return articleService.updateArticle(article);
}
}
- LoginController
package com.mt.vuedemo.controller;
import com.mt.vuedemo.bean.VueLoginInfoVo;
import com.mt.vuedemo.config.ResultFactory;
import com.mt.vuedemo.result.Result;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Objects;
/**
* @author tian
* @description
* @create 2019-02-12 15:52
*/
@Controller
public class LoginController {
/**
* 登录控制器,前后端分离用的不同协议和端口,所以需要加入@CrossOrigin支持跨域。
* 给VueLoginInfoVo对象加入@Valid注解,并在参数中加入BindingResult来获取错误信息。
* 在逻辑处理中我们判断BindingResult知否含有错误信息,如果有错误信息,则直接返回错误信息。
*/
@CrossOrigin
@RequestMapping(value = "/api/login", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
@ResponseBody
public Result login(@Valid @RequestBody VueLoginInfoVo loginInfoVo, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
String message = String.format("登陆失败,详细信息[%s]。", bindingResult.getFieldError().getDefaultMessage());
return ResultFactory.buildFailResult(message);
}
if (!Objects.equals("root", loginInfoVo.getUsername()) || !Objects.equals("123456", loginInfoVo.getPassword())) {
String message = String.format("登陆失败,详细信息[用户名、密码信息不正确]。");
return ResultFactory.buildFailResult(message);
}
return ResultFactory.buildSuccessResult("登陆成功。");
}
}
- ArticleMapper
package com.mt.vuedemo.dao;
import com.mt.vuedemo.bean.Article;
import com.mt.vuedemo.bean.ArticleExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface ArticleMapper {
long countByExample(ArticleExample example);
int deleteByExample(ArticleExample example);
int deleteByPrimaryKey(Integer id);
int insert(Article record);
int insertSelective(Article record);
List<Article> selectByExample(ArticleExample example);
Article selectByPrimaryKey(Integer id);
int updateByExampleSelective(@Param("record") Article record, @Param("example") ArticleExample example);
int updateByExample(@Param("record") Article record, @Param("example") ArticleExample example);
int updateByPrimaryKeySelective(Article record);
int updateByPrimaryKey(Article record);
}
10.result
package com.mt.vuedemo.result;
/**
* @author tian
* @description
* @create 2019-02-12 15:38
*/
public class Result {
/**
* 响应状态码
*/
private int code;
/**
* 响应提示信息
*/
private String message;
/**
* 响应结果对象
*/
private Object data;
public Result(int code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
- ArticleService
package com.mt.vuedemo.server;
import com.mt.vuedemo.bean.Article;
import com.mt.vuedemo.bean.ArticleExample;
import com.mt.vuedemo.config.ResultFactory;
import com.mt.vuedemo.dao.ArticleMapper;
import com.mt.vuedemo.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.Date;
/**
* @author tian
* @description 文章服务
* @create 2019-02-13 11:15
*/
@Service
public class ArticleService {
@Autowired
private ArticleMapper articleMapper;
public Result getArticleList() {
ArticleExample example = new ArticleExample();
example.createCriteria().andIdIsNotNull();
return ResultFactory.buildSuccessResult(articleMapper.selectByExample(example));
}
public Result deleteById(Integer id) {
Assert.notNull(id,"id为空");
int i = articleMapper.deleteByPrimaryKey(id);
return commonResult(i,"删除");
}
public Result addArticle(Article article) {
article.setCreatetime(new Date());
int i = articleMapper.insertSelective(article);
return commonResult(i,"添加");
}
public Result commonResult(int i,String msg){
if (i==1){
return ResultFactory.buildSuccessResult(msg+"成功");
}else {
return ResultFactory.buildSuccessResult(msg+"失败");
}
}
public Result getArticleById(Integer id) {
Assert.notNull(id,"id为空");
return ResultFactory.buildSuccessResult( articleMapper.selectByPrimaryKey(id));
}
public Result updateArticle(Article article) {
int i = articleMapper.updateByPrimaryKeySelective(article);
return commonResult(i,"修改");
}
}
- generatorConfigHaveExample.xml
修改数据库连接驱动,数据库连接信息
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置Run As Maven build : Goals 参数 : mybatis-generator:generate -Dmybatis.generator.overwrite=true -->
<!-- 配置 tableName,使用 Run As Maven build 生成 dao model 层 -->
<!--带example 驱动连接高级-->
<generatorConfiguration>
<!-- 配置文件路径-->
<!--<properties url="${mybatis.generator.generatorConfig.properties}"/>-->
<!--数据库驱动包路径 -->
<classPathEntry location="G:\desktop\generator\lib\mysql-connector-java-8.0.13.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--关闭注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/vuedemo01?useUnicode=true;characterEncoding=utf-8;useSSL=false;serverTimezone=GMT%2B8"
userId="root"
password="root">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!--生成的model 包路径 -->
<javaModelGenerator targetPackage="com.mt.vuedemo.bean" targetProject="src/main/java">
<property name="enableSubPackages" value="ture"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成xml mapper文件 路径 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成的Dao接口 的包路径 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mt.vuedemo.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="ture"/>
</javaClientGenerator>
<!--对应数据库表名,多个表,请复制指定 -->
<!--<table tableName="article"></table>-->
<table schema="vuedemo01" tableName="article" domainObjectName="Article" />
<!--<table tableName="T_ROLE"></table>-->
<!--<table tableName="T_USER_ROLE"></table>-->
<!--<table tableName="T_PERMISSION"></table>-->
</context>
</generatorConfiguration>
- ArticleMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mt.vuedemo.dao.ArticleMapper">
<resultMap id="BaseResultMap" type="com.mt.vuedemo.bean.Article">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="articleName" jdbcType="VARCHAR" property="articlename" />
<result column="articleDesc" jdbcType="VARCHAR" property="articledesc" />
<result column="articleAuthor" jdbcType="VARCHAR" property="articleauthor" />
<result column="idTopping" jdbcType="INTEGER" property="idtopping" />
<result column="createTime" jdbcType="TIMESTAMP" property="createtime" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
id, articleName, articleDesc, articleAuthor, idTopping, createTime
</sql>
<select id="selectByExample" parameterType="com.mt.vuedemo.bean.ArticleExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from article
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from article
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from article
where id = #{id,jdbcType=INTEGER}
</delete>
<delete id="deleteByExample" parameterType="com.mt.vuedemo.bean.ArticleExample">
delete from article
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="com.mt.vuedemo.bean.Article">
insert into article (id, articleName, articleDesc,
articleAuthor, idTopping, createTime
)
values (#{id,jdbcType=INTEGER}, #{articlename,jdbcType=VARCHAR}, #{articledesc,jdbcType=VARCHAR},
#{articleauthor,jdbcType=VARCHAR}, #{idtopping,jdbcType=INTEGER}, #{createtime,jdbcType=TIMESTAMP}
)
</insert>
<insert id="insertSelective" parameterType="com.mt.vuedemo.bean.Article">
insert into article
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="articlename != null">
articleName,
</if>
<if test="articledesc != null">
articleDesc,
</if>
<if test="articleauthor != null">
articleAuthor,
</if>
<if test="idtopping != null">
idTopping,
</if>
<if test="createtime != null">
createTime,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="articlename != null">
#{articlename,jdbcType=VARCHAR},
</if>
<if test="articledesc != null">
#{articledesc,jdbcType=VARCHAR},
</if>
<if test="articleauthor != null">
#{articleauthor,jdbcType=VARCHAR},
</if>
<if test="idtopping != null">
#{idtopping,jdbcType=INTEGER},
</if>
<if test="createtime != null">
#{createtime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.mt.vuedemo.bean.ArticleExample" resultType="java.lang.Long">
select count(*) from article
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update article
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=INTEGER},
</if>
<if test="record.articlename != null">
articleName = #{record.articlename,jdbcType=VARCHAR},
</if>
<if test="record.articledesc != null">
articleDesc = #{record.articledesc,jdbcType=VARCHAR},
</if>
<if test="record.articleauthor != null">
articleAuthor = #{record.articleauthor,jdbcType=VARCHAR},
</if>
<if test="record.idtopping != null">
idTopping = #{record.idtopping,jdbcType=INTEGER},
</if>
<if test="record.createtime != null">
createTime = #{record.createtime,jdbcType=TIMESTAMP},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
update article
set id = #{record.id,jdbcType=INTEGER},
articleName = #{record.articlename,jdbcType=VARCHAR},
articleDesc = #{record.articledesc,jdbcType=VARCHAR},
articleAuthor = #{record.articleauthor,jdbcType=VARCHAR},
idTopping = #{record.idtopping,jdbcType=INTEGER},
createTime = #{record.createtime,jdbcType=TIMESTAMP}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="com.mt.vuedemo.bean.Article">
update article
<set>
<if test="articlename != null">
articleName = #{articlename,jdbcType=VARCHAR},
</if>
<if test="articledesc != null">
articleDesc = #{articledesc,jdbcType=VARCHAR},
</if>
<if test="articleauthor != null">
articleAuthor = #{articleauthor,jdbcType=VARCHAR},
</if>
<if test="idtopping != null">
idTopping = #{idtopping,jdbcType=INTEGER},
</if>
<if test="createtime != null">
createTime = #{createtime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.mt.vuedemo.bean.Article">
update article
set articleName = #{articlename,jdbcType=VARCHAR},
articleDesc = #{articledesc,jdbcType=VARCHAR},
articleAuthor = #{articleauthor,jdbcType=VARCHAR},
idTopping = #{idtopping,jdbcType=INTEGER},
createTime = #{createtime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
- application.yml
server:
port: 8088
spring:
datasource:
name: test
url: jdbc:mysql://127.0.0.1:3306/vuedemo01?useUnicode=true;characterEncoding=utf-8;useSSL=false;serverTimezone=GMT%2B8
username: root
password: root
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
mybatis:
mapper-locations: classpath:mapper/*.xml #注意:一定要对应mapper映射xml文件的所在路径
type-aliases-package: com.mt.vuedemo.bean # 注意:对应实体类的路径
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mt</groupId>
<artifactId>vuedemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>vuedemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>src/main/resources/generator/generatorConfigHaveExample.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
前台代码
1.config/index.js
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
// proxyTable: {},
// 路由接口代理配置
proxyTable: {
'/api': {
target: 'https://localhost:8088',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8081, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: false,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
cssSourceMap: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
/**
* Source Maps
*/
productionSourceMap: true,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}
- BlogFooter
<template>
<div>
<!--页面尾部-->
</div>
</template>
<script>
export default {
name: 'BlogFooter'
}
</script>
<style scoped>
</style>
- BlogHeader
<template>
<div>
<!--页面头部-->
</div>
</template>
<script>
export default {
name: 'BlogHeader'
}
</script>
<style scoped>
</style>
- BlogIndex
<template>
<div>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column
prop="id"
label="序号"
width="180">
</el-table-column>
<el-table-column
prop="articlename"
label="名称"
width="180">
</el-table-column>
<el-table-column
prop="articleauthor"
label="作者">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="150">
<template slot-scope="scope">
<el-button type="text" @click="open6(scope.row)" size="small">删除</el-button>
<el-button type="text" @click="open1(true,scope.row.id)" size="small">修改</el-button>
</template>
</el-table-column>
</el-table>
<el-button type="primary" @click="open1(false)" id="id1">添加</el-button>
</div>
</template>
<script>
import BlogHeader from './BlogHeader'
import BlogFooter from './BlogFooter'
export default {
name: 'BlogIndex',
components: { BlogHeader, BlogFooter},
// comments: { BlogHeader, BlogFooter },
inject:['reload'],
data() {
return {
tableData: []
}
},
mounted:function() {
this.getArticleList();
},
methods: {
getArticleList () {
this.$axios
.post('/getArticleList',{
})
.then(successResponse =>{
this.tableData = successResponse.data.data
console.log(successResponse.data.data)
})
},
deleteClick(row) {
this.$axios
.get('/deleteById',{
params :{
id:row.id
}
})
.then(successResponse =>{
this.reload()
})
},
open6(row) {
let _row = row
this.$confirm('请确认是否删除?', '确认信息', {
distinguishCancelAndClose: true,
confirmButtonText: '删除',
cancelButtonText: '放弃'
})
.then(() => {
this.$message({
type: 'success',
message: '删除成功',
});
this.deleteClick(_row)
})
.catch(action => {
this.$message({
type: 'info',
message: action === 'cancel'
? '操作取消'
: '操作关闭'
})
});
},
open1 (isUpdate,rowId) {
//传对象
// row['isUpdate']=isUpdate;
// this.$router.push({path: '/add',query:row});
this.$router.push({path: '/add',query:{isUpdate:isUpdate,rowId:rowId}});
}
}
}
</script>
<style scoped>
#id1 {
float: right;
margin:10px 70px;
}
</style>
- BlogLogin
<template>
<div>
<blog-header></blog-header>
<hr/>
<div >
用户名:<input type = "text" v-model="loginInfoVo.username" placeholder="请输入用户名"/>
<br/>
密码:<input type="password" v-model="loginInfoVo.password" placeholder="请输入密码">
<br/>
<button v-on:click="login">登录</button>
<br/>
<br/>
登录验证情况:<textarea cols ="30" rows="3" v-model = "responseResult"></textarea></div>
<blog-footer></blog-footer>
</div>
</template>
<script>
import BlogHeader from './BlogHeader'
import BlogFooter from './BlogFooter'
export default {
name: 'BlogLogin',
components: {BlogFooter, BlogHeader },
data () {
return {
loginInfoVo: { username: '', password: '' },
responseResult: []
}
},
methods: {
login () {
this.$axios
.post('/login', {
username: this.loginInfoVo.username,
password: this.loginInfoVo.password
})
.then(successResponse => {
this.responseResult = JSON.stringify(successResponse.data)
if (successResponse.data.code === 200) {
this.$router.replace({path: '/index'})
}
})
.catch(failResponse => {})
}
}
}
</script>
<style scoped>
</style>
- BlogUpdate
<template>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="文章名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="文章作者" prop="authorName">
<el-input v-model="ruleForm.authorName"></el-input>
</el-form-item>
<!--<el-form-item label="文章类型" prop="region">-->
<!--<el-select v-model="ruleForm.region" placeholder="请选择文章类型">-->
<!--<el-option label="原创" value="shanghai"></el-option>-->
<!--<el-option label="转载" value="beijing"></el-option>-->
<!--</el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="是否置顶" prop="delivery">-->
<!--<el-switch v-model="ruleForm.delivery"></el-switch>-->
<!--</el-form-item>-->
<el-form-item>
<el-button type="primary" @click="updateForm('ruleForm',ruleForm)" v-if="isUpdate">
更新修改</el-button>
<el-button type="primary" @click="submitForm('ruleForm',ruleForm)" v-else>
立即创建</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
name: 'BlogUpdate',
data() {
return {
isUpdate: '',
ruleForm: {
name: '',
authorName: '',
region: '',
delivery: false
},
rules: {
name: [
{ required: true, message: '请输入文章名称', trigger: 'blur' },
{ min: 1, max: 15, message: '长度在 1 到 15 个字符', trigger: 'blur' }
],
authorName: [
{ required: true, message: '请输入文章作者', trigger: 'blur' },
{ min: 1, max: 15, message: '长度在 1 到 15 个字符', trigger: 'blur' }
],
region: [
{ required: true, message: '请选择文章类型', trigger: 'change' }
]
}
};
},
mounted:function () {
this.isUpdateTrue();
},
methods: {
submitForm(formName,ruleForm) {
console.log(ruleForm)
this.$refs[formName].validate((valid) => {
if (valid) {
// alert('submit!');
this.$axios
.post('/addArticle',{
articlename :ruleForm.name,
articleauthor: ruleForm.authorName
})
.then(successResponse =>{
this.$message({
message: '添加成功',
type: 'success'
});
this.$router.push({path: '/index'});
// alert('submit success!');
})
} else {
console.log('error submit!!');
return false;
}
});
},
updateForm(formName,ruleForm) {
console.log(ruleForm)
this.$refs[formName].validate((valid) => {
if (valid) {
// alert('submit!');
this.$axios
.post('/updateArticle',{
id:this.$route.query.rowId,
articlename :ruleForm.name,
articleauthor: ruleForm.authorName
})
.then(successResponse =>{
//alert('update success!');
this.$message({
message: '修改成功',
type: 'success'
});
this.$router.push({path: '/index'});
})
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
isUpdateTrue() {
this.isUpdate=this.$route.query.isUpdate;
let rowId = this.$route.query.rowId;
if (rowId != undefined && rowId != '' && rowId != null){
this.$axios.get('/getArticleById',{
params: {
id:rowId
}
}).then(successResponse =>{
this.ruleForm.name =successResponse.data.data.articlename;
this.ruleForm.authorName = successResponse.data.data.articleauthor;
})
}
}
}
}
</script>
<style scoped>
</style>
- src/router/index.js
import Vue from 'vue'
import Router from 'vue-router'
// import HelloWorld from '@/components/HelloWorld'
import BlogLogin from '@/components/BlogLogin'
import BlogIndex from '@/components/BlogIndex'
import BlogUpdate from '../components/BlogUpdate'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
redirect: '/login'
},
{
path: '/index',
name: 'BlogIndex',
component: BlogIndex
},
{
path: '/manage',
redirect: '/login'
},
{
path: '/login',
name: 'BlogLogin',
component: BlogLogin
},
{
path: '/add',
name: 'BlogUpdate',
component: BlogUpdate
}
]
})
- App.Vue
<template>
<div id="app">
<!--<img src="./assets/logo.png">-->
<router-view v-if="isRouterAlive"/>
</div>
</template>
<script>
export default {
name: 'App',
provide () {
return {
reload : this.reload
}
},
data () {
return {
isRouterAlive: true
}
},
methods: {
reload () {
this.isRouterAlive = false
this.$nextTick(function () {
this.isRouterAlive = true
})
}
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
- main.js
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
// 引用axios,并设置基础URL为后端服务api地址
var axios = require('axios')
axios.defaults.baseURL = 'http://localhost:8088/api'
// 将API方法绑定到全局
Vue.prototype.$axios = axios
Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
mysql
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80014
Source Host : localhost:3306
Source Schema : vuedemo01
Target Server Type : MySQL
Target Server Version : 80014
File Encoding : 65001
Date: 14/02/2019 13:55:39
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`articleName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文章名称',
`articleDesc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文章描述',
`articleAuthor` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文章作者',
`idTopping` int(11) NULL DEFAULT NULL COMMENT '是否置顶 0 不置顶 1 置顶 ',
`createTime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
现在项目已经全部搭建完成,根据个人配置情况修改下配置即可使用,主要是数据库连接地址。有错误欢迎留言