springboot整合MybatisPlus+MySQL

上一篇:springboot整合sentinel和对feign熔断降级

文章目录

一、准备

docker部署MySQL:参考docker安装各个组件的命令

二、主要工作

  • 准备数据库环境:新建数据库sd,再导入sql脚本
  • 引入MybatisPlus和MySQL依赖
  • 修改配置文件bootstrap.yml
  • 使用Mybatisplus

三、具体步骤

3.1 准备数据库环境

sql 复制代码
CREATE TABLE `t_product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '名称',
  `price` int NOT NULL COMMENT '价格',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14787164048663 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表';

CREATE TABLE `t_order` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `amount` int NOT NULL COMMENT '金额',
	`user_id` bigint NOT NULL COMMENT '创建订单的用户id',
	`create_time` datetime NOT NULL DEFAULT now() COMMENT '创建时间',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21787164048663 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单表';

insert into t_product values(null,"铅笔",3);
insert into t_product values(null,"橡皮",1);
insert into t_product values(null,"钢笔",50);
insert into t_product values(null,"文具袋",20);

insert into t_order(`amount`,`user_id`) values(99,10001);
insert into t_order(`amount`,`user_id`) values(88,10002);
insert into t_order(`amount`,`user_id`) values(77,10003);
insert into t_order(`amount`,`user_id`) values(66,10004);

3.20 pre引入依赖

先改变一下项目结构,给product-service和order-service加一个父模块sd-service

  • 新建一个service-demo的子模块sd-service,删掉多余文件,pom文件中打包类型为pom,并且\<modules>部分把product-service和order-service放进去
  • 删掉service-demo中的\<modules>部分中的product-service和order-service
  • 在product-service和order-service的pom文件中\<parent>设置为sd-service
  • 将product-service和order-service的模块目录,分别移动到sd-service下
  • 结构修改完成后,可以将product-service和order-service模块的共同都有的依赖移动到sd-service,比如nacos,lombok,sentinel,web这些。再重新加载所有Maven工程

修改完成后结构如下

3.2 引入依赖

在sd-service中引入依赖,product-service和order-service自动会继承

xml 复制代码
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

<!--2.7.8版本mysql-connector-java -> com.mysql:mysql-connector-j 并删除 mysql-connector-java 依赖管理-->
        <!--mysql-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId> 
        </dependency>

3.3 bootstrap.yml配置mybatisplus

yml 复制代码
# 数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.200.131:3306/sd?serverTimezone=GMT%2B8
    username: root
    password: root

# mybatisplus配置
mybatis-plus:
  # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml
  # 以下配置均有默认值,可以不设置
  #  global-config:
  #    db-config:
  #      #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
  #      id-type: auto
  #      #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
  #      field-strategy: NOT_EMPTY
  #      #数据库类型
  #      db-type: MYSQL
  configuration:
    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
    map-underscore-to-camel-case: true
    # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
    # call-setters-on-nulls: true
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.40 pre引入service、mapper

  • product相关类的idInteger改成Long,并改相关的controller
  • 引入返回响应体类R<T>
java 复制代码
/**
 * 响应信息主体
 *
 * @author ruoyi
 */
public class R<T> implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 成功 */
    private static final int SUCCESS = 200;

    /** 失败 */
    private static final int FAIL = 500;

    private int code;

    private String msg;

    private T data;

    public static <T> R<T> ok()
    {
        return restResult(null, SUCCESS, null);
    }

    public static <T> R<T> ok(T data)
    {
        return restResult(data, SUCCESS, null);
    }

    public static <T> R<T> ok(T data, String msg)
    {
        return restResult(data, SUCCESS, msg);
    }

    public static <T> R<T> fail()
    {
        return restResult(null, FAIL, null);
    }

    public static <T> R<T> fail(String msg)
    {
        return restResult(null, FAIL, msg);
    }

    public static <T> R<T> fail(T data)
    {
        return restResult(data, FAIL, null);
    }

    public static <T> R<T> fail(T data, String msg)
    {
        return restResult(data, FAIL, msg);
    }

    public static <T> R<T> fail(int code, String msg)
    {
        return restResult(null, code, msg);
    }

    private static <T> R<T> restResult(T data, int code, String msg)
    {
        R<T> apiResult = new R<>();
        apiResult.setCode(code);
        apiResult.setData(data);
        apiResult.setMsg(msg);
        return apiResult;
    }

    public int getCode()
    {
        return code;
    }

    public void setCode(int code)
    {
        this.code = code;
    }

    public String getMsg()
    {
        return msg;
    }

    public void setMsg(String msg)
    {
        this.msg = msg;
    }

    public T getData()
    {
        return data;
    }

    public void setData(T data)
    {
        this.data = data;
    }

    public static <T> Boolean isError(R<T> ret)
    {
        return !isSuccess(ret);
    }

    public static <T> Boolean isSuccess(R<T> ret)
    {
        return R.SUCCESS == ret.getCode();
    }
}

3.4 引入实体类、service、mapper

  • com.hdl.product.pojos包新建包po
java 复制代码
@Data
@TableName("t_product")
public class Product {
    @TableId(value = "id",type = IdType.AUTO)
    Long id;

    @TableField(value = "name")
    String name;

    @TableField(value = "price")
    Integer price;
}
  • com.hdl.product包下新建包serviceservicce.impl
java 复制代码
// com.hdl.product.service包下
public interface ProductService extends IService<Product> {
}

// com.hdl.product.service.impl包下
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
}
  • com.hdl.product包下新建包mapper
java 复制代码
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}

四、测试

修改controller

java 复制代码
    @GetMapping("/testmp")
    public R testmp(){
        List<Product> list = productService.list();
        return R.ok(list);
    }

测试

控制台打印出了日志

目录结构

五、wrapper,分页相关语法

Springboot集成MybatisPlus以及常用语句、分页

相关推荐
AlienZHOU2 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
李昊哲小课5 小时前
Spring Boot SSE 实时推送教程
spring boot·websocket·flux·sseemitter
狗头大军之江苏分军5 小时前
《潮水漫过十七岁》开学了
后端
苏三说技术5 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong6 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno7046 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc6 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
aramae7 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
行百里er8 小时前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring cloud·监控
IT_陈寒8 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端