Springoot 整合 MyBatisPlus

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SpringBoot 整合 MyBatisPlus 的基本步骤,以及MyBatisPlus的基本使用步骤

基本配置

导入依赖 < 使用lombok记得下载lombok插件 >

        <!-- MyBatisPlus启动器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <!-- MySQL 驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--lombok用于简化实体类开发-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

配置数据源

spring:
  datasource:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/databaseName?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=GMT%2B8
      username: root
      password: root

创建实体类,其中的 @TableName("tab_book")中传入数据库表的表名,做实体类和表的映射

还用很多实体类注解,可以参考我的另外一篇博客,地址如下

[MyBatisPlus - 实体类 的 常用注解]

@TableName("tab_book")
@Data
public class Book {
    private Integer id;
    private String name;
    private String type;
    private String description;
}

创建Dao接口,区别于MyBatis -- 在Dao内部不用写方法,直接继承BassMapper,泛型中传入Book实体类

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

查看BaseMapper源码,发现BaseMapper已经帮我们实现了很多方法,覆盖基本的增删改查

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

    T selectOne(@Param("ew") Wrapper<T> queryWrapper);

    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);

    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

接下来就可以在SpringBoot的测试类中测试使用

@SpringBootTest
class SpringBootProjectApplicationTests {

    @Autowired
    private BookDao bookDao;
    @Test
    void testSave() {
        Book book = new Book();
        book.setId(1);
        book.setName("测试数据");
        book.setType("测试类型");
        book.setDescription("测试描述数据");
        bookDao.insert(book);
    }
    @Test
    void testGetById() {
        System.out.println(bookDao.selectById(1));
    }

}

先运行 testSave ,再运行 testGetById ,输出如下

Book(id=1, name=测试数据, type=测试类型, description=测试描述数据)

到这一步最简单的MyBatisPlus整合就完成了,接下来做更深入的学习

MyBatisPlus加入日志功能(控制台输出)

再配置文件中添加

#配置mybatisPlus日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

再次执行 testGetById 输出的日志结果如下:

JDBC Connection [HikariProxyConnection@475157807 wrapping com.mysql.cj.jdbc.ConnectionImpl@5dc769f9] will not be managed by Spring
==>  Preparing: SELECT id,name,type,description FROM tab_book WHERE id=?
==> Parameters: 1(Integer)
<==    Columns: id, name, type, description
<==        Row: 1, 测试数据, 测试类型, 测试描述数据
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49cb1baf]

通用Service接口

MyBatisPlus不仅为我们提供了通用的Dao接口(BaseMapper)

还提供了通用Service接口 -- IService

创建Service接口,继承了IService接口,泛型传入实体类

public interface BookService extends IService<Book> {  
}

创建 ServiceImpl实现类,继承ServiceImpl父类 <其中传入的第一个泛型是Dao接口,第二个是实体类>,并实现 BookService

@Service
public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements BookService {
}

以下是IService中的部分较为常用的方法,我们发现,方法名和sql的对应关系如下

  • delete - > remove
  • update- > update
  • select- > get
  • insert- > save
    default boolean removeById(Serializable id) {
        return SqlHelper.retBool(this.getBaseMapper().deleteById(id));
    }
    
    default boolean updateById(T entity) {
        return SqlHelper.retBool(this.getBaseMapper().updateById(entity));
    }
 
    default T getById(Serializable id) {
        return this.getBaseMapper().selectById(id);
    }  

    default boolean save(T entity) {
        return SqlHelper.retBool(this.getBaseMapper().insert(entity));
    }

改写Springboot测试类,如下

@SpringBootTest
class SpringBootProjectApplicationTests {

    @Autowired
    private BookService bookService;

    @Test
    void testGetById() {
        System.out.println(bookService.getById(1));
    }

}

结果同样能查询出 id 为 1 的书本数据

条件构造器

在实际开发场景中,经常会出现如下情况

select * from tab_book where name='书名1' or type='类型01';

我们再看

BaseMapper 中的查询方法 List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

IService 中的查询方法 T getOne(Wrapper<T> queryWrapper, boolean throwEx);

其中都有一个参数 Wrapper queryWrapper

我们可以联想到 ,我们需要将查询条件封装在 Wrapper 的对象中,才能进行条件查询,这个 Wrapper 对象就是 条件构造器

关于条件构造器可以参考我的另外一篇博客,地址如下:

[MyBatisPlus 之 条件查询 <条件构造器>]
以上就是SpringBoot 整合 MyBatisPlus 的基本步骤,以及MyBatisPlus的基本使用步骤

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
SQL 测试技术 数据库
一篇文章带你学会MybatisPlus~(三)
一篇文章带你学会MybatisPlus~
|
6月前
|
Java 数据库连接 mybatis
MybatisPlus(1)
MybatisPlus(1)
86 0
MybatisPlus(1)
|
6月前
|
Java 测试技术 数据库连接
【MyBatisPlus】MyBatisPlus 整合开发
【1月更文挑战第19天】【MyBatisPlus】MyBatisPlus 整合开发
|
SQL Java 数据库连接
MyBatisPlus简单入门
MyBatisPlus简单入门
|
6月前
|
SQL 监控 数据库
MybatisPlus入门(下)
MybatisPlus入门教程中介绍了如何使用拦截器和性能分析插件。配置拦截器只需添加`PaginationInterceptor`,测试分页查询显示底层使用了`limit`。逻辑删除功能通过`TableLogic`注解和`LogicSqlInjector`实现,性能分析插件`PerformanceInterceptor`用于监控SQL执行时间,超过设定值会抛出异常。条件构造器如`QueryWrapper`提供便捷的查询条件设置,支持多种比较操作。
|
6月前
|
存储 算法 Java
一篇文章带你学会MybatisPlus~(二)
一篇文章带你学会MybatisPlus~
240 0
|
6月前
|
SQL Java 数据库连接
一篇文章带你学会MybatisPlus~(一)
一篇文章带你学会MybatisPlus~
|
6月前
|
Java 数据库连接 数据库
MybatisPlus(3)
MybatisPlus(3)
74 0
MybatisPlus(3)
|
6月前
|
算法 数据库 SQL
MybatisPlus(4)
MybatisPlus(4)
70 0
MybatisPlus(4)
|
6月前
|
XML SQL Java
MybatisPlus(2)
MybatisPlus(2)
83 0
MybatisPlus(2)