springboot集成Mybatis-plus

目录

一步到位springboot目录
gitee:https://gitee.com/chaitou/leilema.git

前言

上篇我们已经敲定ORM框架使用Mybatis-plus了,这篇我们就正式来撸。

在开撸之前再强调一遍:

  1. 本专题的代码都使用lombok,因此拉下代码后,要运行前请务必装上lombok插件,否则报错。不知道怎么装的再回顾下springboot02:准备
  2. 最好自己学习使用docker搭建一个mysql,并通过项目中/sql目录下的语句或springboot02:准备中的sql语句准备好数据库环境(当让也可以使用项目上的数据库,但是请在使用后清空生成的数据,防止影响他人的是使用)

如何集成框架

有一些初学者认为集成框架是架构师做的事情,是很牛逼很难的事情。这里我纠正一下这种同学的观点,集成框架是非常简单的事情。架构师的价值体现在对项目的把握,提出一套易于开发,易于扩展,在性能成本方面又最具性价比的解决方案。所以在这里给小白吃个定心丸,别方,无论什么集成什么框架顶多就3步

  1. 引入框架依赖,以前一如jar包,现在使用mavengredle就更简单了
  2. 写入配置,按照官方文档,将需要的配置写到项目中
  3. 使用

是的,就这么简单,接下去就手把手带大家集成一下Mybatis-plus
就这

集成Mybatis-plus

一、引入依赖

  1. 首先我们需要使用mysql数据库,所以我们需要引入mysql的驱动器依赖。
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  1. 其次要用Mybatis-plus,就需要引入其starter依赖
        <!-- mybatis-plus -->
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.3.0</version>
      </dependency>

这样写ok吗?low low low
身为一名优秀的架构师,我们是看不得这种3.3.0的,要把他写成配置,不然逼格根本上不去。以后看到写3.3.0这种数字的一定要跟他说low

    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus.version>3.3.0</mybatis-plus.version>
    </properties>
    
    <!-- mybatis-plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>${mybatis-plus.version}</version>
    </dependency>
  1. 最后再强调一遍lombok的依赖,因为entity实体层必然需要用到gettersetter(怕你们项目起不来,我可真是太卑微了,最后一次强调lombok…)
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

二、配置

  1. 配置数据源,你得告诉spring,你这数据库的地址账号密码,用的驱动是什么,不然人家怎么连的上去是吧
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://148.70.139.121:3306/leilema?useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: leilema
  1. 现在xml的配置都被去掉了,都改用注解的形式,Mybatis-plus当然也不例外了,我们新建一个MybatisPlusConfiguration配置类,等同于老springxml中写的
@EnableTransactionManagement
@MapperScan("com.bugpool.leilema.*.mapper")
@Configuration
public class MybatisPlusConfiguration {
    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

解释一下这几个注解

  • @Configuration:表明这是一个配置文件,spring应该把他当成跟xml配置文件一样进行读取,然后放入Ioc容器中
  • @EnableTransactionManagement:开启事务用的,既然要与数据库打交到,事务是不可或缺的,虽然本篇还用不着,但是先写着吧
  • @MapperScan("com.bugpool.leilema.*.mapper"):指定扫描mapper的目录,mapper就是常说的dao层。Mybatis-plus启动时会去自动扫描这些目录下的文件,并当成Mapper注入到Spring Ioc容器中,如果路径错误,必然引起service层的注入错误
  • @Bean:标识方法将返回一个Bean实例,这里返回的是分页拦截器,用于分页查询

三、使用

ProductInfo商品是单表操作,因此以它为例,我们需要建立一下层级目录,entity实体层、mapper数据访问层、service业务、service服务层、controller控制层

实体层:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ProductInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 商品主键
     */
    @TableId(value = "product_id", type = IdType.AUTO)
    private Integer productId;

    /**
     * 商品名称
     */
    private String productName;

    /**
     * 单价
     */
    private BigDecimal productPrice;

    /**
     * 描述
     */
    private String productDescription;

    /**
     * 商品状态,0正常1下架
     */
    private Integer productStatus;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 创建人
     */
    private String createUser;

    /**
     * 修改时间
     */
    private LocalDateTime updateTime;

    /**
     * 修改人
     */
    private String updateUser;

}

数据访问层:

public interface ProductInfoMapper extends BaseMapper<ProductInfo> {
}

还需要添加mapper的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bugpool.leilema.product.mapper.ProductInfoMapper">

</mapper>

服务层:

public interface ProductInfoService extends IService<ProductInfo> {
}
@Service
public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductInfoService {
}

控制层:

@RestController
@RequestMapping("/product/product-info")
public class ProductInfoController {
}

目录层级如下
在这里插入图片描述

四、校验是否集成成功

怎么校验呢?查一下数据库不就知道了,在数据库中插入一条数据,如果能查询出来遍说明集成成功了。这里我们先接触一下单元测试,不懂不要紧,只管先抄,后面专题讲解

  1. 确保已经引入了spring的单元测试依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  1. /test目录下编写单元测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductInfoMapperTest {

    @Autowired
    ProductInfoMapper productInfoMapper;

    @Test
    public void testGetById() {
        ProductInfo productInfo = productInfoMapper.selectById(1);
        System.out.println(productInfo);
        Assert.assertNotNull(productInfo);
    }
}

点击运行,看看能不能把数据查出来,如果你看到下图,说明已经集成成功了
单元测试

去除Mapper的警告

    @Autowired
    ProductInfoMapper productInfoMapper;

这句代码相信读者都看到了productInfoMapper飘红了,这是为什么呢?
主要是因为IDEA太智能了,当我们@Autowire自动注入某个类的时候,他就会自动去项目下寻找是否有@Componte@Service或者相关Bean注解的标识,如果没有,他就认为你注入的Bean不存在,提示你

回看我们的Mapper文件,确实是没有加相关依赖,因为我们使用了@MapperScan("com.bugpool.leilema.*.mapper")进行mapper扫描,然后当如到Ioc容器中,但是IDEA看不懂啊,所以他就飘红了。因此就算飘红,其实我们的代码是没有问题的,也是可以正常运行。但是看着总是心烦(如果像我这种快捷键小王子,F2快速跳转错误的操作一定会被逼死),因此我们就关闭IDEA让他别检测这个类型的错误了
去除检测
去除这个检测只会在本项目生效,其他项目不会生效,因此不用担心影响其他项目。实在处女座的同学,就是担心IDEA配置乱掉,可以到该目录进行查看IDEA检测配置
处女座同学

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值