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

Easter79
• 阅读 626

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/crud-interface.html#page

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.接口中不需要写方法* 2.接口需要继承MybatisPlus中的类 BaseMapper  泛型为 当前dao对应的实体类*/public interface CmfzAdminDao extends BaseMapper<CmfzAdmin> {}
    
  2. 直接使用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&lt;CmfzAdmin&gt; adminList = cmfzAdminPage.getRecords();   for (CmfzAdmin cmfzAdmin : adminList) {       System.out.println(cmfzAdmin);   }   }
    

总结

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

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

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

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

  • 掌握SpringBoot中MybatisPlus的使用

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

求关注,求点赞,求转发

欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。

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

点个在看,让更多人看到

本文分享自微信公众号 - 鹿小洋的Java笔记(lulaoshiJava)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」
!(https://oscimg.oschina.net/oscnet/56649a2e2440d060df3967e9fa6be353b4d.jpg)有天上飞的概念,就要有落地的实现概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍先赞后看,养成习惯Spr
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k