简介:
emmm一个非常不正经的教程,暂时只是记录开发的步骤,具体原理需要留到下次。
资源:
前后端所有的资源
链接:https://pan.baidu.com/s/1_NRE678mgRl7p6UNd_6Xvg
提取码:1g8k
后端:
Maven开源项目框架
链接:https://pan.baidu.com/s/1-8cRTpmVQHLirZwuNG9L6Q
提取码:se9k
idea编译器及破解工具
注意:该破解工具只对我提供的idea版本有效
链接:https://pan.baidu.com/s/1HbdKnCkZgKYOlB5uZerFyA
提取码:6u5s
Navicat Premium 15
软件安装包及破解工具
链接:https://pan.baidu.com/s/1bwOGRVOyt8K5tlwyPZh1tA
提取码:bsky
对应的破解教程
Navicat_Premium_v15 激活_哔哩哔哩_bilibili
默认大家已配置好jdk8(jdk1.8),并将其添加到了PATH中。
完成上述操作之后,我们就创建好了一个基本的后台项目。
接下来完成数据库以及一个用户注册业务
数据库部分
在Navicat中,新建一个MySQL连接
在example连接中新建一个数据库demo
在demo数据库中,新建一个user表
IDEA部分
初始配置
并按照下面的截图新建好package和directory以及yml
pojo包下的User类
在pojo包中新建一个User类,并完成一些所需的数据库映射对象所需的代码配置
接着空一行,按下ALT+INS,选择Constructor
之间选择Select None 构造一个无参的方法
考虑到用户注册时需要email,password和nickname
我们按照同样的方法,构建一个只含email,password和nickname的方法
同样的,用户登录时需要email和password,那么我们构建一个只含email和password的方法
最后,我们还需要构建一个含全参的方法
仍然是快捷建ALT+INS,这次我们选择Getter and Setter
全选
最后我们同样快捷建ALT+INS,选择toString(),
全选并点击ok即可完成pojo中User类的一个简单的配置
pojo下User类的全部代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| package com.example.demo.pojo;
import org.apache.ibatis.type.Alias;
@Alias("user")
public class User {
private Integer id; private String email; private String password; private String nickname;
public User() { }
public User(String email, String password, String nickname) { this.email = email; this.password = password; this.nickname = nickname; }
public User(String email, String password) { this.email = email; this.password = password; }
public User(Integer id, String email, String password, String nickname) { this.id = id; this.email = email; this.password = password; this.nickname = nickname; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getNickname() { return nickname; }
public void setNickname(String nickname) { this.nickname = nickname; }
@Override public String toString() { return "User{" + "id=" + id + ", email='" + email + '\'' + ", password='" + password + '\'' + ", nickname='" + nickname + '\'' + '}'; } }
|
application.yml
进行数据库与idea的连接,以及配置mybatis(MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。)
application.yml代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 配置java与数据库的连接 spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/demo # 这里我连的是数据库demo,只要将demo改为自己的数据库名字即可 driver-class-name: com.mysql.cj.jdbc.Driver server: port: 18081 # 端口号 ,可以自己设置一个,如果运行是发现端口号冲突,重新换一个就行
# 配置sql代码 mybatis: type-aliases-package: com.example.demo.pojo # pojo的路径 mapper-locations: classpath:mapper/*Mapper.xml # mapper文件地址 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # SQL语句输出日志
|
config包下WebMvcConfig类
在config包下新建一个WebMvcConfig类,并写入以下代码来设置跨域,以便前后端在url上的统一
WebMvcConfig类代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package com.example.demo.config;
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration public class WebMvcConfig implements WebMvcConfigurer {
@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowCredentials(true) .allowedMethods("*") .maxAge(3600); } }
|
util包下ResponseData类
在util包下新建一个ResponseData类,在后端连接前端时,发出一些成功或者错误的响应
ResponseData类代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| package com.example.demo.util;
public class ResponseData<T> { private boolean success; private Integer code; private String message; private T data;
public ResponseData(){ }
public ResponseData(boolean success, Integer code, String message) { this.success = success; this.code = code; this.message = message; }
public ResponseData(boolean success, Integer code, String message, T data) { this.success = success; this.code = code; this.message = message; this.data = data; }
public boolean isSuccess() { return success; }
public void setSuccess(boolean success) { this.success = success; }
public Integer getCode() { return code; }
public void setCode(Integer code) { this.code = code; }
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; }
@Override public String toString() { return "ResponseData{" + "success=" + success + ", code=" + code + ", message='" + message + '\'' + ", data=" + data + '}'; } }
|
dao包下IUserDao接口
在dao包下新建一个IUserDao接口,该接口直接与SQL语句代码块相连,里面的代码用来调用不同的SQL语句
IUserDao接口代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| package com.example.demo.dao;
import com.example.demo.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository;
@Mapper @Repository
public interface IUserDao {
int addOneUser(User user); }
|
mapper文件夹下UserMapper.xml
在mapper文件夹下,新建一个UserMapper.xml用来写SQL语句
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.example.demo.dao.IUserDao">
<insert id="addOneUser" parameterType="user"> INSERT INTO `user`(`email`,`password`,`nickname`) VALUES (#{email},#{password},#{nickname}) </insert>
</mapper>
|
service包下IUserService接口
在service包中新建一个IUserService接口
IUserService接口代码
| package com.example.demo.service;
import com.example.demo.pojo.User;
public interface IUserService {
boolean userRegister(User user) throws Exception; }
|
service包下impl文件夹下UserServiceImpl类
在service包中新建一个impl文件夹,再在该文件夹下创建一个UserServiceImpl类
UserServiceImpl类代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package com.example.demo.service.impl;
import com.example.demo.dao.IUserDao; import com.example.demo.pojo.User; import com.example.demo.service.IUserService; import com.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;
@Service public class UserServiceImpl implements IUserService {
@Autowired private IUserDao userDao;
@Override @Transactional(rollbackFor = {Exception.class}) public boolean userRegister(User user) throws Exception {
int count = 0; try { count = userDao.addOneUser(user); } catch (Exception e) { e.printStackTrace(); throw new Exception("该账户已被使用"); } if(count != 1){ throw new Exception("新增失败"); }
return true; } }
|
controller包下UserControll类
在控制层controller包下创建一个UserControll类,该类直接与前端相连
UserControll类代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package com.example.demo.controller;
import com.example.demo.pojo.User; import com.example.demo.service.IUserService; import com.example.demo.util.ResponseData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.*;
@CrossOrigin @RequestMapping("/user") @RestController public class UserController {
@Autowired private IUserService userService;
@PostMapping("/register") public ResponseData register(User user){ user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes())); try { userService.userRegister(user); return new ResponseData(true,2000,"注册成功"); } catch (Exception e){ e.printStackTrace(); return new ResponseData(false,1000,e.getMessage()); } } }
|
测试
按照下图运行成功,并未暂停报错,则至少数据库是配置好了,真正测试前端操作究竟能不能通过ajax修改后端数据库,我们将留到下一篇“java的前后端连接”来测试