Springboot集成Mybatisplus过程

这里写目录标题

  • 背景
  • 步骤
    • 明确标准
    • 实操过程
      • 创建好数据库,命名好(这里会考察一个命名规范),表的命名,中间使用下划线隔离开。
      • 使用idea创建Springboot项目(注意版本问题)
      • 使用插件生成代码
      • 常用代码
      • pom文件
  • 总结

背景

现在面试越来越灵活了,可以限时写代码,将整个流程串起来,这个过程中可以考察面试者的东西有很多,如高压环境下实现的效果,还有代码的规范性等。

步骤

明确标准

在这里插入图片描述

实操过程

创建好数据库,命名好(这里会考察一个命名规范),表的命名,中间使用下划线隔离开。

考点:
1、库名,表名应该如何设置:库名、表名小写,中间用下划线隔开aliyun_admin。
2、字段如何设置:有必备字段,小写,中间用下划线隔开。(id、create_time、update_time)
3、表中字段之间的关系(主键外键等)

使用idea创建Springboot项目(注意版本问题)

创建web项目
在这里插入图片描述
在这里插入图片描述

引入pom文件中相关坐标(注意版本问题)

<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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>


        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.4</version>
        </dependency>

        <!--lombok用来简化实体类-->

    </dependencies>

使用插件生成代码

在这里插入图片描述

首先连接数据库
在这里插入图片描述

然后自动生成代码

在这里插入图片描述
这样生成的代码controller 里边没有真正的方法代码,可以参考如下:

常用代码

 @Autowired
    private IEricUserService ericUserService;



    /**
     * 添加
     *
     * @param model DictionaryModel
     * @return 添加的结果
     * @author
     * @since ${version} 2019-01-02 19:15:16
     */
    @ApiOperation(value = "添加")
    @PostMapping(value = {"/create"})
    public FrontResult create(@RequestBody EricUser model) {
        EricUser dictionaryEntity = new EricUser();
        BeanUtils.copyProperties(model, dictionaryEntity);
        ericUserService.save(dictionaryEntity);
        return FrontResult.build(FrontResult.SUCCESS, "添加成功","");
    }

    /**
     * 删除
     *
     * @param id 主键id
     * @return ItooResult 是否删除成功
     * @author 刘雅娟
     * @since ${version} 2019-01-02 19:15:16
     */
    @ApiOperation(value = "根据id删除(单个)")
    @DeleteMapping(value = {"/delete/{id}"})
    public FrontResult delete(@ApiParam(value = "主键id", required = true) @PathVariable String id) {
        ericUserService.removeById(id);
        return FrontResult.build(FrontResult.SUCCESS, "删除成功","");
    }

    /**
     * 批量删除
     *
     * @param ids ids
     * @return ItooResult 批量删除是否成功结果
     * @author 刘雅娟
     * @since ${version} 2019-01-02 19:15:16
     */
    @ApiOperation(value = "根据id批量删除")
    @DeleteMapping(value = {"/deleteByIds"})
    @ApiImplicitParam(name = "ids", value = "ids", dataType = "List<String>", required = true)
    public FrontResult deleteByIds(@RequestBody List<String> ids) {
        ericUserService.removeByIds(ids);
        return FrontResult.build(FrontResult.SUCCESS, "批量删除成功","");
    }

    /**
     * 修改
     *
     * @param model DictionaryModel
     * @return 修改后的结果
     * @author 刘雅娟
     * @since ${version} 2019-01-02 19:15:16
     */
    @ApiOperation(value = "根据id修改dictionary")
    @PutMapping(value = {"/modify"})
    public FrontResult modify(@RequestBody EricUser model) {
        EricUser dictionaryEntity = new EricUser();
        BeanUtils.copyProperties(model, dictionaryEntity);
        boolean b = ericUserService.updateById(dictionaryEntity);
        return FrontResult.build(FrontResult.SUCCESS, "修改成功",b);
    }

    /**
     * 根据id查找Dictionary
     *
     * @param id 主键id
     * @return 根据id查找的结果
     * @author 刘雅娟
     * @since ${version} 2019-01-02 19:15:16
     */
    @ApiOperation(value = "根据id查询")
    @GetMapping(value = {"/findById/{id}"})
    public FrontResult findById(@ApiParam(value = "主键id", required = true) @PathVariable String id) {
        EricUser dictionaryEntity = ericUserService.getById(id);
        return FrontResult.build(FrontResult.SUCCESS, "查询成功", dictionaryEntity);
    }




    @ApiOperation(value = "分页查询当下课程班级学生学情")
    @PostMapping(value = {"/getAllStuStudyingSituationByPage"})
    public FrontResult getAllStuStudyingSituationByPage(@RequestBody EricUser ericUser) throws Exception {
        PageInfo studentStudyingDataForTeacher = ericUserService.getAllBypage(ericUser);
        //判断是否成功返回结果
        if (studentStudyingDataForTeacher != null) {
            return FrontResult.build(FrontResult.SUCCESS,"查询成功", studentStudyingDataForTeacher);
        }
        return FrontResult.build(FrontResult.FAIL,"查询失败","");
    }


分页代码

@Service
public class EricUserServiceImpl extends ServiceImpl<EricUserMapper, EricUser> implements IEricUserService {


    @Autowired
    EricUserMapper ericUserMapper;

    private static final Logger log = LogManager.getLogger();
    @Override
    public PageInfo getAllBypage(EricUser studentStudyingDataForTeacherModel) throws Exception {
        try {

            int pageNumber = 1;
            int pageSize = 2;
            PageHelper.startPage(pageNumber, pageSize);
            EricUser ericUser = new EricUser();
            QueryWrapper<EricUser> userQueryWrapper = Wrappers.query();
            List<EricUser> studentStudyingDataForTeacherLists = ericUserMapper.selectList(userQueryWrapper);

            PageInfo pageInfo = new PageInfo(studentStudyingDataForTeacherLists);
            return pageInfo;
        } catch (Exception e) {
            log.error("获取当前课程当前班级所有学生学情失败", e);
            return null;
        }
    }
}

记得给主函数上边加上

@MapperScan(“com.example.demo.mapper”)

在这里插入图片描述

package com.example.demo.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @introduce: 返回前端的结果实体
 * @author: liuBing
 * @DATE: 2020/5/25
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FrontResult {

    public static final String SUCCESS = "0000";
    public static final String FAIL = "1111";
    /**
     * 结果状态码
     */
    private String code;
    /**
     * 响应结果描述
     */
    private String message;
    /**
     * 返回数据
     */
    private Object data;

    /**
     * 静态方法,返回前端实体结果
     *
     * @param code    状态码
     * @param message 消息
     * @param data    数据
     * @return 前端实体结果
     * @author liuBing
     */
    public static FrontResult build(String code, String message, Object data) {
        return new FrontResult(code, message, data);
    }

    /**
     * 返回成功的结果实体
     *
     * @param message 消息
     * @param data    数据
     * @return 实体
     * @author: liuBing
     * @DATE: 2020/5/25
     */
    public static FrontResult getSuccessResult(String message, Object data) {
        FrontResult result = new FrontResult();
        result.code = ResultCodeEnum.SUCCESS.getCode();
        result.message = message;
        result.data = data;
        return result;
    }

    /**
     * 返回无需data的成功结果实体
     *
     * @param message 消息内容
     * @return 返回结果
     * @author liuBing
     */
    public static FrontResult getSuccessResultOnlyMessage(String message) {
        FrontResult result = new FrontResult();
        result.code = ResultCodeEnum.SUCCESS.getCode();
        result.message = message;
        result.data = null;
        return result;
    }

    /**
     * 获取一个异常结果
     *
     * @param code 错误码
     * @param message 自定义异常信息
     * @return FrontResult
     * @author 刘兵
     */
    public static FrontResult getExceptionResult(String code, String message) {
        FrontResult result = new FrontResult();
        result.code = code.isEmpty() ? ResultCodeEnum.CODE_EXCEPTION.getCode() : code;
        result.message = message.isEmpty() ? ResultCodeEnum.CODE_EXCEPTION.getMsg() : message;
        return result;
    }
}

/**
 * @ClassName ResultCodeEnum
 * @Description 返回前端的状态码枚举类
 * @Author ZWB
 * @Date 2021/12/12 17:03
 * @Version 1.0
 */
package com.example.demo.config;

import lombok.AllArgsConstructor;

@AllArgsConstructor
public enum ResultCodeEnum {
    // 请求成功
    SUCCESS("0000"),
    // 请求失败
    FAIL("1111"),
    //用户不存在
    USER_NOT_EXIST("2001"),
    //用户已经存在
    USER_HAS_EXISTED("2006"),

    //验证码过期
    Verification_Code_Out_Time("2002"),

    //验证码错误
    VERIFICATION_ERROR("2003"),
    //短信请求过快,请稍后重试
    FRQUENT_REQUESTS("4001"),

    // 参数为空
    PARAM_ERROR("400","参数为空"),
    // 代码内部异常
    CODE_EXCEPTION("500", "代码内部异常");


    /**
     * 状态码
     */
    private String code;

    public String getCode() {
        return code;
    }

    ResultCodeEnum(String code) {
        this.code = code;
    }

    private String msg;

    public String getMsg() {
        return msg;
    }

}

/**
 * @ClassName ResultMsgEnum
 * @Description 返回前端消息
 * @Author ZWB
 * @Date 2021/12/12 17:04
 * @Version 1.0
 */
package com.example.demo.config;

public enum ResultMsgEnum {
    FIND_SUCCESS("查询成功!"),
    FIND_FAIL("查询失败!"),

    UPDATE_SUCCESS("更新成功"),
    UPDATE_FAIL("更新失败"),

    SEND_SUCCESS("发送成功"),
    SEND_FAIL("发送失败"),

    EXECUTE_SUCCESS("执行成功!"),
    EXECUTE_FAIL("执行失败!"),
    EXECUTE_FAI("执行失败!"),
    A("1");

    private String msg;

    ResultMsgEnum(String msg) {
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }
}

pom文件

pom文件如下:

server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/iiii?serverTimezone=GMT%2B8
    username: root
    password: 123456


#开启日志
mybatis-plus:
  global-config:
    # 逻辑删除配置
    db-config:
      # 删除前
      logic-not-delete-value: 1
      # 删除后
      logic-delete-value: 0
  configuration:
    map-underscore-to-camel-case: true
    auto-mapping-behavior: full
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:demo/mapper/*.xml


pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

在这里插入图片描述

总结

实现效果并不难,但是既然难度不大,那我们如何在短时间内迅速搭建好能够使用呢,这就好像公务员考试,题都会做,但是如何能在短时间内提高答题的正答率呢,这需要我们进行刻意训练,注重规范等,能够达到面试者的要求。

建表规范,命名规范
版本注意,配置文件格式
引入分页插件,并进行配置
常用返回格式的类累积

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口

前言 本篇文章我们来使用 Supabase 实现 RESTful 风格的 API 接口&#xff0c;以此来实现网站分类和子站点的 CURD 功能。 表设计 这里需要用到两张表&#xff1a; ds_categorys&#xff1a;存储网站分类 列名类型备注iduuid主键&#xff0c;分类 idnametext分类名称desct…

重生之 SpringBoot3 入门保姆级学习(22、场景整合 Swagger 接口文档)

重生之 SpringBoot3 入门保姆级学习&#xff08;22、场景整合 Swagger 接口文档&#xff09; 6.2 Swagger 接口文档 6.2 Swagger 接口文档 1、将 starter 导入 Maven 官网 https://springdoc.org/<dependency><groupId>org.springdoc</groupId><artifact…

学习记录之数学表达式(5)

文章目录 十、线性回归10.1 示例10.2 拟合10.3 推导10.4 岭回归10.5 作业 十一、Logistic回归11.1 分割超平面11.2 点到直线的距离11.3 sigmoid函数11.4 优化目标11.5 求解11.6 作业 十、线性回归 线性回归是一个常用的机器学习算法&#xff1b; 10.1 示例 表 1.单变量的股价预…

格雷母线技术革新:推动斗轮堆取料机进入精准操作时代

随着工业4.0时代的到来&#xff0c;智能化、自动化已成为工业发展的必然趋势。特别是在港口、电力、冶金等行业中&#xff0c;散料装卸机械的智能化水平直接关系到整个生产流程的效率与安全。斗轮堆取料机作为这些行业中的关键设备&#xff0c;其操作方式的革新显得尤为重要。 …

Unity OpenCVForUnity 安装和第二个案例详解 <二>

目录 一、前言 二、场景介绍 1.WebCamTextureToMatExample脚本 2.FpsMonitor脚本 三、 结构体Scaler 四、找到相机并使用 1.相机的启用 2.格式转换 a.把webCamTexture转换成Mat b.把Mat转换成Texture2D 五、脚本组合 六、作者的碎碎念 一、前言 第二个案例&#xf…

leetcode (top100)盛最多水的容器

题目&#xff1a; 题解&#xff1a; 第一种可行的方案&#xff1a; 设置左指针指向第一条线&#xff0c;设置右指针指向最后一条线。每次向中间移动两条线中最短的一条&#xff0c;计算移动过程中最大接水量。 本题可以看出影响接水量的有两个因素&#xff0c;两条线的距离&…

空间复杂度的相关概念

1. 空间复杂度 空间复杂度&#xff08;space complexity&#xff09;用于衡量算法占用内存空间随着数据量变大时的增长趋势。 统计哪些空间&#xff1a; ● 暂存数据&#xff1a;用于保存算法运行过程中的各种常量、变量、对象等。 ● 栈帧空间&#xff1a;用于保存调用函数…

PyTorch -- RNN 快速实践

RNN Layer torch.nn.RNN(input_size,hidden_size,num_layers,batch_first) input_size: 输入的编码维度hidden_size: 隐含层的维数num_layers: 隐含层的层数batch_first: True 指定输入的参数顺序为&#xff1a; x&#xff1a;[batch, seq_len, input_size]h0&#xff1a;[batc…

Ubuntu 24.04安装zabbix7.0.0图形中文乱码

当zabbix安装完成后&#xff0c;设置中文界面时&#xff0c;打开图形&#xff0c;中文内容会显示方框乱码&#xff0c;是因为服务器字体中没有相关的中文字体&#xff0c;需要更换。 1、找到中文字体&#xff0c;可以在网络上下载《得意黑》开源字体&#xff0c;也可以在windo…

LeetCode322.零钱兑换(一)

LeetCode刷题记录 文章目录 &#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码 &#x1f4dc;题目描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。…

SAP MIGO 050 BADI:字段 GOITEM-XXXXX 未准备好输出

背景&#xff1a; MIGO过账时候需要根据某些条件更改某些字段的值&#xff0c;当要改的字段在前台不显示时&#xff0c;通过MB_MIGO_BADI~LINE_MODIFY去更改时&#xff0c;则会出现以下报错&#xff1a;MIGO050 解决方案1&#xff1a; 通过配置将该字段配置显示出来即可&…

阿里云如何部署项目【2024 详细版】

首次注册阿里云后可以购买免费服务器&#xff0c;可以用服务器练习部署项目&#xff0c;这里以部署个人网站为例 本人目前没有购买域名&#xff0c;因此域名流程并没有写&#xff0c;有看不懂的私信或者评论就行&#xff0c;我都可以看见 目录 一、购买服务器 二、安装宝塔…

「Python-docx 专栏」docx设置罗马数字页码,即页码编码格式为罗马数字

本文目录 前言一、docx 设置罗马数字页码1、docx设置大写罗马数字的页码①、docx背后的xml长啥样②、<w:sectPr> 标签详解③、通过<w:sectPr> 设置大写罗马数字的页码A、完整代码B、处理效果图C、这段代码实际上的作用2、docx设置小写罗马数字的页码①、完整代码②…

vue3前端对接后端的图片验证码

vue3前端对接后端的图片验证码 <template> <image :src"captchaUrl" alt"图片验证码" click"refreshCaptcha"></image> </template><script setup>import {ref} from "vue";import {useCounterStore} …

vue 2.0

自定义vue标签指令&#xff1a; <!DOCTYPE html> <html lang"en"> <script src"vue.js"></script> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <div id…

Prometheus告警Alertmanager部署

Prometheus告警Alertmanager部署 资源监控一般离不开预警&#xff0c;因为我们不可能每时每刻都盯着某个资源监控看&#xff0c;而且在实际的工作中当中我们搭建的解决方案涉及到的服务器是多台甚至数十台&#xff0c;所以更加不现实&#xff0c;因此资源告警是一个必不可少的…

3ds Max软件下载安装:3D建模软件 轻松开启你的建模之旅!

3ds Max&#xff0c;在建模过程中&#xff0c;网格建模和NURBS建模两大技术发挥着不可或缺的作用。网格建模允许用户通过顶点、边和面等元素的调整&#xff0c;精确地塑造出模型的形态&#xff1b;而NURBS建模则以其优秀的曲线和曲面处理能力&#xff0c;为设计师们提供了更为平…

ChinaTravel成流量密码,景区如何打造视频监控管理平台提升旅游体验

随着中国经济的飞速发展和人民生活水平的持续提高&#xff0c;旅游已经成为越来越多人休闲放松的首选方式。近期&#xff0c;随着互联网的普及和社交媒体的兴起&#xff0c;以及免签政策带火入境游&#xff0c;“ChinaTravel”已成为社交网络上的一大流量密码&#xff0c;吸引了…

1. ELK日志分析

ELK日志分析 一、ELK作用、组件1、作用2、核心组件2.1 beat软件2.1 Logstash2.2 Elasticsearch2.3 Kibana 二、ELK部署、测试1、环境规划2、确保SELinux关闭、时间同步3、所有主机添加主机名解析4、三台ES主机安装jdk 1.155、调整系统资源限制6、部署es集群6.1 创建普通用户elk…

AI口语练习APP的技术难点

AI口语练习APP旨在帮助用户练习口语&#xff0c;因此其核心功能是语音识别和语音评测。以下是一些AI口语练习APP的主要技术难点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 语音识别 语音识别是将语音信号转换为文本的过程。…