SpringBoot系列之集成MybatisPlus *** 作指南

SpringBoot系列之集成MybatisPlus *** 作指南,第1张

SpringBoot系列之集成MybatisPlus *** 作指南 1、什么是mybatisPlus?

MyBatis-Plus ,引用官网的说法:

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2、创建MybatisPlus项目

开发环境

  • JDK 1.8
  • SpringBoot2.2.1
  • Maven 3.2+
  • Mysql5.7.36
  • 开发工具
    • IntelliJ IDEA
    • smartGit

使用阿里的脚手架,链接:https://start.aliyun.com


选择mybatis plus framework

新建application.yml,加上配置

mybatis-plus:
  type-aliases-package: com.example.mybatisplus.*.*.model
  mapper-locations: classpath*:mapper
@Data
public class ResultBean {

	
	private int status;
	
	private String desc;
	
	private T data;

	public ResultBean(int status, String desc, T data) {
		this.status = status;
		this.desc = desc;
		this.data = data;
	}

	public ResultBean(T data) {
		this.status = HttpStatus.OK.value();
		this.desc = "处理成功";
		this.data = data;
	}

	public static  ResultBean ok(T data) {
		return new ResultBean(data);
	}

	public static  ResultBean ok() {
		return new ResultBean(null);
	}

	public static  ResultBean badRequest(String desc,T data) {
		return new ResultBean(HttpStatus.BAD_REQUEST.value(), desc, data);
	}

	public static  ResultBean badRequest(String desc) {
		return new ResultBean(HttpStatus.BAD_REQUEST.value(), desc, null);
	}

	public static  ResultBean serverError(String desc, T data){
		return new ResultBean(HttpStatus.INTERNAL_SERVER_ERROR.value(),"服务器内部异常:"+desc,data);
	}

	public static  ResultBean serverError(String desc){
		return new ResultBean(HttpStatus.INTERNAL_SERVER_ERROR.value(),"服务器内部异常:"+desc,null);
	}

}

    com.baomidou
    dynamic-datasource-spring-boot-starter
    3.4.1

4、多数据源配置

pom加上配置:


    com.baomidou
    mybatis-plus-boot-starter-test
    3.4.3.4

多数据源,参考官网

spring:
  datasource:
    dynamic:
      primary: shop #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        shop:
          url: jdbc:mysql://127.0.0.1:3306/shop?useUnicode=true&characterEncoding=utf-8
          username: root
          password:
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
          schema: classpath:db/schema-mysql.sql
          data: classpath:db/data-mysql.sql
        slave_1:
          url: jdbc:mysql://127.0.0.1:3306/canaltest?useUnicode=true&characterEncoding=utf-8
          username: root
          password:
          driver-class-name: com.mysql.jdbc.Driver

表格来自官网:

package com.example.mybatisplus.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.baseMapper;
import com.example.mybatisplus.model.User;

@DS(value = "shop")
public interface UserMapper extends baseMapper{

}

有些版本可能可能会出现异常:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

这种情况,可以排查数据源的自动配置

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
5、MybatisPlus测试

pom配置:


    com.baomidou
    mybatis-plus-boot-starter-test
    3.4.3.4

测试类:

package com.example.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.test.autoconfigure.MybatisPlusTest;
import com.example.mybatisplus.mapper.UserMapper;
import com.example.mybatisplus.model.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@MybatisPlusTest
class MybatisPlusSampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    void test() {
        List userList = userMapper.selectList(new QueryWrapper());
        userList.stream().forEach(System.out::println);
    }
}

6、和Lambda表达式的妙用

mybatisPlus支持Lambda表示式,单表查询的业务一遍用不上,还是给下具体的业务场景:列举电商spu和sku的例子,spu表和sku表有一张关联表,传入一个spuCode,查询对应的spu清单,具体sql

SELECT
	* 
FROM
	t_sku sku
	LEFT JOIN t_spu_sku_relate r ON sku.skuCode = r.skuCode 
WHERe
	r.spuCode = #{spuCode};

先查出关联表数据,然后再查具体的业务表,可以使用LambdaQueryWrapper表达式

String spucode = "123456";
final List list = new ArrayList();
relationMapper.selectList(new LambdaQueryWrapper()
                .eq(SkuSpuRelationBean::getSpuCode, spuCode)).forEach(
                relation ->
                        list.add(
                          skuMapper.selectById(relation.getSkuCode()))
        );

再给一个例子,使用了in,然后再嵌套一条sql的:

SELECT
	* 
FROM
	t_sku sku 
WHERe
	sku.skuCode IN (
	SELECt
		skuCode form t_spu_sku_relate 
WHERe
	spu_code = '123456');

使用LambdaQueryWrapper加上inSql来实现:

LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
        queryWrapper.inSql(SkuBean::getSkuCode,
                "SELECT SKU_CODE FROM T_SKU_SPU_RELATE WHERe SPU_CODE = '123456'");
List skus = skuDao.selectList(queryWrapper);

本博客代码例子,可以在github找到下载链接

博客参考资料

MybatisPlus官方文档:https://baomidou.com/pages/24112f/

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5693102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存