EasyCode模板

controller.java.vm
 ##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Controller"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.web.bind.annotation.*;
import com.xx.config.Response;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import javax.annotation.Resource;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})控制层
 *
 * @author $!author
 * @since $!time.currTime()
 */
@RestController
@RequestMapping("/$!tool.firstLowerCase($tableInfo.name)")
public class $!{tableName} {
    /**
     * 服务对象
     */
    @Resource
    private $!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;

    /**
     * 通过主键查询单条数据
     *
     * @param $!tool.firstLowerCase($tableInfo.name) 参数对象
     * @return 单条数据
     */
    @RequestMapping(value = "get", method = RequestMethod.GET)
    public Response<$tableInfo.name> selectOne($tableInfo.name $!tool.firstLowerCase($tableInfo.name)) {
        $tableInfo.name result = $!{tool.firstLowerCase($tableInfo.name)}Service.selectById($!{tool.firstLowerCase($tableInfo.name)}.get$!{tool.firstUpperCase(${pk.name})}());
        if(result != null){
          return   Response.createSuccessResponse("查询成功", result);
        }
        return Response.createErrorResponse("查询失败");
    }
    
    /**
     * 新增一条数据
     *
     * @param $!tool.firstLowerCase($tableInfo.name) 实体类
     * @return Response对象
     */
    @RequestMapping(value = "insert", method = RequestMethod.POST)
    public Response<$tableInfo.name> insert(@RequestBody $tableInfo.name $!tool.firstLowerCase($tableInfo.name)) {
        int result = $!{tool.firstLowerCase($tableInfo.name)}Service.insert($!tool.firstLowerCase($tableInfo.name));
        if (result > 0) {
          $!{tool.firstLowerCase($tableInfo.name)}.set$!{tool.firstUpperCase($!pk.name)}($!{tool.firstLowerCase($tableInfo.name)}Service.selectLastId());
          return   Response.createSuccessResponse("新增成功", $!tool.firstLowerCase($tableInfo.name));
        }
        return Response.createErrorResponse("新增失败");
    }

    /**
     * 修改一条数据
     *
     * @param $!tool.firstLowerCase($tableInfo.name) 实体类
     * @return Response对象
     */
    @RequestMapping(value = "update", method = RequestMethod.PUT)
    public Response<$tableInfo.name> update(@RequestBody $tableInfo.name $!tool.firstLowerCase($tableInfo.name)) {
        $tableInfo.name result = $!{tool.firstLowerCase($tableInfo.name)}Service.update($!tool.firstLowerCase($tableInfo.name));
        if (result != null) {
          return   Response.createSuccessResponse("修改成功", result);
        }
        return Response.createErrorResponse("修改失败");
    }

    /**
     * 删除一条数据
     *
     * @param ${pk.name} 参数对象
     * @return Response对象
     */
    @RequestMapping(value = "delete", method = RequestMethod.DELETE)
    public Response<Integer> delete(Integer ${pk.name}) {
        int result = $!{tool.firstLowerCase($tableInfo.name)}Service.deleteById(${pk.name});
        if (result > 0) {
          return   Response.createSuccessResponse("删除成功", result);
        }
        return Response.createErrorResponse("删除失败");
    }
    /**
     * 批量删除数据
     *
     * @param ${pk.name}s 参数对象
     * @return Response对象
     */
    @RequestMapping(value = "deletemultiple", method = RequestMethod.DELETE)
    public Response<Integer> deletemultiple(Integer[] ${pk.name}s) {
        int result = $!{tool.firstLowerCase($tableInfo.name)}Service.deletemultiple(${pk.name}s);
        if (result > 0) {
            return   Response.createSuccessResponse("删除成功", result);
        }
        return Response.createErrorResponse("删除失败");
    }
    /**
     * 查询全部
     *
     * @return Response对象
     */
    @RequestMapping(value = "selectAll", method = RequestMethod.GET)
    public Response<List<$tableInfo.name>> selectAll() {
        List<$tableInfo.name> $!tool.firstLowerCase($tableInfo.name)s = $!{tool.firstLowerCase($tableInfo.name)}Service.selectAll();
        if ($!tool.firstLowerCase($tableInfo.name)s != null) {
           return  Response.createSuccessResponse("查询成功", $!tool.firstLowerCase($tableInfo.name)s);
        }
        return Response.createErrorResponse("查询失败");
    }

    /**
     * 分页查询
     *
     * @param start 偏移
     * @param limit 条数
     * @return Response对象
     */
    @RequestMapping(value = "selectPage", method = RequestMethod.GET)
    public Response<List> selectPage(Integer start, Integer limit) {
        start=(start-1)*limit;
        List<$tableInfo.name> $!tool.firstLowerCase($tableInfo.name)s = $!{tool.firstLowerCase($tableInfo.name)}Service.selectPage(start, limit);
        if ($!tool.firstLowerCase($tableInfo.name)s != null) {
          return   Response.createSuccessResponse("查询成功",(List)  $!tool.firstLowerCase($tableInfo.name)s);
        }
        return Response.createErrorResponse("查询失败");
    }
    
    @RequestMapping(value = "selectList", method = RequestMethod.POST)
    public Response<List> selectPage(@RequestBody Map<String, Object> data) {
        System.out.println("data=" + data);
        
        
        $tableInfo.name $!tool.firstLowerCase($tableInfo.name) = null;
        if(data.get("$!tool.firstLowerCase($tableInfo.name)")!=null){
            // 将数据转成json字符串
            String jsonObject= JSON.toJSONString( data.get("$!tool.firstLowerCase($tableInfo.name)"));
            //将json转成需要的对象
            $!tool.firstLowerCase($tableInfo.name) = JSONObject.parseObject(jsonObject,$tableInfo.name .class);
        }
        
        Integer start = null;
        Integer limit = null;
        if(data.get("start")!=null&&data.get("limit")!=null){
              start = (Integer) data.get("start");
              limit = (Integer) data.get("limit");
              start=( start-1) *  limit;
        }
        List<$tableInfo.name> $!tool.firstLowerCase($tableInfo.name)s = $!{tool.firstLowerCase($tableInfo.name)}Service.selectList($!tool.firstLowerCase($tableInfo.name),start, limit);
        if ($!tool.firstLowerCase($tableInfo.name)s != null) {
          return   Response.createSuccessResponse("查询成功",(List)  $!tool.firstLowerCase($tableInfo.name)s);
        }
        return Response.createErrorResponse("查询失败");
    }
}




service.java.vm
 ##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Service"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import java.util.List;
import java.util.Map;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
 *
 * @author $!author
 * @since $!time.currTime()
 */
public interface $!{tableName} {
    public Integer selectLastId();
    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    $!{tableInfo.name} selectById($!pk.shortType $!pk.name);

    /**
     * 分页查询
     *
     * @param start 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectPage(int start, int limit);

    /**
     * 查询全部
     *
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectAll();
    
    /**
     * 通过实体作为筛选条件查询
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}),Integer start, Integer limit);

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
    
    /**
     * 批量新增
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
     * @return 影响行数
     */
    int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s);
    
    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 修改
     */
    $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 影响行数
     */
    int deleteById($!pk.shortType $!pk.name);
     /**
     * 通过主键删除数据
     *
     * @param ${pk.name}s 主键
     * @return 影响行数
     */
    int  deletemultiple(Integer[] ${pk.name}s);
    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
    int count();
}



serviceImpl.java.vm
 ##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * $!{tableInfo.comment}($!{tableInfo.name}表)服务实现类
 *
 * @author $!author
 * @since $!time.currTime()
 */
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableName} implements $!{tableInfo.name}Service {
    @Resource
    private $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;
    @Override
    public Integer selectLastId() {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectLastId();
    }
    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    @Override
    public $!{tableInfo.name} selectById($!pk.shortType $!pk.name) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectById($!pk.name);
    }

    /**
     * 分页查询
     *
     * @param start 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    @Override
    public List<$!{tableInfo.name}> selectPage(int start, int limit) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectPage(start, limit);
    }

    /**
     * 查询所有
     *
     * @return 实例对象的集合
     */
     @Override
     public List<$!{tableInfo.name}> selectAll() {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectAll();
     }
     
    /**
     * 根据条件查询
     *
     * @return 实例对象的集合
     */
    @Override
    public List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!{tool.firstLowerCase($!{tableInfo.name})},Integer start, Integer limit) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.selectList($!{tool.firstLowerCase($!{tableInfo.name})},  start,   limit);
    }
    
    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    @Override
    public int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name}));
    }

    /**
     * 批量新增
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
     * @return 生效的条数
     */
    @Override
    public int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.batchInsert($!tool.firstLowerCase($!{tableInfo.name})s);
    }

    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 实例对象
     */
    @Override
    public $!{tableInfo.name} update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name}));
        return this.selectById($!{tool.firstLowerCase($!{tableInfo.name})}.get$!tool.firstUpperCase($pk.name)());
    }

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 是否成功
     */
    @Override
    public int deleteById($!pk.shortType $!pk.name) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name);
    }
     /**
     * 批量删除数据
     *
     * @param ${pk.name}s 主键
     * @return 是否成功
     */
    public int deletemultiple(Integer[] ${pk.name}s) {
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.deletemultiple(${pk.name}s);
    }
    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
     @Override
     public int count(){
        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.count();
     }
}





dao.java.vm
  ##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Dao"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
 *
 * @author $!author
 * @since $!time.currTime()
 */
@Mapper
public interface $!{tableName} {
    public Integer selectLastId();
    /**
     * 通过ID查询单条数据
     *
     * @param $!pk.name 主键
     * @return 实例对象
     */
    $!{tableInfo.name} selectById($!pk.shortType $!pk.name);
    
    /**
     * 分页查询
     *
     * @param start 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectPage(@Param("start") int start, @Param("limit") int limit);

    /**
     * 查询全部
     *
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectAll();
    
    /**
     * 通过实体作为筛选条件查询
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 对象列表
     */
    List<$!{tableInfo.name}> selectList($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}),Integer start, Integer limit);

    /**
     * 新增数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
    
    /**
     * 批量新增
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name})s 实例对象的集合
     * @return 影响行数
     */
    int batchInsert(List<$!{tableInfo.name}> $!tool.firstLowerCase($!{tableInfo.name})s);
    
    /**
     * 修改数据
     *
     * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
     * @return 影响行数
     */
    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 通过主键删除数据
     *
     * @param $!pk.name 主键
     * @return 影响行数
     */
    int deleteById($!pk.shortType $!pk.name);
     /**
     * 批量删除数据
     *
     * @param ${pk.name}s 主键
     * @return 影响行数
     */
    int deletemultiple(Integer[] ${pk.name}s);
    /**
     * 查询总数据数
     *
     * @return 数据总数
     */
    int count();
}





entity.java.vm
 ##引入宏定义
$!{define.vm}

##使用宏定义设置回调(保存位置与文件后缀)
#save("/entity", ".java")

##使用宏定义设置包后缀
#setPackageSuffix("entity")

##使用全局变量实现默认包导入
$!{autoImport.vm}
import java.io.Serializable;

##使用宏定义实现类注释信息
#tableComment("实体类")
public class $!{tableInfo.name} implements Serializable {
    private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
    #if(${column.comment})/**
     * ${column.comment}
     */#end

    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end

#foreach($column in $tableInfo.fullColumn)
##使用宏定义实现get,set方法
#getSetMethod($column)
#end

}

   

mapper.java.vm
 ##引入mybatis支持
$!mybatisSupport

##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Dao.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

<?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="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao">
    <!-- 结果集 -->
    <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)
        <result property="$!column.name" column="$!column.obj.name"  />
#end
    </resultMap>
    
    <!-- 基本字段 -->
    <sql id="Base_Column_List">
        #foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end
        <!--idea2023.2之后的版本 $velocityHasNext 改成 $foreach.hasNext -->
    </sql>
     <!-- 查询最后插入id -->
    <select id="selectLastId" resultType="int">
        select last_insert_id()
    </select>
    <!-- 查询单个 -->
    <select id="selectById" resultMap="$!{tableInfo.name}Map">
        select
          <include refid="Base_Column_List" />
        from $!tableInfo.obj.name
        where $!pk.obj.name = #{$!pk.name}
    </select>

    <!-- 分页查询 -->
    <select id="selectPage" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="Base_Column_List" />
        from $!tableInfo.obj.name
        limit #{start},#{limit}
    </select>

    <!-- 查询全部 -->
    <select id="selectAll" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="Base_Column_List" />
        from $!tableInfo.obj.name
    </select>

    <!--通过实体作为筛选条件查询-->
    <select id="selectList" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="Base_Column_List" />
        from $!tableInfo.obj.name
        <where>
        #foreach($column in $tableInfo.fullColumn)
        <if test="$!{tool.firstLowerCase($tableInfo.name)} != null">
            <if test="$!{tool.firstLowerCase($tableInfo.name)}.$!column.name != null#if($column.type.equals("java.lang.String")) and $!{tool.firstLowerCase($tableInfo.name)}.$!column.name != ''#end">
                or $!column.obj.name like concat('%',#{$!{tool.firstLowerCase($tableInfo.name)}.$!column.name},'%') 
            </if>
        </if>
        #end
        </where>
         <if test="start != null and limit != null"  >
            limit   #{start}, #{limit}
        </if>
    </select>

    <!-- 新增所有列 -->
    <!--idea2023.2之后的版本 $velocityHasNext 改成 $foreach.hasNext -->
    <insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true">
        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values ( #foreach($column in $tableInfo.fullColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)
    </insert>
    
    <!-- 批量新增 -->
    <!--idea2023.2之后的版本 $velocityHasNext 改成 $foreach.hasNext -->
    <insert id="batchInsert">
        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.fullColumn)$!column.obj.name#if($velocityHasNext), #end#end)
        values 
        <foreach collection="$!tool.firstLowerCase($!{tableInfo.name})s" item="item" index="index" separator=",">
        (
            #foreach($column in $tableInfo.fullColumn)
            #{item.$!{column.name}}#if($velocityHasNext), #end
            #end
         )
         </foreach>
    </insert>

    <!-- 通过主键修改数据 -->
    <update id="update">
        update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}
        <set>
        #foreach($column in $tableInfo.otherColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                $!column.obj.name = #{$!column.name},
            </if>
        #end
        </set>
        where $!pk.obj.name = #{$!pk.name}
    </update>

    <!--通过主键删除-->
    <delete id="deleteById">
        delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}
    </delete>
     <!--批量删除-->
    <delete id="deletemultiple">
        delete from $!{tableInfo.obj.name}  where $!pk.obj.name in
        <foreach collection="array" item="${pk.name}s" open="(" close=")" separator=",">
            #{${pk.name}s}
        </foreach>
    </delete>
    <!-- 总数 -->
    <select id="count" resultType="int">
        select count(*) from $!{tableInfo.obj.name}
    </select>
</mapper>





view.vue.vm
 ##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "View"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".vue"))
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end
<template>
  <div>
  <div style="margin-bottom: 5px;">
    <el-row> 
      <el-button type="primary" :icon="Edit"   @click="dialogAddVisible = true">添加</el-button>
      <el-button type="primary" :icon="Edit"   @click="dialogMultipleDelVisible = true">批量删除</el-button>
      <el-input v-model="search"  placeholder="按照名字查找" style="width: 200px;display: inline-block;float: left;margin-left: 10px;" />
      <el-button :icon="Search" @click="init()" >查找</el-button> 
    </el-row>
  </div>
  <!-- 表格 -->
  <el-table :data="tableData" @selection-change="handleSelectionChange"  >
    <el-table-column type="selection"  />
    <el-table-column type="index"  />
    #foreach($column in $tableInfo.fullColumn)
     #if($pk == $!{column.name}) 
      <el-table-column prop="$!{column.name}" label="${column.comment}"  v-if="false"/> 
     #else
      <el-table-column prop="$!{column.name}" label="${column.comment}"  /> 
     #end
    #end
    
    <el-table-column label="操作" fixed="right"> 
      <template #default="scope">
        <el-button size="small" @click="handleEdit(scope.$index, scope.row)">修改</el-button>
        <el-button size="small" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
  <!-- 表格 -->
  <!-- 分页 -->
  <div class="demo-pagination-block"> 
    <el-pagination
      v-model:current-page="currentPage"
      v-model:page-size="pageSize"
      :page-sizes="[5, 10, 15, 20]"
      :small="small" 
      :background="background"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total$!{tool.firstUpperCase($tableInfo.name)}"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
  <!-- 分页 -->

  <!-- 修改对话框 -->
  <el-dialog v-model="dialogFormVisible" title="修改" draggable>
    <el-form :model="edit$!{tool.firstUpperCase($tableInfo.name)}"> 
     #foreach($column in $tableInfo.fullColumn) 
       <el-form-item label="${column.comment}"  >
        <el-input v-model="edit$!{tool.firstUpperCase($tableInfo.name)}.$!{column.name}" autocomplete="off" />
       </el-form-item>  
    #end
      
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取消</el-button>
        <el-button type="primary" @click="edit$!{tool.firstUpperCase($tableInfo.name)}ById()">
          确定
        </el-button>
      </span>
    </template>
  </el-dialog>
  <!-- 修改对话框 -->

  <!-- 添加 -->
  <el-dialog v-model="dialogAddVisible" title="添加" draggable>
    <el-form :model="add$!{tool.firstUpperCase($tableInfo.name)}"> 
    #foreach($column in $tableInfo.fullColumn) 
      <el-form-item label="${column.comment}" >
        <el-input v-model="add$!{tool.firstUpperCase($tableInfo.name)}.$!{column.name}" autocomplete="off" />
      </el-form-item> 
    #end
      
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogAddVisible = false">取消</el-button>
        <el-button type="primary" @click="add$!{tool.firstUpperCase($tableInfo.name)}s()">
          确定
        </el-button>
      </span>
    </template>
  </el-dialog>
  <!-- 添加 -->




  <!-- 删除提示框 --> 
  <el-dialog
    v-model="delDialogVisible"
    title="提示"
    width="30%" 
    align-center
    draggable
  >
    <span> 是否真的执行删除操作?</span>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="delDialogVisible = false">取消</el-button>
        <el-button type="primary" @click="del$!{tool.firstUpperCase($tableInfo.name)}ById()">
          确认
        </el-button>
      </span>
    </template>
  </el-dialog>

  <!-- 删除提示框 -->
  <!-- 批量删除提示框 --> 
  <el-dialog
    v-model="dialogMultipleDelVisible"
    title="提示"
    width="30%" 
    align-center
    draggable
  >
    <span> 是否真的执行删除操作?</span>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogMultipleDelVisible = false">取消</el-button>
        <el-button type="primary" @click="del$!{tool.firstUpperCase($tableInfo.name)}ByIds()">
          确认
        </el-button>
      </span>
    </template>
  </el-dialog> 
  <!-- 批量删除提示框 -->
</div>
</template>
  
<script setup>
import axios from 'axios';
import { ref } from 'vue';
import { ElMessage,ElTable  } from 'element-plus' //消息提示框
import { Edit, Search } from '@element-plus/icons-vue'//按钮样式
//多选
const multipleSelection = ref([])
//显示和隐藏修改对话框
const dialogFormVisible = ref(false)
//显示和隐藏添加对话框
const dialogAddVisible = ref(false)
//显示和隐藏删除对话框
const delDialogVisible = ref(false)
//显示和隐藏批量删除对话框
const dialogMultipleDelVisible = ref(false)
//表格
const tableData = ref([]);
//分页
const currentPage = ref(1)
const pageSize = ref(5)
const small = ref(false)
const background = ref(true) 
const total$!{tool.firstUpperCase($tableInfo.name)} = ref(0)
const edit$!{tool.firstUpperCase($tableInfo.name)} = ref({})//修改用的变量 
const del$!{tool.firstUpperCase($tableInfo.name)} = ref({})
const add$!{tool.firstUpperCase($tableInfo.name)} = ref({})//添加用的变量


const search = ref('')//查询
//多选
const handleSelectionChange = (val) => {
  for(let i=0 ; i < val.length; i++){
    multipleSelection.value[i] = val[i].id 
  }
  
}
//分页
const handleSizeChange = (val) => {
  console.log(`${val} items per page`)
  init();
}
const handleCurrentChange = (val) => {
  console.log(`current page: ${val}`)
  init();
}

//查询所有
const getAll = ()=>{
  axios.get("http://localhost:8089/cartoonback/$!{tool.firstLowerCase($tableInfo.name)}/selectAll")
      .then((response) => {
      console.log('=============',response.data);  
      total$!{tool.firstUpperCase($tableInfo.name)}.value = response.data.data.length;
     })
}

//分页
const init = () => {
  getAll();
  const data = {
    $!{tool.firstUpperCase($tableInfo.name)}: {
      #foreach($column in $tableInfo.fullColumn) 
      $!{column.name}: search.value,
      #end 
    },
    start: currentPage.value,
    limit: pageSize.value
  }
  axios.post("http://localhost:8089/cartoonback/$!{tool.firstLowerCase($tableInfo.name)}/selectList", data)
    .then((response) => { 
      tableData.value = response.data.data;
      
    })
    .catch((error) => {
      console.error(error);
    });
};
init();//直接调用 让其加载页面后就返回数据
//添加信息
const add$!{tool.firstUpperCase($tableInfo.name)}s = () => {
  let $!{tool.firstUpperCase($tableInfo.name)} = add$!{tool.firstUpperCase($tableInfo.name)}.value
  axios.post("http://localhost:8089/cartoonback/$!{tool.firstLowerCase($tableInfo.name)}/insert", $!{tool.firstUpperCase($tableInfo.name)})
    .then((res) => {
      console.log(res.data);
      if (res.data.message == '新增成功') {
        dialogAddVisible.value = false
        ElMessage({
          message: '添加成功.',
          type: 'success',
        })
        init();
      } else {
        ElMessage.error('添加失败.')
        init();
      }
    })
    .catch((error) => {
      console.error(error);
    });
}

//修改按钮
const handleEdit = (index, row) => {
  console.log(index, row)
  edit$!{tool.firstUpperCase($tableInfo.name)}.value = row
  dialogFormVisible.value = true
}
//修改信息
const edit$!{tool.firstUpperCase($tableInfo.name)}ById = () => {
  let $!{tool.firstUpperCase($tableInfo.name)} = edit$!{tool.firstUpperCase($tableInfo.name)}.value
  axios.put("http://localhost:8089/cartoonback/$!{tool.firstLowerCase($tableInfo.name)}/update", $!{tool.firstUpperCase($tableInfo.name)})
    .then((res) => {
      if (res.data.message == '修改成功') {
        dialogFormVisible.value = false
        ElMessage({
          message: '修改成功.',
          type: 'success',
        })
        init();
      } else {
        ElMessage.error('修改失败.')
        init();
      }
    })
    .catch((error) => {
      console.error(error);
    });
}


//删除按钮
const handleDelete = (index, row) => {
  del$!{tool.firstUpperCase($tableInfo.name)}.value = row
  delDialogVisible.value = true
}


//删除操作
const del$!{tool.firstUpperCase($tableInfo.name)}ById = () => {
  let id = del$!{tool.firstUpperCase($tableInfo.name)}.value.$!pk.name
  console.error("=====", id);
  axios.delete("http://localhost:8089/cartoonback/$!{tool.firstLowerCase($tableInfo.name)}/delete?$!pk.name=" + id)
    .then((res) => {
      console.log(res.data);
      if (res.data.message == '删除成功') {
        delDialogVisible.value = false
        ElMessage({
          message: '删除成功.',
          type: 'success',
        })
        init();
      } else {
        ElMessage.error('删除失败.')
        init();
      }
    })
    .catch((error) => {
      console.error(error);
    });
}
//批量删除
const del$!{tool.firstUpperCase($tableInfo.name)}ByIds = () => {  
  if(multipleSelection.value.length > 0){
    axios.delete("http://localhost:8089/cartoonback/$!{tool.firstLowerCase($tableInfo.name)}/deletemultiple?ids=" + multipleSelection.value)
    .then((res) => {
      console.log(res.data);
      if (res.data.message == '删除成功') {
        dialogMultipleDelVisible.value = false
        ElMessage({
          message: '删除成功.',
          type: 'success',
        })
        init();
      } else {
        ElMessage.error('删除失败.')
        init();
      }
    })
    .catch((error) => {
      console.error(error);
    });
  }else{
    ElMessage.error('没选中任何项.')
  }
 
}

</script>

<style scoped>
.dialog-footer button:first-child {
  margin-right: 10px;
}
* { 
  line-height: 40px;
}
</style>



jsp.vue.vm
 ##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "View"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".jsp"))
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>

<script src="js/vue.js"></script>
<script src="js/httpVueLoader.js"></script>
<script src="js/element.js"></script>
<script src="js/axios.js"></script>  
<script src="js/layui/layui.all.js"></script> 
<link rel="stylesheet" href="js/layui/css/layui.css">
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/elementindex.css" type="text/css">
</head>
<body>
<div id="app">
<div>   
  <div style="margin-bottom: 5px;">
    <el-row> 
      <el-button type="primary" :icon="Edit"   @click="dialogAddVisible = true">添加</el-button>
    <!--   <el-button type="primary" :icon="Edit"   @click="dialogMultipleDelVisible = true">批量删除</el-button> -->
       <el-button type="primary" :icon="Search" @click="init()" >查找</el-button> 
      <el-input v-model="search"  placeholder="按照名字查找" style="width: 200px;display: inline-block;float: left;margin-left: 10px;" />
     
    </el-row>
  </div>
  <!-- 表格 -->
  <!-- 表格 -->
  <el-table :data="tableData" @selection-change="handleSelectionChange"  >
    <el-table-column type="selection"  />
    <el-table-column type="index"  />
    #foreach($column in $tableInfo.fullColumn)
     #if($pk == $!{column.name}) 
      <el-table-column prop="$!{column.name}" label="${column.comment}"  v-if="false"> 
        <template #default="scope">
           {{ scope.row.$!{column.name} }}
        </template>
      </el-table-column>
     #else
      <el-table-column prop="$!{column.name}" label="${column.comment}"  > 
        <template #default="scope">
           {{ scope.row.$!{column.name} }}
        </template>
      </el-table-column>
     #end
    #end
    
    <el-table-column label="操作" fixed="right"> 
      <template #default="scope">
        <el-button size="small" @click="handleEdit(scope.$index, scope.row)">修改</el-button>
        <el-button size="small" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
  <!-- 表格 -->
  <!-- 分页 -->
  <div class="demo-pagination-block"> 
    <el-pagination
      v-model:current-page="currentPage"
      v-model:page-size="pageSize"
      :page-sizes="[5, 10, 15, 20]"
      :small="small" 
      :background="background"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total$!{tool.firstUpperCase($tableInfo.name)}"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
  <!-- 分页 -->

  <!-- 修改对话框 -->
  <el-dialog v-model="dialogFormVisible" title="修改" draggable>
    <el-form :model="edit$!{tool.firstUpperCase($tableInfo.name)}"> 
     #foreach($column in $tableInfo.fullColumn) 
       <el-form-item label="${column.comment}"  >
        <el-input v-model="edit$!{tool.firstUpperCase($tableInfo.name)}.$!{column.name}" autocomplete="off" />
       </el-form-item>  
    #end
      
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取消</el-button>
        <el-button type="primary" @click="edit$!{tool.firstUpperCase($tableInfo.name)}ById()">
          确定
        </el-button>
      </span>
    </template>
  </el-dialog>
  <!-- 修改对话框 -->

  <!-- 添加 -->
  <el-dialog v-model="dialogAddVisible" title="添加" draggable>
    <el-form :model="add$!{tool.firstUpperCase($tableInfo.name)}"> 
    #foreach($column in $tableInfo.fullColumn) 
      <el-form-item label="${column.comment}" >
        <el-input v-model="add$!{tool.firstUpperCase($tableInfo.name)}.$!{column.name}" autocomplete="off" />
      </el-form-item> 
    #end
      
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogAddVisible = false">取消</el-button>
        <el-button type="primary" @click="add$!{tool.firstUpperCase($tableInfo.name)}s()">
          确定
        </el-button>
      </span>
    </template>
  </el-dialog>
  <!-- 添加 -->




  <!-- 删除提示框 --> 
  <el-dialog
    v-model="delDialogVisible"
    title="提示"
    width="30%" 
    align-center
    draggable
  >
    <span> 是否真的执行删除操作?</span>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="delDialogVisible = false">取消</el-button>
        <el-button type="primary" @click="del$!{tool.firstUpperCase($tableInfo.name)}ById()">
          确认
        </el-button>
      </span>
    </template>
  </el-dialog>

  <!-- 删除提示框 -->
  <!-- 批量删除提示框 --> 
  <el-dialog
    v-model="dialogMultipleDelVisible"
    title="提示"
    width="30%" 
    align-center
    draggable
  >
    <span> 是否真的执行删除操作?</span>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogMultipleDelVisible = false">取消</el-button>
        <el-button type="primary" @click="del$!{tool.firstUpperCase($tableInfo.name)}ByIds()">
          确认
        </el-button>
      </span>
    </template>
  </el-dialog> 
  <!-- 批量删除提示框 -->
 </div> 
</div> 
<script>   
let app = Vue.createApp({ 
        
        data() {
            return { 
                //多选
                 multipleSelection:[],
                //显示和隐藏修改对话框
                 dialogFormVisible:false,
                //显示和隐藏添加对话框
                 dialogAddVisible:false,
                //显示和隐藏删除对话框
                 delDialogVisible:false,
                //显示和隐藏批量删除对话框
                 dialogMultipleDelVisible:false,
                //表格
                 tableData:[],
                //分页
                currentPage:1,
                pageSize:5,
                small:false,
                background:true, 
                total$!{tool.firstUpperCase($tableInfo.name)}:0,
                edit$!{tool.firstUpperCase($tableInfo.name)}:{},//修改用的变量 
                del$!{tool.firstUpperCase($tableInfo.name)}:{},
                add$!{tool.firstUpperCase($tableInfo.name)}:{},//添加用的变量 
                search:''//查询
            }
          }, 
          mounted() { 
              this.init()
          },
          methods: {
              getAll() {
                  axios.get("$!{tool.firstLowerCase($tableInfo.name)}/selectAll")
                  .then((response) => {
                      console.log('=============',response.data);  
                      this.total$!{tool.firstUpperCase($tableInfo.name)}  = response.data.data.length;
                 });
              },
              init() {
                  //分页查询所有
                 const data = {
                    $!{tool.firstLowerCase($tableInfo.name)}: {
                      #foreach($column in $tableInfo.fullColumn) 
                      $!{column.name}: this.search,
                      #end 
                    },
                    start: this.currentPage,
                    limit: this.pageSize
                  }
                    if(this.search == ''){
                        this.getAll();
                        axios.post("$!{tool.firstLowerCase($tableInfo.name)}/selectList", data)
                        .then((response) => { 
                          this.tableData = response.data.data; 
                        })
                        .catch((error) => {
                          console.error(error);
                        });
                    }else{
                        axios.post("$!{tool.firstLowerCase($tableInfo.name)}/selectList", data)
                        .then((response) => { 
                          this.tableData = response.data.data; 
                          this.total$!{tool.firstUpperCase($tableInfo.name)}  = response.data.data.length;
                        })
                        .catch((error) => {
                          console.error(error);
                        });
                    }
                      
              },
                //添加信息
                add$!{tool.firstUpperCase($tableInfo.name)}s() {
                  let $!{tool.firstUpperCase($tableInfo.name)} = this.add$!{tool.firstUpperCase($tableInfo.name)}
                  axios.post("$!{tool.firstLowerCase($tableInfo.name)}/insert", $!{tool.firstUpperCase($tableInfo.name)})
                    .then((res) => {
                      console.log(res.data);
                      if (res.data.message == '新增成功') {
                        this.dialogAddVisible = false
                        layer.msg('添加成功', {
                            time: 2000, //20s后自动关闭 
                        }); 
                        this.init();
                      } else {
                        layer.msg('添加失败', {
                            time: 2000, //20s后自动关闭 
                        }); 
                        //ElMessage.error('添加失败.')
                        this.init();
                      }
                    })
                    .catch((error) => {
                        layer.msg('添加失败,身份证不能重复添加', {
                            time: 2000, //20s后自动关闭 
                        }); 
                    });
                },
                //修改按钮
                 handleEdit(index, row) { 
                  console.log(index, row)
                  this.edit$!{tool.firstUpperCase($tableInfo.name)} = row
                  this.dialogFormVisible  = true
                },
                //修改信息
                 edit$!{tool.firstUpperCase($tableInfo.name)}ById(){
                  let $!{tool.firstUpperCase($tableInfo.name)} =  this.edit$!{tool.firstUpperCase($tableInfo.name)} 
                  axios.put("$!{tool.firstLowerCase($tableInfo.name)}/update", $!{tool.firstUpperCase($tableInfo.name)})
                    .then((res) => {
                      if (res.data.message == '修改成功') {
                          this.dialogFormVisible = false
                          layer.msg('修改成功', {
                                time: 2000, //20s后自动关闭 
                            });  
                          this.init();
                      } else {
                          layer.msg('修改失败', {
                                time: 2000, //20s后自动关闭 
                            });   
                        this.init();
                      }
                    })
                    .catch((error) => {
                        layer.msg('修改失败,身份证不能重复', {
                            time: 2000, //20s后自动关闭 
                        }); 
                    });
                },
                //删除按钮
                  handleDelete(index, row)  {
                  this.del$!{tool.firstUpperCase($tableInfo.name)}  = row
                  this.delDialogVisible  = true
                },
 
                //删除操作
                 del$!{tool.firstUpperCase($tableInfo.name)}ById(){
                  let id = this.del$!{tool.firstUpperCase($tableInfo.name)}.$!pk.name
                  console.error("=====", id);
                  axios.delete("$!{tool.firstLowerCase($tableInfo.name)}/delete?$!pk.name=" + id)
                    .then((res) => {
                      console.log(res.data);
                      if (res.data.message == '删除成功') {
                        this.delDialogVisible = false
                        layer.msg('删除成功', {
                            time: 2000, //20s后自动关闭 
                        }); 
                        this.init();
                      } else {
                          layer.msg('删除失败', {
                                time: 2000, //20s后自动关闭 
                            }); 
                        this.init();
                      }
                    })
                    .catch((error) => {
                        layer.msg('删除失败', {
                            time: 2000, //20s后自动关闭 
                        }); 
                    });
                },
              //分页
                handleSizeChange(val){
                this.pageSize = val
                this.init();
              },
                handleCurrentChange(val) {
                this.currentPage = val
                this.init();
              }
          }
        
     }).use(ElementPlus).mount("#app") 
</script>  
</body>
</html>




Response.java

package com.xx.config;

import org.springframework.stereotype.Component;

/**
 * 对外统一的出口进行封装
 *
 * @author rambler
 * @since 2019-09-13 23:23
 */
@Component
public class Response<T> {

    private static ResponseCode responseCode;
    /* 提示消息 */
    private String message;
    /* 具体返回的数据 */
    private T data;
    /* 状态码 */
    private Integer code;

    private Response(Integer code, String message, T data) {
        this.message = message;
        this.code = code;
        this.data = data;
    }

    private Response(Integer code, String msg) {
        this.message = msg;
        this.code = code;
    }



    /**
     * 返回成功Response对象
     *
     * @param successMessage 成功提示信息
     * @param data           需要返回的数据
     * @return 成功信息
     */
    public static <T> Response<T> createSuccessResponse(String successMessage, T data) {
        return new Response<>(ResponseCode.CODE_SUCCESS, successMessage, data);
    }


    /**
     * 返回错误Response对象
     *
     * @param errorMessage 错误信息
     * @return 错误信息
     */
    public static <T> Response<T> createErrorResponse(String errorMessage) {
        return new Response<>(ResponseCode.CODE_ERROR, errorMessage);
    }

    public Response() {
    }

    /**
     * 返回未登录状态码
     *
     * @param message 提示信息
     * @return Response
     */
    public static <T> Response<T> createUnLoginResponse(String message) {
        return new Response<>(ResponseCode.CODE_NO_LOGIN, message);
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

}






ResponseCode.java
package com.xx.config;


public class ResponseCode  {

      static final int CODE_SUCCESS = 200;

      static final int CODE_FAIL = 500;

      static final int CODE_ERROR = 500;

      static final int CODE_NO_LOGIN = 300;


}




pom.xml
 <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!-- 添加的依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.5.3.1</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.mybatis.spring.boot</groupId>-->
<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--            <version>3.0.0</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.61</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- servlet 依赖. 想在springboot中使用容器对象,必须引入此依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容