国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

SpringBoot+MyBatisPlus+Vue 前后端分離項目快速搭建過(guò)

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:牛哄哄的柯南 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

    數據準備

    data_test.sql:

    /*
    SQLyog Enterprise v12.08 (64 bit)
    MySQL - 5.7.31 : Database - data_test
    *********************************************************************
    */
    
    
    /*!40101 SET NAMES utf8 */;
    
    /*!40101 SET SQL_MODE=''*/;
    
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`data_test` /*!40100 DEFAULT CHARACTER SET utf8  */;
    
    USE `data_test`;
    
    /*Table structure for table `user` */
    
    DROP TABLE IF EXISTS `user`;
    
    CREATE TABLE `user` (
      `user_id` int(11) NOT NULL AUTO_INCREMENT,
      `user_name` varchar(50) CHARACTER SET utf8  NOT NULL COMMENT '賬號',
      `password` varchar(50) CHARACTER SET utf8  NOT NULL COMMENT '密碼',
      `user_state` varchar(10) CHARACTER SET utf8  NOT NULL DEFAULT '1' COMMENT '狀態(tài),邏輯刪除',
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
    
    /*Data for the table `user` */
    
    LOCK TABLES `user` WRITE;
    
    insert  into `user`(`user_id`,`user_name`,`password`,`user_state`) values (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0');
    
    UNLOCK TABLES;
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

    后端搭建

    1、快速創(chuàng )建個(gè)SpringBoot項目

    第一步:Spring Initializr

    第二步:Spring Initializr Project Settings

    第三步:添加個(gè)Lombok工具

    第四步:Finish

    初始化的樣子:

    2、引入依賴(lài)

    此處貼上整個(gè)pom.xml,部分依賴(lài)可能對于簡(jiǎn)單需求而言是多余的,可以自行舍棄。

    pom.xml代碼:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.keafmd</groupId>
        <artifactId>springboot-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot-server</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>20.0</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.2</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.49</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.3.2</version>
                <scope>test</scope>
            </dependency>
    
    
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.31</version>
                <scope>test</scope>
            </dependency>
    
    
            <dependency>
                <groupId>io.github.yedaxia</groupId>
                <artifactId>japidocs</artifactId>
                <version>1.4.3</version>
                <scope>test</scope>
    
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.8.6</version>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.73</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.9.4</version>
            </dependency>
    
    
            <!-- 解密程序 https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk15on</artifactId>
                <version>1.68</version>
            </dependency>
    
            <!--JWT 依賴(lài) -->
            <dependency>
                <groupId>com.auth0</groupId>
                <artifactId>java-jwt</artifactId>
                <version>3.4.0</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

    3、編寫(xiě)代碼快速生成代碼

    因為此代碼為輔助代碼,放在test包下即可,相關(guān)的數據庫信息以及包信息需要和你們自己的保持一致,自行修改,如何包命名和我一致,只需要修改數據庫相關(guān)信息即可。

    CodeGenerator:

    package com.keafmd.mp;
    import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
    import com.baomidou.mybatisplus.core.toolkit.StringPool;
    import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.InjectionConfig;
    import com.baomidou.mybatisplus.generator.config.*;
    import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    /**
     * Keafmd
     *
     * @ClassName: CodeGenerator
     * @Description: 代碼生成器
     * @author: 牛哄哄的柯南
     * @Date: 2021-04-29 17:06
     * @Blog: https://keafmd.blog.csdn.net/
     */
    public class CodeGenerator {
    
        /**
         * <p>
         * 讀取控制臺內容
         * </p>
         */
        public static String scanner(String tip) {
            Scanner scanner = new Scanner(System.in);
            StringBuilder help = new StringBuilder();
            help.append("請輸入" + tip + ":");
            System.out.println(help.toString());
            if (scanner.hasNext()) {
                String ipt = scanner.next();
                if (StringUtils.isNotBlank(ipt)) {
                    return ipt;
                }
            }
            throw new MybatisPlusException("請輸入正確的" + tip + "!");
        }
    
        public static void main(String[] args) {
            // 代碼生成器
            AutoGenerator mpg = new AutoGenerator();
    
            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
    //        System.out.println("projectPath = " + projectPath);
            gc.setOutputDir(projectPath + "/src/main/java");
    //        gc.setOutputDir("D:\\test");
            gc.setAuthor("關(guān)注公眾號:牛哄哄的柯南");
            gc.setOpen(false);
            // gc.setSwagger2(true); 實(shí)體屬性 Swagger2 注解
            gc.setServiceName("%sService");
            mpg.setGlobalConfig(gc);
    
            // 數據源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://127.0.0.1:3306/data_test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
            // dsc.setSchemaName("public");
            dsc.setDriverName("com.mysql.jdbc.Driver");
            dsc.setUsername("root");
            dsc.setPassword("18044229");
            mpg.setDataSource(dsc);
    
            // 包配置
            PackageConfig pc = new PackageConfig();
            pc.setModuleName(null);
            pc.setParent("com.keafmd");
            mpg.setPackageInfo(pc);
    
            // 自定義配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
    
            // 如果模板引擎是 freemarker
            String templatePath = "/templates/mapper.xml.ftl";
            // 如果模板引擎是 velocity
            // String templatePath = "/templates/mapper.xml.vm";
    
            // 自定義輸出配置
            List<FileOutConfig> focList = new ArrayList<>();
            // 自定義配置會(huì )被優(yōu)先輸出
            focList.add(new FileOutConfig(templatePath) {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    // 自定義輸出文件名 , 如果你 Entity 設置了前后綴、此處注意 xml 的名稱(chēng)會(huì )跟著(zhù)發(fā)生變化??!
                    return projectPath + "/src/main/resources/com/keafmd/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
                }
            });
    
            cfg.setFileOutConfigList(focList);
            mpg.setCfg(cfg);
    
            // 配置模板
            TemplateConfig templateConfig = new TemplateConfig();
    
            templateConfig.setXml(null);
            mpg.setTemplate(templateConfig);
    
            // 策略配置
            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("表名,多個(gè)英文逗號分割").split(","));
            strategy.setControllerMappingHyphenStyle(true);
            strategy.setTablePrefix("m_");
            mpg.setStrategy(strategy);
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
            mpg.execute();
        }
    }

    4、運行代碼生成器生成代碼

    在控制臺輸入user(表名)

    紅框內為自動(dòng)生成的代碼:

    5、編寫(xiě)application.properties

    個(gè)人習慣把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

    6、在啟動(dòng)類(lèi)上添加@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、編寫(xiě)測試代碼測試數據庫是否連接正確

    1、在 UserMapper代碼頁(yè)大括號內,按下Alt+Insert,選擇Test

    2、Ok

    3、自動(dòng)生成了測試類(lèi)

    4、編寫(xiě)測試代碼

    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<User> userList = userService.list();
            for (User user : userList) {
                System.out.println(user);
            }
    
        }
    
    
    
    }

    5、測試結果

    至此,后端和數據庫連接沒(méi)問(wèn)題。

    8、編寫(xiě)后端的工具類(lèi)代碼(封裝結果集、日期處理、解決跨域請求)

    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<SimpleDateFormat> 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,"未登錄或登錄已超時(shí)"),
        NOPERMISS(403,"無(wú)操作權限"),
        ;
    
        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 {
    
        /**
         * 分頁(yè)插件
         * @return
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
            paginationInterceptor.setDialect(new MySqlDialect());
            paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
            return paginationInterceptor;
        }
        @Bean
        FilterRegistrationBean<CorsFilter> cors(){
            FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<CorsFilter>();
            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、編寫(xiě)后端的增刪改查代碼

    1、在UserService接口中編寫(xiě)分頁(yè)查詢(xún)代碼

    package com.keafmd.service;
    
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.keafmd.entity.User;
    import com.baomidou.mybatisplus.extension.service.IService;
    
    /**
     * <p>
     *  服務(wù)類(lèi)
     * </p>
     *
     * @author 關(guān)注公眾號:牛哄哄的柯南
     * @since 2021-04-29
     */
    public interface UserService extends IService<User> {
        Page pageList(Page page, User user);
    }

    2、在UserServiceImpl實(shí)現類(lèi)中實(shí)現分頁(yè)查詢(xún)和模糊查找

    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;
    
    /**
     * <p>
     *  服務(wù)實(shí)現類(lèi)
     * </p>
     *
     * @author 關(guān)注公眾號:牛哄哄的柯南
     * @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中編寫(xiě)增刪改查代碼

    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;
    
    /**
     * <p>
     *  前端控制器
     * </p>
     *
     * @author 關(guān)注公眾號:牛哄哄的柯南
     * @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)));
        }
    
    }

    前端搭建

    由于篇幅有限,前端搭建單獨再寫(xiě)一篇

    以上就是SpringBoot+MyBatisPlus+Vue 前后端分離項目快速搭建【后端篇】【快速生成后端代碼、封裝結果集、增刪改查、模糊查找】【畢設基礎框架】的全部?jì)热?/strong>

    到此這篇關(guān)于SpringBoot+MyBatisPlus+Vue 前后端分離項目快速搭建過(guò)程(后端)的文章就介紹到這了,更多相關(guān)SpringBoot+MyBatisPlus+Vue 前后端分離搭建內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

    亚洲欧洲专线一区| 性欧美乱妇高清come| 首页 图区 国产 亚洲 欧美| 成熟丰满熟妇高潮XXXXX视频| 无码少妇一区二区浪潮AV| 中国少妇内射XXXXⅩHD|