Springboot集成Mybatisplus过程

news2025/2/26 4:08:36

这里写目录标题

  • 背景
  • 步骤
    • 明确标准
    • 实操过程
      • 创建好数据库,命名好(这里会考察一个命名规范),表的命名,中间使用下划线隔离开。
      • 使用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

在这里插入图片描述

总结

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

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

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

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

相关文章

下载mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar操作教程

1、下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 2、截图如下

Nvidia Isaac Sim 入门教程 2024(3)图形界面

Isaac Sim 基本使用 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author …

产品经理方法论

1、用户体验 5 要素 1&#xff0c;表现层是你拿到一个产品以后&#xff0c;视觉表现&#xff0c;配色&#xff0c;布局&#xff0c;排版等等 2&#xff0c;框架层&#xff0c;是交互层面的东西&#xff0c;比如&#xff0c;操作情况&#xff0c;刷新&#xff0c;页面跳转&…

android 在线程中更新界面

在Android中&#xff0c;你不能直接从子线程中更新UI&#xff0c;因为这会导致应用崩溃。你需要使用Handler或runOnUiThread()来更新UI。 使用Handler 以下是如何使用Handler在子线程中更新UI的示例&#xff1a; 1. 创建Handler实例&#xff1a; import android.os.Bundle;…

肩背筋膜炎怎么治疗最有效

肩背筋膜炎是一种常见的肌肉骨骼疾病&#xff0c;其症状主要包括&#xff1a;肩背区域疼痛&#xff1a;由于筋膜组织受到损伤&#xff0c;肩背部位会出现明显的疼痛&#xff0c;疼痛可能会放射到周围的其他部位&#xff0c;严重时会影响睡眠和休息。肌肉紧张和僵硬&#xff1a;…

数据库实战(二)(引言+关系代数)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 常见概念 一、什么是数据库&#xf…

AJAX 原理-day3

XMLHttpRequest AJAX原理 是 XMLHttpRequest对象 定义&#xff1a; 关系&#xff1a;axios 内部采用 XMLHttpRequest 对象与服务器交互 步骤&#xff1a; 1. 创建 XMLHttpRequest 对象 2. 配置 请求方法 和请求 url 地址 3. 监听 loadend 事件&#xff0c;接收 …

AI绘画Stable Diffusion神级插件AnimateDiff超稳动画教程来了!手把手教你一次性学会

大家好&#xff0c;我是设计师阿威 今天给大家分享AI做稳定动画的新教程&#xff0c;这一次的稳定效果&#xff0c;比上一次和上上次都更加惊艳&#xff0c;而且实现难度直线下降&#xff01;几乎可以说是有手就会&#xff0c;非常适合追求高效高质效果的商用场景&#xff01;…

(7)摄像机和云台

文章目录 前言 1 云台 2 带有MAVLink接口的摄像机 3 相机控制和地理标签 4 视频质量差的常见修复方法 5 详细主题 前言 Copter、Plane 和 Rover 最多支持 3 轴云台&#xff0c;包括自动瞄准感兴趣区域&#xff08;ROI&#xff09;的相机和自动触发相机快门等先进功能。按…

【OS基础】符合AUTOSAR标准的RTAOS-Alarms详解

目录 前言 正文 7.报警Alarms 7.1配置Alarms 7.1.1激活一个任务 7.1.2 设置一个事件 7.1.3报警回调Alarm Callback 7.1.4 增加计数器值 7.2设置Alarms 7.2.1 绝对Alarms 7.2.2 相对Alarm 7.3自启动Alarms 7.4 删除Alarms 7.5确认何时会发生Alarm 7.6非周期Alarm…

Appium:Appium-Python-Client与Selenium版本不兼容导致的问题

一、问题描述 在执行python代码过程中&#xff0c;出现了以下错误&#xff1a; 错误一&#xff1a;No module named appium.webdriver.common.touch_action Traceback (most recent call last):File "d:\xxx\index.py", line 3, in <module> ModuleNotFound…

山西青年杂志山西青年杂志社山西青年编辑部2024年第10期目录

本刊专稿 共融共创、校企共建BIM创新创业中心的探索与实践 黄强;马福贵;贾晓敏;苏艳贞;魏艳卿; 1-3 财务管理课程专创融合教学改革与实践 宋衍程; 4-7 数字化赋能国际贸易实务课程建设研究 吴珍彩; 8-11《山西青年》投稿&#xff1a;cn7kantougao163.com 青年教育研…

VSCode 安装NeoVim扩展(详细)

目录 1、安装NeoVim扩展 2、windows安装Neovim软件 3、优化操作相关的配置&#xff1a; 5、Neovim最好的兼容性配置 6、技巧和特点 6.1 故障排除 6.2、Neovim 插件组合键设置 6.3、跳转列表 1、安装NeoVim扩展 在扩展商店搜索NeoVim&#xff0c;安装扩展 2、windows安装…

CSS 实现电影信息卡片

CSS 实现电影信息卡片 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"poster"><img src"./poster.jpg" /></div><div class"details"><img src"./avtar…

React-Redux学习笔记(自用)

1. 环境搭建 插件安装&#xff1a;Redux Toolkit和react-redux npm i reduxjs/toolkit react-redux2、 store目录结构设计 集中状态管理的部分会单独创建一个store目录&#xff08;在src下&#xff09;应用通常会有很多个子模块&#xff0c;所以还会有个modules目录&#x…

net start mysql服务名无效

问题背景 起因是我的电脑因为停电烧坏了系统固态硬盘&#xff0c;再新装系统后&#xff0c;之前的MySQL服务无法通过下面的命令启动。 net start mysql # 报错&#xff1a;服务名无效 报错&#xff1a;服务名无效 报错信息 未找到&#xff1a;在Windows服务中找不到MySQL 找…

【无线传感网】分簇路由算法介绍

目录 1、LEACH路由算法 2、PEGASIS 算法 3、TEEN 算法 5、APTEEN 5、LEACH-C 算法 无线传感网中的路由协议就是寻找一条路径让网络中节点沿着这条路径将数据信息传输出去。路由协议的两大关键要点就是路径的优化和数据的分组,在传统计算机网络中,是将网络的拓扑…

帝国cms批量取消文章审核-把已审核的文章改成未审核的方法

帝国cms很多人采集的时候,把文章弄成了审核过的文章,或者因为其他的原因,文章都是审核通过,为了seo又不能把全部文章放出来,所以需要把文章弄成未审核以下就是解决本问题的办法 首先来修改后台列表文件,自行找文件路径 第二步,增加函数 在ecmsinfo.php的150行后面增加…

中年帕金森:守护健康,从容面对生活挑战

在快节奏的现代生活中&#xff0c;中年人群面临着越来越多的健康挑战。其中&#xff0c;帕金森病作为一种常见的神经系统疾病&#xff0c;逐渐引起了人们的关注。帕金森病不仅影响患者的身体健康&#xff0c;还对其日常生活造成极大的困扰。那么&#xff0c;我们该如何应对中年…

协同编辑:只是在线协作这么简单吗?揭秘协同编辑的深层价值

经常很多朋友咨询&#xff0c;无忧企业文档是否支持协同编辑&#xff0c;首先肯定是支持的。但是&#xff0c;我发现很多人对于“协同编辑”的理解可能比较表面&#xff0c;仅仅停留在多人同时编辑一份文档的层面。实际上&#xff0c;协同编辑的功能远不止于此&#xff0c;它更…