Spring Boot项目集成Mybatis-Plus

发布时间:2023年12月20日

在现代软件开发中,Spring Boot的简洁性和Mybatis的灵活性已经赢得了开发者的广泛喜爱。但是,当你想要进一步提升数据操作的效率和简化代码时,Mybatis-Plus(简称MP)无疑是你的首选。Mybatis-Plus作为Mybatis的增强工具,它不仅继承了Mybatis的所有特性,还通过自动代码生成、条件构造器等功能,让数据访问层(DAO)的开发变得更加高效、便捷。

引言

在传统的Spring Boot和Mybatis组合中,我们经常需要编写大量的模板代码,包括实体类、Mapper接口以及XML文件。Mybatis-Plus的出现极大地简化了这一流程,它提供了强大的代码生成器,可以帮助我们自动生成这些代码,并且提供了更为丰富的API来简化数据库操作。

Mybatis-Plus简介

Mybatis-Plus是一款Mybatis的增强工具,在Mybatis的基础上仅增加少量配置即可快速使用。它提供了如下特性:

  • 无侵入:只做增强不做改变,引入它不会影响你当前的项目。
  • 损耗小:启动即会自动注入基本CRUD,性能基本无损耗。
  • 强大的CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现复杂的CRUD操作。
  • 支持Lambda表达式:内置Lambda表达式简化编程。
  • 支持ActiveRecord模式:支持ActiveRecord形式的操作,实体类只需继承Model类即可进行强大的CRUD操作。
  • 代码生成:采用代码或者Maven插件可快速生成Mapper、Model、Service、Controller层代码,增加开发效率。
  • 条件构造器:用于生成复杂的sql语句,使写sql语句简单化。

集成Mybatis-Plus的步骤

环境准备

首先确保你的开发环境中已经安装了Java和Maven,并且你的IDE支持Spring Boot项目。

依赖配置

在你的pom.xml中加入Mybatis-Plus的依赖:

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <!-- Mybatis-Plus Starter -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.x.x</version>
    </dependency>
    
    <!-- 数据库驱动 -->
    <dependency>
        <groupId>com.mysql.cj.jdbc.Driver</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.x.x</version>
    </dependency>
</dependencies>

配置数据源

application.propertiesapplication.yml中配置你的数据源信息:

spring.datasource.url=jdbc:mysql://localhost:3306/your_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

启用Mybatis-Plus

在你的Spring Boot启动类上添加@MapperScan注解,扫描你的Mapper文件:

@SpringBootApplication
@MapperScan("com.yourpackage.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

实体类和Mapper接口

定义你的实体类,并使用Mybatis-Plus提供的注解:

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

创建对应的Mapper接口:

public interface UserMapper extends BaseMapper<User> {
    // 所有的CRUD操作已经编写完成
}

服务层和控制层

服务层可以直接注入Mapper使用,也可以通过继承ServiceImpl来使用通用的服务实现:

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public List<User> findAll() {
        return list();
    }
}

控制层调用服务层的方法:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public List<User> listUsers() {
        return userService.findAll();
    }
}

测试

编写测试用例来验证集成是否成功:

@SpringBootTest
public class MybatisPlusIntegrationTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        Assert.assertEquals(5, userList.size());
        userList.forEach(System.out::println);
    }
}

高级特性

代码生成器

Mybatis-Plus提供了强大的代码生成器,可以帮助你快速生成Entity、Mapper、Service和Controller代码:

AutoGenerator mpg = new AutoGenerator();

// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("author");
gc.setOpen(false);
gc.setFileOverride(true);
mpg.setGlobalConfig(gc);

// ... 数据源配置、包配置等

// 执行生成
mpg.execute();

条件构造器

使用条件构造器可以构建复杂的查询:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);

逻辑删除

在你的实体类字段上使用@TableLogic注解来启用逻辑删除:

@TableLogic
private Integer deleted;

总结

通过集成Mybatis-Plus,我们可以极大地提升Spring Boot项目开发的效率,简化数据层代码的编写。本文提供了一个从零开始集成Mybatis-Plus的详细指南,希望能够帮助你在项目开发中更加得心应手。

👉 💐🌸?公众号请关注 "果酱桑", 一起学习,一起进步!?🌸💐

文章来源:https://blog.csdn.net/jam_yin/article/details/135114667
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。