前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

作者头像
朝雾轻寒
发布于 2020-02-19 05:57:57
发布于 2020-02-19 05:57:57
82500
代码可运行
举报
运行总次数:0
代码可运行

前言

之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式;虽然注解方式干掉了 xml 文件,但是使用起来并不优雅,本文将介绍 mybats-plus 的常用实例,简化常规的 CRUD 操作。

mybatis-plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

学习 mybatis-plus:https://mp.baomidou.com/guide

常用实例

1. 项目搭建

1.1 pom.xml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 热部署模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>
1.2 application.yaml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# spring setting
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: zwqh@0258
1.3 实体类 UserEntity
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@TableName(value="t_user")
public class UserEntity {

    @TableId(value="id",type=IdType.AUTO)
    private Long id;
    private String userName;
    private String userSex;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserSex() {
        return userSex;
    }
    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

}

@TableName 指定数据库表名,否则默认查询表会指向 user_entity ;@TableId(value=”id”,type=IdType.AUTO) 指定数据库主键,否则会报错。

1.4 Dao层 UserDao

继承 BaseMapper,T表示对应实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface UserDao extends BaseMapper<UserEntity>{

}
1.5 启动类

在启动类添加 @MapperScan 就不用再 UserDao 上用 @Mapper 注解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@MapperScan("cn.zwqh.springboot.dao")
public class SpringBootMybatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisPlusApplication.class, args);
    }

}
1.6 分页插件配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class MybatisPlusConfig {
     /**
     *   mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor page = new PaginationInterceptor();
        page.setDialectType("mysql");
        return page;
    }

}

2.示例

2.1 新增
新增用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user=new UserEntity();
user.setUserName("朝雾轻寒");
user.setUserSex("男");
userDao.insert(user);
2.2 修改
根据id修改用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user=new UserEntity();
user.setUserName("朝雾轻晓");
user.setUserSex("男");
user.setId(25L);
userDao.updateById(user);
根据entity条件修改用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user=new UserEntity();
user.setUserSex("女");
userDao.update(user,new QueryWrapper<UserEntity>().eq("user_name", "朝雾轻寒"));
2.3 查询
根据id查询用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user = userDao.selectById(id);
根据entity条件查询总记录数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int count = userDao.selectCount(new QueryWrapper<UserEntity>().eq("user_sex", "男"));
根据 entity 条件,查询一条记录,返回的是实体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
        UserEntity user=new UserEntity();
        user.setUserName("朝雾轻寒");
        user.setUserSex("男");
        queryWrapper.setEntity(user);
user = userDao.selectOne(queryWrapper);

如果表内有两条或以上的相同数据则会报错,可以用来判断某类数据是否已存在 根据entity条件查询返回第一个字段的值(返回id列表)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
        UserEntity user=new UserEntity();
        user.setUserSex("男");
        queryWrapper.setEntity(user);
List<Object> objs= userDao.selectObjs(queryWrapper);
根据map条件查询返回多条数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_name", username);
        map.put("user_sex",sex);
List<UserEntity> list = userDao.selectByMap(map);
根据entity条件查询返回多条数据(List)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_sex","男");
List<UserEntity> list = userDao.selectList(new QueryWrapper<UserEntity>().allEq(map));
根据entity条件查询返回多条数据(List<map> )</map
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_sex","男");
List<Map<String, Object>> list = userDao.selectMaps(new QueryWrapper<UserEntity>().allEq(map));
根据ID批量查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Long> ids=new ArrayList<Long>();
        ids.add(1L);
        ids.add(2L);
        ids.add(3L);
List<UserEntity> list = userDao.selectBatchIds(ids);

主键ID列表(不能为 null 以及 empty)

分页查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page<UserEntity> page=userDao.selectPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page<Map<String, Object>> page=userDao.selectMapsPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));

需先配置分页插件bean,否则分页无效。如有pagehelper需先去除,以免冲突。 new Page<>(1,5),1表示当前页,5表示页面大小。

2.4 删除
根据id删除用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
userDao.deleteById(1);
根据entity条件删除用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
userDao.delete(new QueryWrapper<UserEntity>().eq("id", 1));
根据map条件删除用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_name", "zwqh");
        map.put("user_sex","男");
        userDao.deleteByMap(map);
根据ID批量删除
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Long> ids=new ArrayList<Long>();
        ids.add(1L);
        ids.add(2L);
        ids.add(3L);
        userDao.deleteBatchIds(ids);

主键ID列表(不能为 null 以及 empty)

小结

本文介绍了 mybatis-plus 相关的 Mapper层 CRUD 接口实现,其还提供了 Service层 CRUD 的相关接口,有兴趣的小伙伴可以去使用下。mybatis-plus 真正地提升了撸码效率。

其他学习要点:

  1. mybatis-plus 条件构造器
  2. lamda 表达式
  3. 常用注解

学习地址:https://mp.baomidou.com/guide/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 朝雾轻寒的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot 2.X(五):MyBatis 多数据源配置
MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度。本文直接以简单的代码示例,如何对 MyBatis 多数据源配置。
朝雾轻寒
2019/10/18
7860
Spring Boot 2.X(五):MyBatis 多数据源配置
Mybatis-Plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
OY
2022/03/17
1.1K0
Mybatis-Plus
Spring Boot 2.X(二):集成 MyBatis 数据层开发
MyBatis 是一款优秀的持久层框架,支持定制化 SQL、存储过程以及高级映射。它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简单。它支持 XML 描述符配置文件和注解两种方式执行 SQL 语句。“简单灵活”是它在对象关系映射工具上的最大优势。
朝雾轻寒
2019/10/18
4790
springboot(六):如何优雅的使用mybatis
这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料,各种各样的形式都有,看的人心累,结合了mybatis的官方demo和文档终于找到了最简的两种模式,花了一天时间总结后分享出来。 orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sq
纯洁的微笑
2018/04/19
1.4K0
Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中。本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot + Spring MVC + MyBatis (SSM)+ Thymeleaf(模板引擎) 框架来简单快速构建一个 Web 项目。
朝雾轻寒
2019/10/18
1.4K1
Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
Spring Boot 2.X(七):Spring Cache 使用
Spring Cache 提供了 @Cacheable 、@CachePut 、@CacheEvict 、@Caching 等注解,在方法上使用。通过注解 Cache 可以实现类似事务一样、缓存逻辑透明的应用到我们的业务代码上,且只需要更少的代码。 核心思想:当我们调用一个方法时会把该方法的参数和返回结果最为一个键值对存放在缓存中,等下次利用同样的参数来调用该方法时将不会再执行,而是直接从缓存中获取结果进行返回。
朝雾轻寒
2019/10/18
9710
Spring Boot(四)Mybatis-Pus
如果已经配置了逻辑删除,那么实际上的删除操作就是将字段deleted变成1,其实实际并未删除该数据,但是相应的在更新查询操作中也会自动带上deleted=0的才能操作,这些逻辑删除可以防止数据误删,以后可以一键删除delete=1的数据
HcodeBlogger
2020/07/14
5010
Mybatis-plus 下
上图可以看出,他会查询deleted字段为0为前提的数据,如果被逻辑删除过的数据,deleted字段为1,查询不到。
张小驰出没
2021/04/19
3500
Mybatis-plus 下
肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
现在越来越流行基于 SpringBoot 开发 Web 应用,其中利用 Mybatis 作为数据库 CRUD 操作已成为主流。楼主以 MySQL 为例,总结了九大类使用 Mybatis 操作数据库 SQL 小技巧分享给大家。
猿芯
2021/05/27
2.6K0
肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
springboot之mybatis
Orm 框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句 Sql 的 Hibernate,一个是可以灵活调试动态 Sql 的 Mybatis ,两者各有特点,在企业级系统开发中可以根据需求灵活使用。发现一个有趣的现象:传统企业大都喜欢使用 Hibernate ,互联网行业通常使用 Mybatis 。
Vincent-yuan
2020/10/27
3690
Spring Boot 2.X(十五):集成 Swagger2 开发 API 文档(在线+离线)
相信很多后端开发在项目中都会碰到要写 api 文档,不管是给前端、移动端等提供更好的对接,还是以后为了以后交接方便,都会要求写 api 文档。
朝雾轻寒
2019/11/07
2.4K0
MyBatis-Plus 快速开始及详测 SpringBoot 集成Mybatis-Plus
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
宁在春
2022/10/31
6070
MyBatis-Plus  快速开始及详测 SpringBoot 集成Mybatis-Plus
Mybatis-Plus学习.,简化你的开发,提升开发效率.
Mybatis-Plus学习以及实践 简介 即对Mybatis进行了增强,结合了Hiberante的类型,封装了一些单表的操作,可以对进行单表的操作不需要写一些sql,直接上手开发,加快了开发效率,不过同时也会造成访问数据库的代码混杂的情况,有利有弊. 参考网址 官网文档,官方文档. 开发环境 Eclipse java8 SpringBoot + maven 开始开发 这里只是配置运行一下简单的Mybatis-plus项目,试验的对象只有一张表,完成对齐的CURD. 初始化一个SpringBoot或者复制
李家酒馆酒保
2019/10/09
8920
Mybatis-Plus常用API教程,看这一篇就够了
注意:-- 真实开发中往往都会有这四个字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)。
码神联盟
2021/11/10
9891
Mybatis-Plus常用API教程,看这一篇就够了
Spring Boot(13):解锁Mybatis-Plus条件构造器的全新玩法,Spring Boot开发再也不用愁!
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
bug菌
2023/09/14
4860
Spring Boot(13):解锁Mybatis-Plus条件构造器的全新玩法,Spring Boot开发再也不用愁!
SpringBoot集成Mybatis-Plus
概述 地址 目标:MybatisPlus,为简化Mybatis开发而生,只做增强,不做改变 简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。简单来说就是简化JDBC操作 愿景 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 image.png 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 C
框架师
2021/03/05
9K0
Mybatis-Plus使用案例(包括初始化以及常用插件)
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高
ha_lydms
2023/08/09
1.1K0
Mybatis-Plus使用案例(包括初始化以及常用插件)
SpringBoot集成mybatis配置
一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis;之所以出现这个问题感觉与对应的业务有关,比方说,互联网的业务更加的复杂,更加需要进行灵活性的处理,所以mybatis的灵活性特点更为适合其
小勇DW3
2018/09/29
2.5K0
Spring Boot(六):如何优雅的使用 Mybatis
这两天启动了一个新项目因为项目组成员一直都使用的是 Mybatis,虽然个人比较喜欢 Jpa 这种极简的模式,但是为了项目保持统一性技术选型还是定了 Mybatis 。到网上找了一下关于 Spring Boot 和 Mybatis 组合的相关资料,各种各样的形式都有,看的人心累,结合了 Mybatis 的官方 Demo 和文档终于找到了最简的两种模式,花了一天时间总结后分享出来。
纯洁的微笑
2019/05/15
5940
Mybatis-plus,真香!
mybatis相信都不陌生,目前互联网公司大部分都使用mybatis作为持久层框架,无他,因为可以直接在xml文件中编写SQL语句操作数据库,灵活。但是我们在使用的时候,也会发现有很多增删改查的SQL是每个表都会有的基本操作,如果每个表都写一套增删改查的SQL显然是非常耗时耗力的。
java技术爱好者
2021/07/12
1.3K0
Mybatis-plus,真香!
推荐阅读
相关推荐
Spring Boot 2.X(五):MyBatis 多数据源配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验