Springboot整合mybatis-plus

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目搭建



  • 添加如下依赖
java 复制代码
 <!--        引入mybatisPlus 包含了 jdbc -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--        mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--  引入durid數據源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.18</version>
        </dependency>

二、 配置文件

1.配置启动类映射mapper

代码如下(示例):

c 复制代码
@SpringBootApplication
@MapperScan("com.example.demoboot.*.mapper")
public class DemobootApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemobootApplication.class, args);
    }

}

2.配置mybtis-publs分页

代码如下(示例):

c 复制代码
@Configuration
public class MyBaitsPlusConfig {

    //配置分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //数据库类型是MySql,因此参数填写DbType.MYSQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

3.配置Result返回类

java 复制代码
package com.example.demoboot.config;

import java.io.Serializable;

public class Result<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    private boolean success = true; // 成功标志
    private boolean crypto = false; // 是否响应结果解密/ SM4/CBC
    private String message = ""; // 返回处理消息
    private Integer code = 0; // 返回代码
    private T result; // 返回数据对象
    private long timestamp = System.currentTimeMillis(); // 时间戳

    // 默认构造函数
    public Result() {}

    // 带参数的构造函数
    public Result(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    // 设置成功结果
    public Result<T> success(String message) {
        this.message = message;
        this.code = 200;
        this.success = true;
        return this;
    }

    // 创建成功结果
    public static <T> Result<T> OK() {
        return new Result<>(200, "操作成功");
    }

    // 创建成功结果,带数据
    public static <T> Result<T> OK(T data) {
        Result<T> result = OK();
        result.setResult(data);
        return result;
    }

    // 创建成功结果,带消息和数据
    public static <T> Result<T> OK(String msg, T data) {
        Result<T> result = OK();
        result.setMessage(msg);
        result.setResult(data);
        return result;
    }

    // 创建错误结果,带消息和数据
    public static <T> Result<T> error(String msg, T data) {
        return error(500, msg, data);
    }

    private static <T> Result<T> error(int i, String msg, T data) {
        Result<T> result = error(i, msg);
        result.setResult(data);
        return result;
    }

    // 创建错误结果,带消息
    public static <T> Result<T> error(String msg) {
        return error(500, msg);
    }

    // 创建错误结果,带状态码和消息
    public static <T> Result<T> error(int code, String msg) {
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMessage(msg);
        result.setSuccess(false);
        return result;
    }

    // 设置 500 错误
    public Result<T> error500(String message) {
        return error(500, message);
    }

    // 设置未授权结果
    public static <T> Result<T> noAuth(String msg) {
        return error(510, msg);
    }

    // Getter 和 Setter 方法
    public boolean isSuccess() { return success; }
    public boolean isCrypto() { return crypto; }
    public String getMessage() { return message; }
    public Integer getCode() { return code; }
    public T getResult() { return result; }
    public long getTimestamp() { return timestamp; }

    public void setSuccess(boolean success) { this.success = success; }
    public void setCrypto(boolean crypto) { this.crypto = crypto; }
    public void setMessage(String message) { this.message = message; }
    public void setCode(Integer code) { this.code = code; }
    public void setResult(T result) { this.result = result; }
    public void setTimestamp(long timestamp) { this.timestamp = timestamp; }

    // equals 和 hashCode 方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Result)) return false;
        Result<?> other = (Result<?>) o;
        return success == other.success && crypto == other.crypto && timestamp == other.timestamp &&
                code.equals(other.code) && message.equals(other.message) && result.equals(other.result);
    }

    @Override
    public int hashCode() {
        return 31 * (success ? 1 : 0) +
                (crypto ? 1 : 0) +
                code.hashCode() +
                message.hashCode() +
                result.hashCode() +
                Long.hashCode(timestamp);
    }

    @Override
    public String toString() {
        return "Result{" +
                "success=" + success +
                ", crypto=" + crypto +
                ", message='" + message + '\'' +
                ", code=" + code +
                ", result=" + result +
                ", timestamp=" + timestamp +
                '}';
    }
}

4.新建 WebConstant 添加接口访问

java 复制代码
package com.example.demoboot.config;

public class WebConstant {
    public static final String API_PATH = "/api"; // 基础 API 路径
}

5.配置yml

java 复制代码
spring:
  thymeleaf:
    cache: true  # 开启模板缓存(默认值:true)
    check-template: true  # 检查模板是否存在并解析
    check-template-location: true  # 检查模板位置是否正确(默认值:true)
    content-type: text/html  # Content-Type 的值(默认值:text/html)
    enabled: true  # 开启 MVC Thymeleaf 视图解析(默认值:true)
    encoding: UTF-8  # 模板编码
    excluded-view-names: ""  # 被排除在解析之外的视图名称列表
    mode: HTML5  # 模板模式(默认值:HTML5)
    prefix: classpath:/templates/  # 视图名称前缀(默认值:classpath:/templates/)
    suffix: .html  # 视图名称后缀(默认值:.html)

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  # 数据源类型
    username: root  # 数据库用户名
    password: 111111  # 数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver  # 驱动类名
    url: jdbc:mysql://localhost:3306/ceshi  # 数据库连接URL,

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 日志实现
    map-underscore-to-camel-case: true  # 开启驼峰命名
server:
  port: 8033 # 设置服务器启动端口为8033

三、 实现mybtis-publs增删改查

四、 层级关联说明

  • moduleController
java 复制代码
@RestController
@RequestMapping(value =  WebConstant.API_PATH + "/modou")
public class moduleController {

}
  • moduleService
java 复制代码
public interface moduleService extends IService<module> {

}
  • moduleServiceImpl
java 复制代码
@Service
public class moduleServiceImpl extends ServiceImpl<moduleMapper, module> implements moduleService {

}
  • moduleMapper
java 复制代码
@Mapper
public interface moduleMapper extends BaseMapper<module> {

}

五、 利用mybtis-publs 生成插件

  • 连接数据库

  • 代码生成

  • 自行配置

  • 生成之后自行修改不足之处即可

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
野犬寒鸦1 分钟前
从零起步学习并发编程 || 第三章:JMM(Java内存模型)详解及对比剖析
java·服务器·开发语言·分布式·后端·学习·spring
沐泽__20 分钟前
Flask简介
后端·python·flask
半聋半瞎27 分钟前
Flowable快速入门(Spring Boot整合版)
java·spring boot·后端·flowable
毕设源码-邱学长43 分钟前
【开题答辩全过程】以 基于SpringBoot的理工学院学术档案管理系统为例,包含答辩的问题和答案
java·spring boot·后端
修己xj1 小时前
SpringBoot解析.mdb文件实战指南
java·spring boot·后端
lpfasd1231 小时前
Spring Boot 定时任务详解(从入门到实战)
spring boot·后端·python
moxiaoran57531 小时前
Go语言的文件操作
开发语言·后端·golang
赴前尘2 小时前
记一次golang进程执行卡住的问题排查
开发语言·后端·golang
码农小卡拉2 小时前
Prometheus 监控 SpringBoot 应用完整教程
spring boot·后端·grafana·prometheus
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue球鞋购物系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计