Springoot 整合 MyBatisPlus

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 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的基本使用步骤

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
安全 数据库连接 数据安全/隐私保护
内存泄漏是什么?有什么危害
内存泄漏是什么?有什么危害
540 0
|
Ubuntu Linux Shell
ubuntu的学习与总结
在Ubuntu的学习中,了解了Linux的文件系统结构,所有内容都从根目录/开始,没有像Windows那样的盘符。
260 0
|
机器学习/深度学习 人工智能 数据可视化
什么是条件生成对抗性网络?
什么是条件生成对抗性网络?
431 0
|
数据库 Android开发 开发者
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
555 0
R语言分布滞后线性和非线性模型DLM和DLNM建模应用| 系列文章
R语言分布滞后线性和非线性模型DLM和DLNM建模应用| 系列文章
|
机器学习/深度学习 传感器 算法
【机器学习】多元线性回归基本概念
【1月更文挑战第23天】【机器学习】多元线性回归基本概念
|
应用服务中间件 程序员 数据库
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(3)
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(3)
197 0
|
弹性计算 开发者
阿里云弹性计算经济型e实例火爆发布!
性价比首选,特惠云服务器,个人开发者、学生、小微企业大众的福音燃情上线啦!价格低至0.5元/天!!! 全用户群低价首选,续费不涨价!!
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless技术原理解读
数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。 本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。
76550 18
PolarDB PostgreSQL版Serverless技术原理解读
|
存储 运维 Cloud Native
数据库的未来发展趋势
【8月更文挑战第27天】数据库的未来发展趋势
685 4