SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码

mvc:

throw-exception-if-no-handler-found: true

web:

resources:

add-mappings: false

6、在启动类上添加@MapperScan


SpringbootServerApplication:

package com.keafmd;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@MapperScan(“com.keafmd.mapper”)

public class SpringbootServerApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootServerApplication.class, args);

}

}

7、编写测试代码测试数据库是否连接正确


1、在 UserMapper代码页大括号内,按下Alt+Insert,选择Test

在这里插入图片描述

2、Ok

在这里插入图片描述

3、自动生成了测试类

在这里插入图片描述

4、编写测试代码

UserMapperTest :

package com.keafmd.mapper;

import com.keafmd.SpringbootServerApplication;

import com.keafmd.entity.User;

import com.keafmd.service.UserService;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest(classes = SpringbootServerApplication.class)

class UserMapperTest {

@Resource

UserService userService;

@Test

public void test1(){

List userList = userService.list();

for (User user : userList) {

System.out.println(user);

}

}

}

5、测试结果

在这里插入图片描述

至此,后端和数据库连接没问题。

8、编写后端的工具类代码(封装结果集、日期处理、解决跨域请求)


在这里插入图片描述

1、CommonResult

package com.keafmd.common;

import lombok.Getter;

/**

  • Keafmd

  • @ClassName: CommonResult

  • @Description: 封装结果集

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Getter

public class CommonResult {

private Integer code;

private String message;

private Object obj;

private CommonResult(Integer code, String message, Object obj) {

this.code = code;

this.message = message;

this.obj = obj;

}

public static CommonResult nohandler() {

return new CommonResult(ResultCode.NOHANDLER.getCode(), ResultCode.NOHANDLER.getMessage(),null);

}

public static CommonResult success(Object data) {

return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(),data);

}

public static CommonResult failed() {

return new CommonResult(ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage(),null);

}

public static CommonResult failed(String message) {

return new CommonResult(ResultCode.FAILED.getCode(),message,null);

}

public static CommonResult notoken() {

return new CommonResult(ResultCode.NOTOKEN.getCode(), ResultCode.NOTOKEN.getMessage(),null);

}

public static CommonResult nopremiss() {

return new CommonResult(ResultCode.NOPERMISS.getCode(), ResultCode.NOPERMISS.getMessage(),null);

}

}

2、DateConverter

package com.keafmd.common;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.regex.Pattern;

/**

  • Keafmd

  • @ClassName: DateConverter

  • @Description: 日期处理

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Configuration

public class DateConverter implements Converter<String, Date> {

public DateConverter() {

// System.out.println(“初始化…”);

}

static List sdfs = new ArrayList();

static {

sdfs.add(new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”));

sdfs.add(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”));

sdfs.add(new SimpleDateFormat(“yyyy-MM-dd”));

sdfs.add(new SimpleDateFormat(“yyyy/MM/dd”));

}

@Override

public Date convert(String s) {

SimpleDateFormat sdf = null;

if (Pattern.matches(“^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$”, s)) {

sdf = sdfs.get(1);

}

else if (Pattern.matches(“^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}$”, s)){

sdf = sdfs.get(0);

}

else if (Pattern.matches(“^\d{4}/\d{2}/\d{2}$”, s)){

sdf = sdfs.get(3);

}

else if (Pattern.matches(“^\d{4}-\d{2}/-\d{2}}$”, s)){

sdf = sdfs.get(2);

}

Date date = null;

try {

date = sdf.parse(s);

} catch (ParseException e) {

e.printStackTrace();

}

return date;

}

}

3、LocalDateTimeConverter

package com.keafmd.common;

import org.springframework.core.convert.converter.Converter;

import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

/**

  • Keafmd

  • @ClassName: LocalDateTimeConverter

  • @Description: 日期处理

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Component

public class LocalDateTimeConverter implements Converter<String, LocalDateTime> {

//2021-04-29%2001:02:03

@Override

public LocalDateTime convert(String s) {

return LocalDateTime.parse(s, DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”));

}

}

4、ResultCode

package com.keafmd.common;

import lombok.Getter;

/**

  • Keafmd

  • @ClassName: ResultCode

  • @Description: 结果代码

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Getter

public enum ResultCode {

NOHANDLER(404,“请求地址错误”),

SUCCESS(200,“操作成功”),

FAILED(500,“操作失败”),

NOTOKEN(401,“未登录或登录已超时”),

NOPERMISS(403,“无操作权限”),

;

private Integer code;

private String message;

ResultCode(Integer code, String message) {

this.code = code;

this.message = message;

}

}

5、AppConfig

package com.keafmd.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.MySqlDialect;

import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;

import com.fasterxml.jackson.annotation.JsonInclude;

import com.fasterxml.jackson.databind.DeserializationFeature;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.SerializationFeature;

import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;

import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;

import com.keafmd.common.DateConverter;

import com.keafmd.common.LocalDateTimeConverter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.format.FormatterRegistry;

import org.springframework.http.converter.HttpMessageConverter;

import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;

import org.springframework.web.cors.CorsConfiguration;

import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

import org.springframework.web.filter.CorsFilter;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

import java.util.List;

/**

  • Keafmd

  • @ClassName: AppConfig

  • @Description: 解决跨域请求

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Configuration

public class AppConfig extends WebMvcConfigurationSupport {

/**

  • 分页插件

  • @return

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

paginationInterceptor.setDialect(new MySqlDialect());

paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));

return paginationInterceptor;

}

@Bean

FilterRegistrationBean cors(){

FilterRegistrationBean registrationBean = new FilterRegistrationBean();

CorsConfiguration config = new CorsConfiguration();

config.setAllowCredentials(true);

config.addAllowedOrigin(“http://127.0.0.1:81”);

config.addAllowedHeader(“*”);

config.addAllowedMethod(“*”);

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

source.registerCorsConfiguration(“/**”, config);

CorsFilter filter = new CorsFilter(source);

registrationBean.setFilter(filter);

registrationBean.addUrlPatterns(“/*”);

return registrationBean;

}

/**

  • curl http://127.0.0.1/user/getById?id=31

  • @param converters

*/

@Override

protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

ObjectMapper objectMapper = new ObjectMapper();

objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);

// objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //忽略 null 字段

JavaTimeModule javaTimeModule = new JavaTimeModule();

javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”)));

javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(“yyyy-MM-dd”)));

// javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”)));

// javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(“yyyy-MM-dd”)));

objectMapper.registerModule(javaTimeModule);

converters.add(new MappingJackson2HttpMessageConverter(objectMapper));

}

@Override

protected void addFormatters(FormatterRegistry registry) {

super.addFormatters(registry);

registry.addConverter(new DateConverter());

registry.addConverter(new LocalDateTimeConverter());

}

}

6、DefaultExceptionHandler

package com.keafmd.config;

import com.keafmd.common.CommonResult;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.RestControllerAdvice;

import org.springframework.web.servlet.NoHandlerFoundException;

import javax.servlet.http.HttpServletRequest;

/**

  • Keafmd

  • @ClassName: DefaultExceptionHandler

  • @Description:

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-29 18:11

  • @Blog: https://keafmd.blog.csdn.net/

*/

@RestControllerAdvice

public class DefaultExceptionHandler {

@ExceptionHandler

public CommonResult exceptionHandler(HttpServletRequest request, Exception ex) {

ex.printStackTrace();

if(ex instanceof NoHandlerFoundException) {

return CommonResult.nohandler();

}

return CommonResult.failed(ex.getMessage());

}

}

9、编写后端的增删改查代码


1、在UserService接口中编写分页查询代码

package com.keafmd.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.keafmd.entity.User;

import com.baomidou.mybatisplus.extension.service.IService;

/**

  • 服务类

  • @author 关注公众号:牛哄哄的柯南

  • @since 2021-04-29

*/

public interface UserService extends IService {

Page pageList(Page page, User user);

}

2、在UserServiceImpl实现类中实现分页查询和模糊查找

package com.keafmd.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.keafmd.entity.User;

import com.keafmd.mapper.UserMapper;

import com.keafmd.service.UserService;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import org.springframework.stereotype.Service;

/**

  • 服务实现类

  • @author 关注公众号:牛哄哄的柯南

  • @since 2021-04-29

*/

@Service

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

@Override

public Page pageList(Page page, User user) {

if(page == null){

page = new Page();

}

QueryWrapper wrapper = new QueryWrapper();

if(user!=null && StringUtils.isNotEmpty(user.getUserName())){

//根据user_name字段模糊查找

wrapper.like(“user_name”,user.getUserName());

}

return super.page(page,wrapper);

}

}

3、在UserController中编写增删改查代码

package com.keafmd.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.keafmd.common.CommonResult;

import com.keafmd.entity.User;

import com.keafmd.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;

/**

  • 前端控制器

  • @author 关注公众号:牛哄哄的柯南

  • @since 2021-04-29

*/

@RestController

@RequestMapping(“/user”)

public class UserController {

@Autowired

UserService userService;

/**

  • 查找

  • @return

*/

@RequestMapping(“/list”)

CommonResult list(ModelMap modelMap, Page page, @ModelAttribute(“user”) User user) {

page = userService.pageList(page, user);

modelMap.addAttribute(“page”, page);

return CommonResult.success(page);

}

@RequestMapping(“/save”)

CommonResult save(User user){

return CommonResult.success(userService.saveOrUpdate(user));

}

/**

  • 根据id查

  • @param id

  • @return

*/

@RequestMapping(“/getById”)

CommonResult getById(Integer id) {

return CommonResult.success(userService.getById(id));

}

/**

  • 删除,逻辑删除

  • @param id

  • @return

*/

@RequestMapping(“/del”)

CommonResult del(Integer id ) {

User user = userService.getById(id);

user.setUserState(“0”);

return CommonResult.success(userService.updateById(user));

}

/**

  • 批量删除

  • @param id

  • @return

*/

@RequestMapping(“/delByIds”)

CommonResult delByIds(Integer[] id) {

/*for (Integer integer : id) {

System.out.println(integer);

}*/

return CommonResult.success(userService.removeByIds(Arrays.asList(id)));

}

}

前端搭建

==============================================================

由于篇幅有限,前端搭建单独再写一篇


SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值