后端部分接口实现

main
YangT-ao 2 years ago
parent 0dd89d35b1
commit 636f64326a

@ -68,6 +68,18 @@
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- knife4j 包含swagger -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<!-- SpringBoot应用打包插件-->

@ -1,8 +1,14 @@
package org.example;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@MapperScan("org.example.mapper")
@SpringBootApplication
@ -10,4 +16,12 @@ public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class,args);
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //分页
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); //防全局修改和删除
return interceptor;
}
}

@ -1,10 +1,35 @@
package org.example.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.ibatis.annotations.Param;
import org.example.mapper.UserMapper;
import org.example.pojo.User;
import org.example.service.UserService;
import org.example.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@Tag(name="用户",description = "用户相关接口")
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
@Operation(summary = "注册", description = "用户注册接口")
@PostMapping("/regist")
public Result regist(@RequestBody User user){
System.out.println(user);
return userService.regist(user);
}
@Operation(summary = "登录", description = "用户登录接口")
@GetMapping("/login")
public Result login(@Parameter(description = "用户名") @Param("username") String username,@Parameter(description = "用户密码") @Param("password") String password){
return userService.login(username, password);
}
}

@ -1,8 +1,28 @@
package org.example.pojo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title = "用户相关信息")
public class User {
@Schema(title = "用户id不需要传")
private Integer id;
@Schema(title = "用户名,必需")
private String username;
@Schema(title = "用户昵称,必需")
private String name;
@Schema(title = "用户密码,必需")
private String password;
@Schema(title = "用户工作单位,非必须")
@TableField("workUnit")
private String workUnit;
@Schema(title = "用户邮箱,非必须")
private String email;
@Schema(title = "用户电话,非必须")
private String phone;
@Schema(title = "用户头像url非必须")
private String avatar;
}

@ -1,4 +1,9 @@
package org.example.service;
import org.example.pojo.User;
import org.example.utils.Result;
public interface UserService {
public Result regist(User user);
public Result login(String username, String password);
}

@ -1,7 +1,43 @@
package org.example.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.example.mapper.UserMapper;
import org.example.pojo.User;
import org.example.service.UserService;
import org.example.utils.MD5Util;
import org.example.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl {
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
public Result regist(User user){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",user.getUsername());
boolean isExist = userMapper.exists(queryWrapper);
if(isExist){
return Result.error("-1","用户名已被使用");
}
user.setPassword(MD5Util.encrypt(user.getPassword()));
Integer rows = userMapper.insert(user);
if(rows>0){
return Result.success();
}
return Result.error("-1","failure");
}
@Override
public Result login(String username, String password) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",username).eq("password",MD5Util.encrypt(password));
User user = userMapper.selectOne(queryWrapper);
user.setPassword(null);
if(user != null){
return Result.success(user);
}
return Result.error("-1","账号或者密码错误");
}
}

@ -0,0 +1,32 @@
package org.example.utils;
import org.springframework.stereotype.Component;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@Component
public final class MD5Util {
public static String encrypt(String strSrc) {
try {
char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
byte[] bytes = strSrc.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(bytes);
bytes = md.digest();
int j = bytes.length;
char[] chars = new char[j * 2];
int k = 0;
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
chars[k++] = hexChars[b >>> 4 & 0xf];
chars[k++] = hexChars[b & 0xf];
}
return new String(chars);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException("MD5加密出错+" + e);
}
}
}

@ -0,0 +1,66 @@
package org.example.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "响应结果实体", description = "响应结果实体")
public class Result<T> {
@ApiModelProperty(value = "响应提示码")
private String code;
@ApiModelProperty(value = "提示信息")
private String msg;
@ApiModelProperty(value = "响应数据")
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Result() {
}
public Result(T data) {
this.data = data;
}
public static Result success() {
Result result = new Result<>();
result.setCode("0");
result.setMsg("成功");
return result;
}
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>(data);
result.setCode("0");
result.setMsg("成功");
return result;
}
public static Result error(String code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
}

@ -6,7 +6,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://localhost:3306/studb
url: jdbc:mysql://localhost:3306/digital_culture_heritage
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver

@ -0,0 +1,67 @@
<template>
<div style="width: 100%;">
<el-card class="box-card1">
<div v-for="o in 4" :key="o" class="text item">
<el-card class="box-card2">
<div style="float:left;width:20%">
<img src="../assets/logo.png" style="height:200px;width: 200px;"/>
</div>
<div style="width: 78%;float: right;">
<h2 style="margin-bottom: 10px;">湖南非遗论坛</h2>
<div>
<span style="float:left;font-size: larger;margin-bottom: 10px;">2023.10.19</span>
</div>
<div>
<span style="float:left;font-size: large;text-align: left;margin-bottom: 15px;">2023年10月12日广受瞩目的第八届中国成都国际非物质文化遗产节开幕其中的重要板块非遗成都论坛以保护非物质文化遗产公约20周年非物质文化遗产保护实践回顾与探索为主题邀请国内外非遗领域的知名专家学者多侧面多角度展开学术探讨并分享国际社会在文...
</span>
</div>
<div>
<a style="float:left;font-size: larger;text-decoration: none;" href="http://www.baidu.com">查看讨论</a>
</div>
</div>
</el-card>
</div>
<el-pagination
background
layout="prev, pager, next"
:total="1000">
</el-pagination>
</el-card>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
},
data() {
return {
input: ''
}
}
}
</script>
<style scoped>
.text {
font-size: 14px;
}
.item {
padding: 18px 0;
}
.box-card1 {
margin: auto;
width: 90%;
}
.box-card2{
width: 95%;
margin: auto;
}
</style>
Loading…
Cancel
Save