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
springboot集成Mybatis-plus_第1张图片

集成Mybatis-plus

一、引入依赖

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

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

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



<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 {
}

目录层级如下
springboot集成Mybatis-plus_第2张图片

四、校验是否集成成功

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

  1. 确保已经引入了spring的单元测试依赖
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        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);
    }
}

点击运行,看看能不能把数据查出来,如果你看到下图,说明已经集成成功了
springboot集成Mybatis-plus_第3张图片

去除Mapper的警告

    @Autowired
    ProductInfoMapper productInfoMapper;

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

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

你可能感兴趣的:(一步到位springboot)