MyBatis是一个数据库持久层框架,采用ORM架构,映射实体和数据库,对JDBC进行封装,支持定制化SQL、存储过程以及高级映射,使得开发者只需关注SQL语句本身,而不需要处理驱动加载、创建和管理连接等复杂的过程。

 

MyBatis通过xml或注解的方式将要执行的操作配置起来,并通过Java对象和SQL动态参数映射,生成要执行的SQL语句,MyBatis框架执行后将结果映射为Java对象返回。

 

MyBatis Plus对MyBatis进一步增强、简化开发和提高效率。本文分享MyBatis Plus和代码生成器的集成方法,并封装一个测试接口。


代码文件

功能要点

SpringBoot集成MyBatis, MyBatisPlus

pom.xml

引入MyBatis和MyBatis Plus依赖:mybatis-spring-boot-starter, mybatis-plus-boot-starter, mybatis-plus-generator

application.yml

配置数据源

代码生成工具

MyBatisPlusGenerator.java

MyBatis Plus提供了易用高效的代码生成工具,配置路径和包名称。

生成代码文件

entity, mapper, service

继承基类BaseMapper和IService封装的CRUD功能函数

单元测试

MapperTest.java, ServiceTest.java

测试CRUD操作

功能调用

CheckController.java

增加REST接口/chk/db,测试数据库读写功能

 

代码

Github下载:https://github.com/jextop/StarterApi/

MyBatis-Plus官网:https://mybatis.plus/guide/

 

SpringBoot集成MyBatis和MyBatisPlus

1. 新建SpringBoot项目时,选中MyBatis,将自动添加MyBatis依赖。

 Spring集成MyBatis和代码生成工具_第1张图片

2. pom.xml中添加MyBatis Plus和Generator依赖。注意运行代码生成工具时,需要一个页面模板库,示例使用freemarker。


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.1


    com.baomidou
    
mybatis-plus-boot-starter
    3.3.0


    com.baomidou
    mybatis-plus-generator
    3.3.0


    org.springframework.boot
    spring-boot-starter-freemarker

3. application.yml中配置数据源:

spring:
  
datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    
url: jdbc:mysql://127.0.0.1:3306/starter?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
    
username: root
    
password: root

 

配置和运行代码生成工具

1. MyBatis Plus提供了一个功能强大的代码生成工具AutoGenerator,在代码中修改文件路径和包名称:MyBatisPlusGenerator.java

2. 注意StrategyConfig.setEntityLombokModel(),Lombok默认为打开模式,建议设置为false,由于lombok对代码侵入程度较大并且依赖IDE插件,谨慎使用。

3. 运行MyBatisPlusGenerator.main(),生成器可以放在一个独立的项目中。

4. 生成entity, mapper和service,继承基类BaseMapper和IService封装的CRUD功能函数。

 Spring集成MyBatis和代码生成工具_第2张图片

测试Mapper和Service的功能函数:

@SpringBootTest
public class LogServiceTest {
    @Autowired
    LogServiceImpl logService;

    @Test
    public void testSave() {
        boolean ret = logService.save(new Log() {{
            setSummary(String.
format("service: %s", new Date()));
        }});

        LogUtil.
info(ret);
        Assertions.
assertTrue(ret);
    }

    @Test
    public void testList() {
        List ret = logService.list(new QueryWrapper()
                .orderByDesc("id")
                .last(true, "limit 2")
        );

        ret.forEach(LogUtil::
info);
        Assertions.
assertFalse(ret.isEmpty());
    }
}

 

功能调用

1. 增加RestController:CheckController.java

2. 增加REST接口/chk/db,调用mapper读写数据库

@GetMapping(value = "/chk/db")
public Object db(@RequestAttribute(required = false) String ip) {
    // Write a log to db
    Log log = new Log() {{
        setSummary(String.
format("db_test_%s_%s_数据库", ip, new Date()));
    }};
    logMapper.insert(log);

    // Read log from db
    Log ret = logMapper.selectOne(new QueryWrapper()
            .orderByDesc("id")
            .eq("summary", log.getSummary())
    );
    Integer count = logMapper.selectCount(null);

    return new HashMap() {{
        put("chk", "db");
        put("msg", log.getSummary());
        put("status", log.getSummary().equals(ret.getSummary()));
        put("count", count);
    }};
}

 

REST接口调用数据库读写功能示例

Spring集成MyBatis和代码生成工具_第3张图片