SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

栏目: IT技术 · 发布时间: 4年前

内容简介:在使用Mybatis进行项目开发的时候,最繁琐的事情就是实体类,dao接口,mapper.xml文件的编写,几乎每个表都需要对应写一套,并且大部分的工作量都在最基本的增删改查上。如果表中的字段进行了修改,那么实体类,mapper文件甚至dao接口都要进行修改。

SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

有天上飞的概念,就要有落地的实现

  • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍
  • 先赞后看,养成习惯

SpringBoot 图文教程系列文章目录

  1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」
  2. SpringBoot图文教程2—日志的使用「logback」「log4j」
  3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
  4. SpringBoot图文教程4—SpringBoot 实现文件上传下载
  5. SpringBoot图文教程5—SpringBoot 中使用Aop
  6. SpringBoot图文教程6—SpringBoot中过滤器的使用
  7. SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有
  8. SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」
  9. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
  10. SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」

前言

在使用Mybatis进行项目开发的时候,最繁琐的事情就是实体类,dao接口,mapper.xml文件的编写,几乎每个表都需要对应写一套,并且大部分的工作量都在最基本的增删改查上。如果表中的字段进行了修改,那么实体类,mapper文件甚至dao接口都要进行修改。

SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

在之前的文章中介绍了 MBG(Mybatis 代码生成器) 的使用,今天带来更进一步的简化Mybatis开发的工具 MybatisPlus,后续还会有 通用Mapper,总有一款适合你。

MybatisPlus

MybatisPlus 可以认为一个Mybatis的外挂,用了这个技术之后 可以不写mapper文件 可以不写dao接口中的方法 然后实现增删改查 分页查询 条件查询 等等

什么是Mybatis Plus

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

在 MyBatis 的基础上只做增强不做改变

意味着 如果你导入了Mybatisplus的依赖 但是不想用Mybatisplus的方法 ,那么 不会影响到Mybatis的正常使用

官方文档: https://mp.baomidou.com/guide...

MybatisPlus的使用

集成项目

  1. 导入Mybatisplus的依赖

    注意:要首先删除Mybatis的依赖 ,因为Mybatisplus中包含有Mybatis的依赖 不需要独立导入 容易jar包冲突

    SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

<dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>3.3.1.tmp</version>
   </dependency>
  1. 修改配置文件

    SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

通过MybatisPlus实现增删改查

教程新手向,只讲解Mybatis最常用,最基本的API,更多的操作请参考官方文档

demo使用到的数据库库表如下

SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

  1. 给要数据库操作的实体类加Mybatisplus的注解

    因为Mybatisplus不需要写mapper文件 不需要写 sql 那么Mybatisplus怎么知道实体类和数据库表映射关系(ORM) 通过注解表明这种关系

/**
    * @TableName("cmfz_admin") 将当前的实体类和数据库的表建立联系
    * 注解参数:表名
    */
   @TableName("cmfz_admin")
   @Data
   public class CmfzAdmin implements Serializable {
       /**
        * 主键属性  @TableId
        *
        * value 该属性对应的数据库表中的字段名
        * type 主键自增的类型 AUTO 代表自动递增
        */
       @TableId(value = "id",type = IdType.AUTO)
       private Integer id;
       /**
        * 非主键属性  @TableField
        *  @TableField("username")  参数为该属性对应的数据库表中的字段名
        *
        */
       @TableField("username")
       private String username;
   
       @TableField("password")
       private String password;
   
   }
  1. 创建dao接口

    import com.baizhi.entity.CmfzAdmin;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    
    /**
     * 注意:
     * 1.接口中不需要写方法
*/

public interface CmfzAdminDao extends BaseMapper<CmfzAdmin> {

}

3. 直接使用Mybatisplus的方法 开始增删改查
@Test
   public void contextLoads() {

// 根据id查询

CmfzAdmin cmfzAdmin = cmfzAdminDao.selectById(1);

// System.out.println(cmfzAdmin);

// 查询所有 selectList(null);

List<CmfzAdmin> cmfzAdmins = cmfzAdminDao.selectList(null);
       for (CmfzAdmin admin : cmfzAdmins) {
           System.out.println(admin);
       }
   }

   /**
    * 添加
    */
   @Test
   public void test1(){

// 创建一个对象

CmfzAdmin cmfzAdmin = new CmfzAdmin();
       cmfzAdmin.setUsername("hhhh");
       cmfzAdmin.setPassword("123456");

// 添加 返回值是成功的条数

int insert = cmfzAdminDao.insert(cmfzAdmin);
       System.out.println(insert);
   }

   /**
    * 将id为5的管理员名字修改为lisi
    */
   @Test
   public void test2(){
       CmfzAdmin cmfzAdmin = new CmfzAdmin();
       cmfzAdmin.setId(5);
       cmfzAdmin.setUsername("lisi");

// 根据id更新数据

int i = cmfzAdminDao.updateById(cmfzAdmin);

// 删除

/**
        * deleteById() 根据id删除
        * deleteBatchIds() 批量删除 参数是要删除的id的集合
        */
       
   }
#### 实现条件查询 (条件构造器的使用)

/**

* 要查询名字有zhangsan的管理员的信息
 */
@Test
public void test4(){
    /**
     * selectOne 查询一个方法
     *
     * selectOne 需要一个Wrapper对象 实际上是需要一个条件
     *
     * 条件是 查询名字为zhangsan管理员
     * sql where username = zhangsan
     * 需要 把 sql的条件 封装到 Wrapper对象 对象中
     * 将封装了条件的对象 给 selectOne
     *
     * Wrapper对象 条件构造器  将sql的条件 写入到 Java 对象中
     * QueryWrapper 查询条件构造器
     * UpdateWrapper 更新的条件构造器
     */

// 1.创建一个条件构造器 泛型 为要查询数据的实体类类型

QueryWrapper<CmfzAdmin> queryWrapper = new QueryWrapper<>();

// 2.将 where username = zhangsan 等值查询 这个条件封装到 条件构造器

// username = zhangsan ---》 eq("username","zhangsan") 参数1 字段名 参数2 要查询的值
    queryWrapper.eq("username","zhangsan");

// 3.通过条件构造器 查询

CmfzAdmin cmfzAdmin = cmfzAdminDao.selectOne(queryWrapper);

    System.out.println(cmfzAdmin);
}

/**
 * 查询 名字为 lisi 或者 密码为 123456 的管理员
 *
 * sql username = lisi or password = 123456
 *
 * or 和 and 怎么构建?
 * eq("id",1).or().eq("name","老王")--->id = 1 or name = '老王'
 */
@Test
public void test5(){

// 1.创建条件构造器

QueryWrapper<CmfzAdmin> queryWrapper = new QueryWrapper<>();

// 2.构造条件 条件构造器的方法的第一个参数基本上都是字段名

queryWrapper.eq("username","lisi").or().eq("password","123456");

// 3.查询

/**
     * 批量查询 selectList() 方法中如果参数是null 就是查询所有
     */
    List<CmfzAdmin> cmfzAdmins = cmfzAdminDao.selectList(queryWrapper);

    for (CmfzAdmin cmfzAdmin : cmfzAdmins) {
        System.out.println(cmfzAdmin);
    }
}
条件修改:把用户名为zhangsan的管理员密码修改为123456

/**

* 用法和查询类似
 * 把用户名为zhangsan的管理员密码修改为123456
 *
 */
@Test
public void test6(){

// 1.创建条件构造器

UpdateWrapper<CmfzAdmin> updateWrapper = new UpdateWrapper<>();

// 2.构造条件

// where username = zhangsan

// set password = 123456

updateWrapper.set("password","123123");

    updateWrapper.eq("username","zhangsan");

// 3.使用方法修改

/**
     * update
     * 参数1  一个管理员对象  可以直接写null
     * 参数2  条件构造器
     */
    cmfzAdminDao.update(null,updateWrapper);
}
#### 实现分页查询

1. 配置分页插件  配置在启动类中即可

@Bean

public PaginationInterceptor paginationInterceptor() {
       PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
       // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
       // paginationInterceptor.setOverflow(false);
       // 设置最大单页限制数量,默认 500 条,-1 不受限制
       // paginationInterceptor.setLimit(500);
       // 开启 count 的 join 优化,只针对部分 left join
       paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
       return paginationInterceptor;
   }
2. 直接在代码可以使用分页查询

/**

* 测试分页查询
    *
    * 获取第二页的数据(页码) 每页显示两条(size)
    */
   @Test
   public void test7(){

// 1.创建一个page对象 封装分页数据

/**
        * 创建对象的时候 直接写入分页数据
        * 参数1 页码
        * 参数2 每页条数
        */
       Page<CmfzAdmin> adminPage = new Page<>(2,2);

// 2.使用分页查询的方法

/**
        * 分页查询的方法 selectPage()
        * 参数1 IPage 分页对象 封装分页信息 封装获取第二页的数据(页码) 每页显示两条(size)
        * 参数2 条件构造器 可以直接写null
        */
       Page<CmfzAdmin> cmfzAdminPage = cmfzAdminDao.selectPage(adminPage, null);

// 3.从Page对象中获取查询到的数据

/**
        * getRecords() 获取查询结果
        * getTotal() 总条数
        */
       System.out.println("总条数:"+cmfzAdminPage.getTotal());

       List<CmfzAdmin> adminList = cmfzAdminPage.getRecords();
       for (CmfzAdmin cmfzAdmin : adminList) {
           System.out.println(cmfzAdmin);
       }

   }
## 总结

> Tips:关于在SpringBoot项目中简化Mybatis的开发,本教程提供三个技术 MBG,MybatisPlus,通用Mapper,总有一款适合你。


**恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。**

![](https://image-static.segmentfault.com/282/884/282884372-dff2818675f6e0e5_articlex)


让我们再次回顾本文的学习目标

> * 掌握SpringBoot中MybatisPlus的使用


要掌握SpringBoot更多的用法,请持续关注本系列教程。

## 求关注,求点赞,求转发

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

长尾理论

长尾理论

[美] 克里斯·安德森 / 乔江涛 / 中信出版社 / 2006-12 / 35.00元

书中阐述,商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”(hits)的头部; 而是那条代表“冷门商品”(misses)经常为人遗忘的长尾。 举例来说, 一家大型书店通常可摆放10万本书,但亚马逊网络书店的图书销售额中,有四分之一来自排名10万以后的书籍。这些“冷门”书籍的销售比例正以高速成长,预估未来可占整体书市的一半。 这意味着消费者在面对无限的选择时,真正想要的东西、和想要取得......一起来看看 《长尾理论》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具