// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude(scanner(“表名,多个英文逗号分割”).split(“,”));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(“m_”);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
在控制台输入user(表名)
红框内为自动生成的代码:
个人习惯把application.properties改为application.yml,修改端口为80
server:
port: 80
spring:
datasource:
url: jdbc:mysql://127.0.0.1/data_test?useSSL=false&&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 18044229
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
mvc:
throw-exception-if-no-handler-found: true
web:
resources:
add-mappings: false
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);
}
}
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());
}
}
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 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】
以上就是SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】的全部内容
**看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]**
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
“/delByIds”)
CommonResult delByIds(Integer[] id) {
/*for (Integer integer : id) {
System.out.println(integer);
}*/
return CommonResult.success(userService.removeByIds(Arrays.asList(id)));
}
}
==============================================================
SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】
以上就是SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】的全部内容
**看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]**
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-KAYMuPWs-1714954849408)]
[外链图片转存中…(img-0Xo7q6Yw-1714954849408)]
[外链图片转存中…(img-hvAE63c5-1714954849409)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!