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

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

前言

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

在之前的文章中介绍了 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包冲突

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

通过MybatisPlus实现增删改查

教程新手向,只讲解Mybatis最常用,最基本的API,更多的操作请参考官方文档 demo使用到的数据库库表如下

  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中MybatisPlus的使用

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

本文分享自微信公众号 - 鹿小洋的Java笔记(lulaoshiJava),作者:鹿老师

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot图文教程3—「‘初恋’情结」集成Jsp

    通过前面两篇,小伙伴们已经成功的实现了增删改查,但是,没有页面效果的项目,就像网恋没有奔现的小姐姐一样,安能辨她是雌雄。今天用SpringBoot整合Jsp页面...

    鹿老师的Java笔记
  • 最适合新手入门的SpringCloud教程 7—OpenFeign「F版本」

    上一篇使用了RestTemplate的服务调用,但是有一些问题:通过RestTemplate发送请求时候,携带参数比较的繁琐,另外RestTemplate中需要...

    鹿老师的Java笔记
  • F版本SpringCloud 2—什么是SpringCloud?SpringCloud版本选择

    上一篇文章中,通过一个简单的小故事,轻松愉快的讲解了架构的演变,以及为啥会有微服务,什么是微服务。不过在最后留下了一个小疑问:将架构设计为微服务需要一整套技术,...

    鹿老师的Java笔记
  • django settings.py 配置文件

    郭楷丰
  • Chaos Mesh® X GitHub Actions —— 把混沌工程集成到你的 CI 中

    本文将介绍如何在 GitHub Actions 的 workflow 中使用 Chaos Mesh,从而将混沌工程集成到系统开发的 CI 中。

    PingCAP
  • 40个常用的基本Linux命令

    在本教程中,我将展示一些非常基本的Linux命令,并提供一些示例,这些示例能使你更加熟悉Linux命令行。 要成为Linux专家,对于初学者来说,第一步就是开始...

    三分恶
  • 原来你是这样的---原型和原型链

      把JS的原型和原型链重新梳理了一遍,然后动手绘制了一张流程图,原型和原型链的秘密就藏在这张图上。绘制流程图的好处就是在绘制的过程中,既检验自己对这个知识点的...

    tandaxia
  • GET型常见的注入点判断方法

    大家在对目标网站进行测试的时候如果挖到了SQL注入是不是要给厂商提供复现步骤和漏洞证明截图呢,提交复现步骤的时候我们只需要证明存在这个漏洞就可以过审,所以今天就...

    酷酷的繁星
  • Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介

    本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer),QQ交流群:903290195

    脑机接口社区
  • 被疯抢的茅台和一地鸡毛的A股

    今天看到一则新闻《茅台促销引发抢购 警察鸣枪示警》,上网搜了一下,原来是茅台公司发布文件称,将开展夏季消费者优惠活动——原指导价格为1499元的53度500ml...

    金融民工小曾

扫码关注云+社区

领取腾讯云代金券