springBoot小案例(登陆,增删改查)
目录主要功能:实现登陆拦截,然后进入主页面进行增删改查工作,开启Druid数据源,进行durid日志监控页面展示:代码编写:目录结构:导入依赖:配置application.yml配置登陆拦截器以及开启durid监控配置开启拦截功能: 创建MyMvConfig类编写登陆拦截:创建LoginHandlerInterceptor类配置开启durid数据源...
目录
主要功能:实现登陆拦截,然后进入主页面进行增删改查工作,开启Druid数据源,进行durid日志监控
编写登陆拦截:创建LoginHandlerInterceptor类
配置开启durid数据源监控功能:创建DruidConfig类
创建Message类: (使用了lombok插件,没有需要安装该插件或者手动生成getter和setter)
开启服务,浏览器访问:http://localhost:8080/
主要功能:实现登陆拦截,然后进入主页面进行增删改查工作,开启Druid数据源,进行durid日志监控
代码下载:https://download.csdn.net/download/qq_44716544/19697167
或者看下边教程代码(已全部贴出)
页面展示:
进入duird监控页面
代码编写:
目录结构:
导入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
<!--引入mybatis,这是mybatis官方提供的适配Spring Boot 的,而不是SpringBoot自己的-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--ThemeLeaf,我们都是3.x开发-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--devtools热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
</dependencies>
配置application.yml
spring:
datasource:
username: root
password: 123
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
#springBoot数据库驱动默认为mysql8.0版本,使用8.0以下版本的数据库需要在pom.xml手动更改数据库驱动版本
#切换为阿里巴巴druid源
type: com.alibaba.druid.pool.DruidDataSource
# 自定义数据源
#Spring Boot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#关闭thymeleaf的缓存
thymeleaf:
cache: false #关闭缓存
devtools:
restart:
enabled: true #设置开启热部署
additional-paths: src/main/java #重启目录
exclude: WEB-INF/**
freemarker:
cache: false #页面不加载缓存,修改即时生效
#yml整合mybatis
mybatis:
type-aliases-package : com.chen.springbootcruddemo
mapperLocations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启mybatis日志控制台SQL打印
配置登陆拦截器以及开启durid监控
配置开启拦截功能: 创建MyMvConfig类
package com.chen.springbootcruddemo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// registry.addViewController("/").setViewName("login");
registry.addViewController("/login.html").setViewName("login");
// registry.addViewController("/main.html").setViewName("dashboard");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).
//进行拦截资源 addPathPatterns("/**").excludePathPatterns("/login.html","/","/login","/css/**","/js/**","/img/**");
}
}
编写登陆拦截:创建LoginHandlerInterceptor类
package com.chen.springbootcruddemo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登陆成功之后,应该有用户的session
Object loginUser= request.getSession().getAttribute("loginUser");
if(loginUser==null){
System.out.println("=================");
request.setAttribute("msg","没有权限,请先登录");
request.getRequestDispatcher("/login.html").forward(request,response);
return false;
}
else {
return true;
}
}
}
配置开启durid数据源监控功能:创建DruidConfig类
开启后:在浏览器打开查看监控:http://localhost:8080/druid/index.html
登陆 :admin 密码:123456
package com.chen.springbootcruddemo.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控:web.xml,ServletRegistrationBean
//因为SpringBoot 内置了servlet容器,所以没有web.xml,替代方法
//访问:http://localhost:8080/druid
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean= new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
//后台需要有人登录,账号密码配置
HashMap<Object,Object> initParameters=new HashMap<>();
initParameters.put("loginUsername","admin");//登录key 是固定的loginUserUsername loginPassword
initParameters.put("loginPassword","123456");
//允许谁可以访问
initParameters.put("allow","");
//禁止谁能访问 initParameters.put("allow","121.0.0.1");
bean.setInitParameters(initParameters);//设置初始化参数
return bean;
}
// //filter
// @Bean
// public FilterRegistrationBean webStatFilter(){
//
// FilterRegistrationBean bean=new FilterRegistrationBean();
//
// bean.setFilter(new WebStatFilter());
// //可以过滤哪些请求呢?
// Map<String,String> initParameters=new HashMap<>();
//
// //这些东西不进行统计
// initParameters.put("exclusions","*.js,*.css,/druid/*");
//
// bean.setInitParameters(initParameters);
//
// return bean;
// }
}
编写实体类:
创建Message类: (使用了lombok插件,没有需要安装该插件或者手动生成getter和setter)
package com.chen.springbootcruddemo.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {
private int id;
private String content;
private String title;
}
创建 User类
package com.chen.springbootcruddemo.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
编写mapper类
创建MesageMapper类
package com.chen.springbootcruddemo.mapper;
import com.chen.springbootcruddemo.pojo.Message;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface MessageMapper {
List<Message> queryMessage();
int addMessage(Message message);
int deleteMessage(String id);
Message queryMessageById(String id);
int updateMessage(Message message);
List<Message> queryByMessage(String content);
}
创建UserMapper类
package com.chen.springbootcruddemo.mapper;
import com.chen.springbootcruddemo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface UserMapper {
User login(String name);
}
编写mapper映射文件
创建MessageMapper.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.chen.springbootcruddemo.mapper.MessageMapper">
<!--id为方法名,resultType为结果返回类型-->
<select id="queryMessage" resultType="Message">
select * from mybatis.show ;
</select>
<!--插入语句,对象中的属性,可以直接取出来-->
<insert id="addMessage" parameterType="Message" >
insert into mybatis.show (title,content) values (#{title},#{content});
</insert>
<!--删除用户-->
<delete id="deleteMessage" parameterType="string">
delete from mybatis.show where id=#{id};
</delete>
<!--id为方法名,resultType为结果返回类型-->
<select id="queryMessageById" parameterType="string" resultType="Message">
select * from mybatis.show where id=#{id};
</select>
<!--更改用户语句-->
<update id="updateMessage" parameterType="Message" >
update mybatis.show set title =#{title},content=#{content} where id=#{id};
</update>
<!--查询信息-->
<select id="queryByMessage" parameterType="string" resultType="Message">
select * from mybatis.show where content like concat("%",#{content},"%") or title like concat("%",#{content},"%")
</select>
</mapper>
创建UserMapper.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.chen.springbootcruddemo.mapper.UserMapper">
<!--select查询语句-->
<!--id为方法名,resultType为结果返回类型-->
<select id="login" parameterType="string" resultType="User">
select * from mybatis.user where name=#{name};
</select>
</mapper>
编写实现类:
创建MessageService接口
package com.chen.springbootcruddemo.service;
import com.chen.springbootcruddemo.pojo.Message;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Service;
import java.util.List;
public interface MessageService {
List<Message> queryMessage();
int addMessage(Message message);
int deleteMessage(String id);
Message queryMessageById(String id);
int updateMessage(Message message);
List<Message> queryByMessage(String content);
}
创建MessageServiceImpl类
package com.chen.springbootcruddemo.service;
import com.chen.springbootcruddemo.mapper.MessageMapper;
import com.chen.springbootcruddemo.pojo.Message;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class MessageServiceImpl implements MessageService{
@Resource
MessageMapper messageMapper;
@Override
public List<Message> queryMessage() {
return messageMapper.queryMessage();
}
@Override
public int addMessage(Message message) {
return messageMapper.addMessage(message);
}
@Override
public int deleteMessage(String id) {
return messageMapper.deleteMessage(id);
}
@Override
public Message queryMessageById(String id) {
return messageMapper.queryMessageById(id);
}
@Override
public int updateMessage(Message message) {
return messageMapper.updateMessage(message);
}
@Override
public List<Message> queryByMessage(String content) {
return messageMapper.queryByMessage(content);
}
}
创建 UserService接口
package com.chen.springbootcruddemo.service;
import com.chen.springbootcruddemo.pojo.User;
public interface UserService {
User login(String name);
}
创建UserServiceImpl类
package com.chen.springbootcruddemo.service;
import com.chen.springbootcruddemo.mapper.UserMapper;
import com.chen.springbootcruddemo.pojo.User;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserServiceImpl implements UserService{
@Resource
UserMapper userMapper;
@Override
public User login(String name) {
return userMapper.login(name);
}
}
编写控制类
创建UserController类
package com.chen.springbootcruddemo.controller;
import com.chen.springbootcruddemo.pojo.Message;
import com.chen.springbootcruddemo.pojo.User;
import com.chen.springbootcruddemo.service.MessageService;
import com.chen.springbootcruddemo.service.MessageServiceImpl;
import com.chen.springbootcruddemo.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.swing.text.Style;
import java.util.List;
@Controller
public class UserController {
@Resource
UserServiceImpl userService;
@Resource
MessageServiceImpl messageService;
/*
*
*
* 登陆
*
* */
@RequestMapping("/login")
//@ResponseBody
public String loginCheck(String username,String password,Model model, HttpSession session){
if(username!=null&&password!=null) {
User user = userService.login(username);
if(user!=null) {
if(user.getPwd().equals(password)) {
session.setAttribute("loginUser", username);
List<Message> messages=messageService.queryMessage();
model.addAttribute("messages",messages);
System.out.println("messsage:========"+messages);
return "redirect:/index";
}
else{
model.addAttribute("msg","密码错误");
return "login";
}
}
else{
model.addAttribute("msg","账号错误");
return "login";
}
}
else{
model.addAttribute("msg","账号或密码不能为空");
return "login";
}
}
@RequestMapping("/")
public String login(){
return "login";
}
/*
*
*
* 首页
*
* */
@RequestMapping("/index")
public String index(Model model){
List<Message> messages=messageService.queryMessage();
model.addAttribute("messages",messages);
System.out.println("messsage:========"+messages);
return "/index";
}
/*
*
* 添加页面
*
* */
@RequestMapping("/add")
public String add(){
return "/add";
}
/*
*
*
* 添加信息
*
* */
@RequestMapping("/addmessage")
public String addMessage(Message message){
int n= messageService.addMessage(message);
return "redirect:/index";
}
/*
*
* 删除信息
* */
@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") String id){
int n=messageService.deleteMessage(id);
return "redirect:/index";
}
/*
*
* 更改信息
* */
@RequestMapping("/update/{id}")
public String update(@PathVariable("id") String id,Model model){
Message message=messageService.queryMessageById(id);
model.addAttribute("message",message);
return "update";
}
/*
*
* 更改信息
* */
@RequestMapping("/update")
public String updateMessage(Message message,Model model){
int n=messageService.updateMessage(message);
return "redirect:/index";
}
/*
*
* 搜索信息
* */
@RequestMapping("/search")
public String searchMessage(String content,Model model){
List<Message> messages=messageService.queryByMessage(content);
model.addAttribute("messages",messages);
System.out.println("=========ddd"+messages);
return "index";
}
/*
*
* 搜索信息
* */
@RequestMapping("/quit")
public String quit(HttpSession session){
session.invalidate();
return "login";
}
}
编写前端页面
创建登陆页面:login.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登陆</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<!--如果的值为空则不显示-->
<p style="color:red;padding-left: 30%;padding-top: 50px" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
<form class="form-horizontal" role="form" style="padding-left: 20%;padding-top: 100px;" method="post" th:action="@{/login}">
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">账号</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="firstname"
name="username"
placeholder="请输入账号">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">密码</label>
<div class="col-sm-3">
<input type="password" class="form-control" id="lastname" name="password"
placeholder="请输入密码">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-3">
<button type="submit" class="btn btn-default">登录</button>
</div>
</div>
</form>
</body>
</html>
创建主页面:index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<h1>首页</h1>.
<button type="button" class="btn" style="color: aliceblue"> <a th:href="@{/add}" >新增信息</a>
</button>
<button type="button" class="btn" style="color: aliceblue"> <a th:href="@{/quit}" >退出</a>
</button>
<form class="form-horizontal" role="form" method="post" th:action="@{/search}" style="margin-left: 150px;float: left;">
<div class="form-group">
<div class="col-sm-8">
<input type="text" class="form-control" id="firstname"
name="content"
placeholder="请输入标题或内容">
</div>
<button type="submit" class="btn btn-default" >搜索</button>
</div>
</form>
<table class="table" style="margin-left: 100px">
<thead>
<tr>
<th>id</th>
<th>内容</th>
<th>标题</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr th:each="emp:${messages}">
<td th:text="${emp.getId()}"></td>
<td th:text="${emp.getContent()}"></td>
<td th:text="${emp.getTitle()}"></td>
<td > <a th:href="@{/update/}+${emp.getId()}">更改</a> | <a th:href="@{/delete/}+${emp.getId()}">删除</a></td>
</tr>
</tbody>
</table>
</body>
</html>
创建添加页面:add.hhtml
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<title>添加信息</title>
</head>
<body>
<h1>添加信息</h1>
<form class="form-horizontal" role="form" style="padding-top: 100px;" method="post" th:action="@{/addmessage}" >
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">标题</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="firstname"
name="title"
placeholder="请输入标题">
</div>
<br>
</div>
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">填写内容</label>
<div class="col-sm-3">
<textarea class="form-control" name="content" ></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-3">
<button type="submit" class="btn btn-default">提交</button>
</div>
</div>
</form>
</body>
</html>
创建更新页面:update.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<title>更改信息</title>
</head>
<body>
<h1>更改信息</h1>
<form class="form-horizontal" role="form" style="padding-top: 100px;" method="post" th:action="@{/update}" >
<input type="hidden" name="id" th:value="${message.getId()}">
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">更换标题</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="firstname"
name="title"
th:value="${message.getTitle()}">
</div>
<br>
</div>
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">更改内容</label>
<div class="col-sm-3">
<textarea class="form-control" name="content" th:text="${message.getContent()}" ></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-3">
<button type="submit" class="btn btn-default" >提交</button>
</div>
</div>
</form>
</body>
</html>
哈哈哈,终于到最后了,累呀
创建数据库:mybatis
然后创建数据表
DROP TABLE IF EXISTS `show`;
CREATE TABLE `show` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL,
`title` varchar(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = gbk COLLATE = gbk_chinese_ci ROW_FORMAT = Compact;
INSERT INTO `show` VALUES (1, '测试测试', '测试');
INSERT INTO `show` VALUES (5, '123456', 'www2222222222');
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL,
`pwd` varchar(25) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL,
`perms` varchar(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = gbk COLLATE = gbk_chinese_ci ROW_FORMAT = Compact;
INSERT INTO `user` VALUES (18, 'root', '123456', 'user:update');
INSERT INTO `user` VALUES (19, '123', '123', NULL);
到这里就大公告成了,哈哈哈
开启服务,浏览器访问:http://localhost:8080/
更多推荐
所有评论(0)