springBoot小案例(登陆,增删改查)
Posted 冷血~多好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springBoot小案例(登陆,增删改查)相关的知识,希望对你有一定的参考价值。
目录
主要功能:实现登陆拦截,然后进入主页面进行增删改查工作,开启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/
以上是关于springBoot小案例(登陆,增删改查)的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot+Vue-admin-template 实现增删改查
SpringBoot-06:SpringBoot增删改查一套完整的考试案例
Android的SQLiteDataBase小项目,实现user类登陆注册以及student类增删改查