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提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
用户99045017780092 分钟前
ruoyi-vue2集成flowable6.7.2后端篇
后端
qq_12498707536 分钟前
基于springboot框架的小型饮料销售管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·毕业设计
我命由我1234513 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
IT_陈寒22 分钟前
JavaScript 性能优化:5个被低估的V8引擎技巧让你的代码提速50%
前端·人工智能·后端
想用offer打牌33 分钟前
数据库大事务有什么危害(面试版)
数据库·后端·架构
Jaising66634 分钟前
Spring 错误使用事务导致数据可见性问题分析
数据库·spring boot
踏浪无痕41 分钟前
别再只会用 Feign!手写一个 Mini RPC 框架搞懂 Spring Cloud 底层原理
后端·面试·架构
NMBG2244 分钟前
外卖综合项目
java·前端·spring boot
小徐Chao努力1 小时前
Spring AI Alibaba A2A 使用指南
java·人工智能·spring boot·spring·spring cloud·agent·a2a
用户695619440371 小时前
前后端分离VUE3+Springboot项目集成PageOffice核心代码
后端