一. 准备工作
学习过程中的一些记录, 如有问题或者不规范的地方还请大佬指正
- springboot
- mybatis
- thymeleaf
- maven
1. 导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--引入thymeleaf的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. 前端页面
- 相关文件在文章末尾
login.html
登录成功的index.html页面随便写,此处只演示登录功能
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>登录界面</title>
<meta charset="utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" th:href="@{/css/logincss.css}" />
</head>
<body>
<!- 将表单提交到controller中-->
<form name="form1" th:action="@{/login}" method="post">
<h1>用户登录</h1>
<input class=input_1 id=username type=text size=15 name="username" placeholder=用户名><br />
<input class=input_1 id=password type=password size=15 name="password" placeholder=密码><br />
<span class="radio_box">
<input type="radio" id="radio_1" name="gettype" value="users" checked>
<label for="radio_1"></label>
普通用户
</span>
<span class="radio_box">
<input type="radio" id="radio_2" name="gettype" value="admin">
<label for="radio_2"></label>
管理员
</span><br/>
<input class=input_3 type="submit" value="登录" />
<input class=input_3 type="button" onclick=document.form1.reset() value="重置" />
</form><script type="text/javascript" th:src="@{js/login.js}"></script>
</body>
</html>
二. 数据库编写
注: 数据库中字段名要和实体类保持一致
- 数据表如图
- 数据库配置,采用springboot自带的连接池
- 连接池以及mybatis配置如下
spring:
datasource:
username: root
password: "000000"
url: jdbc:mysql://localhost:3306/bloguser?userUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
type-aliases-package: com.zx.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
三. 编写后端代码
- 目录结构
1. 实体类
实体类属性名要和数据库字段名对应
可以使用插件简化配置
- User.java
package com.zx.pojo;
public class User {
private int id;
private String name;
private String password;
// 1为管理员
private int role;
public User() {
}
public User(int id, String name, String password, int role) {
this.id = id;
this.name = name;
this.password = password;
this.role = role;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", role=" + role +
'}';
}
}
2. 持久层代码
-
@Mapper : 表示本类是一个 MyBatis 的 Mapper
-
@Repository可以把一个类组件加入到IOC容器中, 代表此处是持久层,@Repository和@Controller、@Service、@Component的作用差不多, 都是把对象交给spring管理。
-
usermapper
package com.zx.mapper;
import com.zx.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
//@Mapper : 表示本类是一个 MyBatis 的 Mapper
@Mapper
@Repository
public interface UserMapper {
// 获取所有用户信息
List<User> getUsers();
// 通过id获得部门
User getUserById(int id);
// 通过用户名和密码查找用户
User findByNameAndPassword(String name, String password);
}
- 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.zx.mapper.UserMapper">
<!-- <select id="getUsers" resultType="User">-->
<!-- select * from user;-->
<!-- </select>-->
<!-- <select id="getUserById" resultType="User" parameterType="int">-->
<!-- select * from user where id = #{id};-->
<!-- </select>-->
<!-- -->
<!--查询用户是否存在-->
<select id="findByNameAndPassword" parameterType="String" resultType="User">
select * from user where name = #{name} and password = #{password};
</select>
</mapper>
3. service层代码
- @Service注解代表此处是service层, 标注实现类上
- 引入userMapper,使用 @Autowired自动为其转配属性
- Userservice
package com.zx.service;
import com.zx.pojo.User;
import java.util.List;
public interface UserService {
// 获取所有用户信息
List<User> getUsers();
// 通过id获得部门
User getUserById(int id);
// 通过用户名和密码查找用户
User findByNameAndPassword(String name, String password);
}
- 实现类UserviceImpl
package com.zx.service;
import com.zx.mapper.UserMapper;
import com.zx.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService{
@Autowired
UserMapper userMapper;
@Override
public List<User> getUsers() {
return userMapper.getUsers();
}
@Override
public User getUserById(int id) {
return userMapper.getUserById(id);
}
@Override
public User findByNameAndPassword(String name, String password) {
return userMapper.findByNameAndPassword(name, password);
}
}
4. controller层
-
添加@Controller注解代表这个controller层,
-
引入 userService,使用 @Autowired自动为其转配属性
-
@PostMapping(“/login”)注解表明此处只接收post方式的"/login"请求
-
@Controller只是定义了一个控制器类,而使用@RequestMapping(此处@PostMapping)注解的方法才是处理请求的处理器.
-
adminController
package com.zx.controller;
import com.zx.pojo.User;
import com.zx.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class AdminController {
@Autowired
UserService userService;
// 处理用户登录
@PostMapping("/login")
public String login(HttpServletRequest request, Model model){
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userService.findByNameAndPassword(username, password);
// 验证用户是否存在
if (user != null){
return "/qd/index";
}else {
return "login";
}
}
}
5. 启动项目
- 输入用户名admin与密码00000
- 登录成功
四. 后续优化问题, 下一篇博客给出
- 设置必须登录才能访问index页面
- 管理员用户登录之后进入后台页面
- 注册功能实现
- 用户不存在或密码错误时返回登录页面
前端的素材是我网上随便找的,具体是在哪里我也记不清了,需要的自取,如果侵权了请联系我删除
蓝奏云密码:ftqx