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

相关推荐
喝旺仔la22 分钟前
Django后台接口开发
后端·python·django
程序员阿鹏22 分钟前
详解:模板设计模式
java·开发语言·jvm·后端·设计模式·eclipse·1024程序员节
weixin_3784102443 分钟前
java springboot项目如何计算经纬度在围栏内以及坐标点距离
java·开发语言·spring boot
2401_858120261 小时前
SpringBoot框架:闲一品交易平台的创新驱动
数据库·spring boot·oracle
customer081 小时前
【开源免费】基于SpringBoot+Vue.J影城管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源
叫我阿笑就好了1 小时前
Json库和文件操作
后端·json·restful
尘浮生2 小时前
Java项目实战II基于微信小程序的计算机实验室排课与查询系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·微信小程序·小程序
小春学渗透2 小时前
DAY66WEB 攻防-Java 安全&SPEL 表达式&SSTI 模版注入&XXE&JDBC&MyBatis 注入
java·安全·mybatis
掘金酱2 小时前
【🎁 请领取打卡礼】掘金 AI 刷题功能再次升级,AI 编程助手带你领取打卡能量包!
前端·后端·求职
YMZN912 小时前
基于springboot+小程序的汽车销售管理系统(汽车4)
spring boot·小程序·汽车