springboot-MyBatis-Plus整合避坑(简单入门

2021-01-18  本文已影响0人  nicohuhu
第一步:导入依赖

除了核心配置mybatis-plus-boot-starter,其它为启动测试要用的依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
第二步:配置yml

同上,这里先配置项目启动测试的项,关于mybatis-plus先不做配置看能不能使用,后面用到时再做配置

server:
  port: 8088
spring:
  application:
    name: your-service-name
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:your database}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
    username: ${MYSQL-USER:root}
    password: ${MYSQL-PWD:root}
第三步:配置启动类
@MapperScan(basePackages = "com.nico.mybatisplus.mapper")
@SpringBootApplication
public class MyMybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyMybatisPlusApplication.class,args);
    }
}

当然这里可以不配置@MapperScan直接在下面列出的CastMenuConfigMapper 接口上配置@Mapper也是可以的,注意这里要继承BaseMapper

@Mapper
public interface CastMenuConfigMapper extends BaseMapper<CastMenuConfig> {

    CastMenuConfig findById(String id);
}

第四步:准备测试
前提保证数据库连接正常,数据表已经提前创建,这里我贴出实体类

public class CastMenuConfig implements Serializable {


    @TableId(type = IdType.ID_WORKER)
    private Long id;                    //主键

    private String menuName;            //菜单名称

    private int menuType;               //菜单类型

    private int menuSort;               //菜单顺序

    private String menuContent;         //菜单页的内容


//get set此处省略。。。

    @Override
    public String toString() {
        return "CastMenuConfig{" +
                "id=" + id +
                ", liveBasicId=" + liveBasicId +
                ", menuName='" + menuName + '\'' +
                ", menuType=" + menuType +
                ", menuSort=" + menuSort +
                ", menuContent='" + menuContent + '\'' +
                '}';
    }
}

这个实体类看起来很干净,除了id上的注解,没有太多冗余的注解,再看一下数据库

image

同样看一下项目结构


图片.png

测试类生成


image image

看一下测试类的测试方法,先定义两个,selectById是BaseMapper提供的接口,可以直接调用,同样selectOne也一样,只不过定义的入参是QueryWrapper这个给我们提供的条件构造器,顾名思义就是帮我们构造条件的,把所有条件参数扔进这个类就行了


图片.png
第五步:进入测试

分别点击测试selectById、selectOne


图片.png

查看输出相同的结果

图片.png

好的,现在使用mybatis-plus提供的接口增删改查是没问题,当然它也兼容xml的方式以及注解的方式编写sql,我们试试看,现在可以配置一下mybatis-plus的yml配置

mybatis-plus:
  #使用xml方式编写复杂sql时 必须配置不然无法启动
  mapper-locations: classpath:mapper/*.xml
  #使用xml方式编写复杂sql时 必须配置不然找不到resultType指定的返回的实体类型 或者在xml文件里写实体类全路径也可以 不然无法启动
  type-aliases-package: com.nico.mybatisplus.entity

看看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.nico.mybatisplus.mapper.CastMenuConfigMapper">

    <select id="findById" parameterType="String" resultType="CastMenuConfig">
           select * from cast_menu_config where id=#{id}
        </select>
    <select id="findAll" parameterType="String" resultType="CastMenuConfig">
           select * from cast_menu_config
        </select>
</mapper>

我们开始测试


图片.png

查看结果测试通过没有问题


图片.png

这里对比通用tk-mapper的使用方式,mybatis-plus不需要通过注解来映射实体与数据库字段就可以自动匹配,如果匹配不上就使用默认值null或0,也不需要在yml配置map-underscore-to-camel-case: true驼峰匹配规则

第六步:分页

使用分页助手PageHelper

@Test
    void findPage() {
        PageHelper.startPage(1,1);

        List<CastMenuConfig> castMenuConfigList = castMenuConfigMapper.findAll();

        PageInfo<CastMenuConfig> castMenuConfigPageInfo = new PageInfo<>(castMenuConfigList);

        castMenuConfigPageInfo.getList().forEach(item->System.out.println("查询结果:"+item));
    }

查看结果没问题


图片.png

使用mybatis-plus自带的分页接口IPage

 @Test
    void findPagePlus() {
        IPage castMenuConfigList = castMenuConfigMapper.selectPage(new Page(1, 1),new QueryWrapper<>());
        castMenuConfigList.getRecords().forEach(item->System.out.println("查询结果:"+item));
    }

查看结果发现没有进行分页


图片.png

原因是我漏了一个mybatis-plus官方提供的配置类,参考官方:https://baomidou.com/guide/page.html

//Spring boot方式
@Configuration
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

以xml的方式写sql的分页

    @Test
    void findPageByXml() {
        IPage<CastMenuConfig> castMenuConfigList = castMenuConfigMapper.selectPageVo(new Page(1, 1));
        System.out.println("总页数:"+castMenuConfigList.getPages());
        System.out.println("总记录数:"+castMenuConfigList.getTotal());
        castMenuConfigList.getRecords().forEach(item->System.out.println("查询结果:"+item));
    }

mapper接口是这样的


图片.png

xml里的sql是这样的


图片.png

测试,查看结果同样是没问题


图片.png
第七步:打印sql日志

application.yml是这样配置

logging:
  level:
    com:
      nico:
        mybatisplus:
          mapper: debug

bootstrap.yml是这样配置

logging:
  #打印sql日志
  level:
    com.nico.mybatisplus.mapper: debug

还有这种

mybatis-plus:
  configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

其他注解使用参考上面给出的官方文档,或者其他博客https://www.jianshu.com/p/1a163148b078

上一篇下一篇

猜你喜欢

热点阅读