电商项目后端框架SpringBoot、MybatisPlus

news2024/12/23 13:04:16

后端框架基础

1.代码自动生成工具 mybatis-plus

(1)首先需要添加依赖文件
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <!-- 代码自动生成工具 mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- json object对象支持 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <!-- 代码生成器中使用freemarker -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

(2)设置application.yml文件中数据库信息并且创建数据库及表
server:
  port: 8080

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/market?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    druid:
      validation-query: SELECT 1 FROM DUAL
      initial-size: 10 #初始化时建立物理连接的个数。
      min-idle: 10 #最小连接池数量
      max-active: 200 #最大连接池数量
      min-evictable-idle-time-millis: 300000 #连接保持空闲而不被驱逐的最小时间
      test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效
      test-while-idle: true #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,
      #执行validationQuery检测连接是否有效。
      time-between-eviction-runs-millis: 30000 #1) Destroy线程会检测连接的间隔时间,
      #如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
      #2) testWhileIdle的判断依据
      pool-prepared-statements: true #是否缓存preparedStatement,也就是PSCache
      max-open-prepared-statements: 100 #要启用PSCache,必须配置大于0,当大于0时,
      #poolPreparedStatements自动触发修改为true

mybatis-plus:
  type-aliases-package: com.example.entity
  global-config:
    db-config:
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: false
    jdbc-type-for-null: 'null'
(3)自动生成代码文档代码

注意更改相应父类位置以及数据库信息、表信息

package com.imooc.mall.common;

import com.baomidou.mybatisplus.annotation.DbType;
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;

// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
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");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("pommy");
        gc.setOpen(false);
        // gc.setSwagger2(true); 实体属性 Swagger2 注解
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/mall?useUnicode=true&useSSL=false&characterEncoding=utf8");
        // dsc.setSchemaName("public");
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        //pc.setModuleName(scanner("模块名"));
        pc.setParent("com.imooc.mall");
        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<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        /*
        cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 判断自定义文件夹是否需要创建
                checkDir("调用默认方法创建的目录,自定义目录用");
                if (fileType == FileType.MAPPER) {
                    // 已经生成 mapper 文件判断存在,不想重新生成返回 false
                    return !new File(filePath).exists();
                }
                // 允许生成模板文件
                return true;
            }
        });
        */
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();

        // 配置自定义输出模板
        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
        // templateConfig.setEntity("templates/entity2.java");
        // templateConfig.setService();
        // templateConfig.setController();

        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setLogicDeleteFieldName("deleted");  //设置逻辑删除字段名
        // 公共父类
        //strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
        // 写于父类中的公共字段
        //strategy.setSuperEntityColumns("id");
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix("imooc_mall_");

        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

(4)持久层注入

在主类上方添加:@MapperScan(“com.example.mapper”)

2.分页功能

需要添加MybatisConfiguration配置文件完成分页

@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfiguration {
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
}

具体使用的时候用Page即可

3. 逻辑删除deleted属性位置(1为删除)

(1)首先在application.yml中添加以下内容
mybatis-plus:
  type-aliases-package: com.example.entity
  global-config:
    db-config:
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
(2)然后在entity实体类中的deleted属性前加上@TableLogic,表示逻辑删除属性

在这里插入图片描述

4. 模拟支付----支付宝沙箱环境设置

(1)登录客支付宝户端账号,开启公钥

前端基础知识Vue

注意跨域访问时,即在浏览器中输入网址访问数据,需要用主机ip地址,而不是localhost,之后在controller上面添加解决跨域访问的注解@CrossOrigin

在CMD中用ipconfig去查看本地的ip地址,ip4:10.6.12.170
在这里插入图片描述

1. vue cli创建新项目

下载anxios时,项目有中文路径往往不成功,此时可以选择别的方式,在cmd中切换到该路径下然后进行npm install axios,即可成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【markdown】markdown语法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

亿华通寻路:“氢”能之火,何以燎原?

氢&#xff0c;是能满足人类一切幻想的终极能源。以氢作为燃料的燃料电池&#xff0c;虽然还没有锂电池行业那样风光&#xff0c;但也在新能源战略布局中占有不可撼动的地位。近两年各界玩家跨界入局&#xff0c;更是掀起了持续的投资浪潮。在国内&#xff0c;政策依然是氢能发…

JAVA进阶--->JVM

文章目录JVM--java Virtual MachineJVM当时学习的存在位置JVM概述(什么是JVM)为什么学习JVM&#xff1f;虚拟机JVM作用JVM组成部分类加器作用类加载过程类什么时候会被加载&#xff08;初始化&#xff09;类加载器双亲委派机制打破双亲委派机制运行时数据区1.程序计数器2.本地方…

提取游戏《Limbus Company》(边狱公司)内素材

注意事项 相关工具会传到网盘。链接如下&#xff08;如果没链接那就是过期还没更新/文章没更新) BGM&#xff1a; 解包工具合集&#xff08;不包含uestdio&#xff0c;assetstdio)&#xff1a;点击此处 此文章主要是讲解如何提取游戏内的音频文件&#xff0c;所以默认各位会…

Spark性能优化四 内存

文章目录&#xff08;一&#xff09;性能优化分析内容怎么被消耗的如何预估程序会消耗多少内存呢(二&#xff09; 性能优化方案1)高性能序列化类库2)持久化或者checkpoint3)JVM 垃圾回收调优4)提高并行度5&#xff09;数据本地化&#xff08;一&#xff09;性能优化分析 一个计…

RocketMQ的基本概念与系统架构

RocketMQ安装与启动基础概念消息&#xff08;Message)主题&#xff08;Topic)标签&#xff08;Tag&#xff09;队列&#xff08;Queue)消息标识&#xff08;MessageId/Key)系统架构生产者 Producer消费者 Consumer名字服务器 NameServer功能介绍路由注册路由剔除路由发现客户端…

【Spark分布式内存计算框架——Structured Streaming】1. Structured Streaming 概述

前言 Apache Spark在2016年的时候启动了Structured Streaming项目&#xff0c;一个基于Spark SQL的全新流计算引擎Structured Streaming&#xff0c;让用户像编写批处理程序一样简单地编写高性能的流处理程序。 Structured Streaming并不是对Spark Streaming的简单改进&#xf…

Hypium框架使能ArkTS应用高效测试

HarmonyOS发布了声明式开发框架ArkUI&#xff0c;带来了极简高效的开发体验&#xff0c;备受广大开发者的青睐。那么&#xff0c;我们在开发过程中&#xff0c;如何确保ArkTS应用的功能和界面满足预期呢&#xff1f;ArkTS应用怎样高效进行专项测试&#xff1f;接下来&#xff0…

机器学习管道中的数据定价

机器学习管道中的数据定价 Data Pricing in Machine Learning 作者&#xff1a;Pipelines Zicun Cong Xuan Luo Pei Jian Feida Zhu Yong Zhang Abstract 机器学习具有破坏性。同时&#xff0c;机器学习只能通过多方协作&#xff0c;在多个步骤中取得成功&#xff0c;就…

Spark 性能调优

1常规性能调优 1.1常规性能调优一&#xff1a;最优资源配置 Spark性能调优的第一步&#xff0c;就是为任务分配更多的资源&#xff0c;在一定范围内&#xff0c;增加资源的分配与性能的提升是成正比的&#xff0c;实现了最优的资源配置后&#xff0c;在此基础上再考虑进行后面…

高研发投入成就产品力,蔚来财报透露重要信号

3月1日晚间&#xff0c;蔚来发布了2022年第四季度及全年财报。 财报显示&#xff0c;蔚来四季度营收160.6亿元&#xff0c;同比增长62.2%&#xff0c;连续11个季度正增长&#xff0c;同时全年总营收达492.7亿元&#xff0c;季度和年度营收均创新高。 尽管过去一年受到新冠疫情…

妇女节到了,祝福所有女神 Happy Women‘s Day!

在每年&#xff13;月&#xff18;日人们庆祝妇女节 &#xff37;omens Day is cllebrated on March 8 every year.国际妇女节(IWD)&#xff0c;中国内地称“三八”国际劳动妇女节或国际劳动妇女节。是在每年的3月8日为庆祝妇女在经济、政治和社会等领域作出的重要贡献和取得的…

5个商用字体网站分享

整理了5个免费、商用字体素材网站&#xff0c;对你有帮助记得点赞收藏。 更多设计素材免费下载&#xff1a; https://www.sucai999.com/?vNTYxMjky 1、FontSpace https://www.fontspace.com/ 这个网站提供了96000款免费字体&#xff0c;可商业用途的字体就有17000款&#xf…

RK3568-IOT核心板不同规格品牌TF卡读写速率测试

1. 测试对象HD-RK3568-IOT 底板基于HD-RK3568-CORE工业级核心板设计&#xff08;双网口、双CAN、 5路串口&#xff09;&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。适用于工业自动化控制、人机界面、中小型医疗分析器…

VMworkstation centos虚拟机配置仅主机模式

首先是仅主机模式介绍&#xff0c;可以略过直接看下面具体配置过程。仅主机模式用于在宿主机和虚拟机之间建立局域网&#xff0c;宿主机和虚拟机之间可以互相访问&#xff0c;原理是建立虚拟交换机和宿主机虚拟网卡&#xff08;vmnet1&#xff09;&#xff0c;宿主机虚拟网卡和…

深入分析域内ntlm relay to adcs服务的利用(含wireshark抓包分析)

前言 2021年中旬&#xff0c;specterops发布了一项针对域证书服务(adcs)的利用白皮书&#xff0c;文档中提到了19种对adcs服务的利用。本篇主要是分析文中提出的ntlm relay to adcs窃取证书的攻击流程&#xff0c;原理和抓包分析。 相关内容 ADCS介绍 Active Directory证书…

AI for Science系列(三):赛桨PaddleScience底层核心框架技术创新详解

继上一篇典型案例及API功能介绍&#xff0c;本篇重点讲解飞桨核心框架为支持科学计算任务在技术上的创新工作与成果。 框架技术创新 飞桨科学计算套件赛桨PaddleScience底层技术依赖飞桨核心框架。为了有力地支撑科学计算任务高效训练与推理&#xff0c;飞桨核心框架在自动微…

案例13-前端对localStorage的使用分析

一&#xff1a;背景介绍 前端在调用后端接口获取某一个人的评论次数、获赞次数、回复次数。调用之后判断后端返回过来的值。如果返回回来的值是0的话&#xff0c;从缓存中获取对应的值&#xff0c;如果从缓存中获取的评论次数为空那么其他两个的次数也为0。 二&#xff1a;思路…

SqlServer Management Studio启用身份验证登录

背景 一开始安装好SqlServer Management Studio时&#xff0c;默认只能用本地window身份验证登录&#xff0c;也就是除了SqlServer的电脑&#xff0c;别的都访问不了这个数据库&#xff0c;这是很不方便的 方案 1.打开SqlServer Management Studio&#xff0c;先用window身份…

windows内核学习-段和页相关

段寄存器(96位)(234条消息) 03.段寄存器_015646的博客-CSDN博客代码段寄存器CS&#xff08;Code Segment&#xff09;存放当前正在运行的程序代码所在段的段基址&#xff0c;表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得&#xff0c;相应的偏移量则由IP提供。数…