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

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

  • 概念十遍不如代码一遍,朋友,但愿你把文中全部的代码案例都敲一遍java

  • 先赞后看,养成习惯git

SpringBoot 图文教程系列文章目录github

  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接口都要进行修改。web

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

MybatisPlus

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

什么是Mybatis Plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的加强工具,在 MyBatis 的基础上只作加强不作改变,为简化开发、提升效率而生。数据库

在 MyBatis 的基础上只作加强不作改变 mybatis

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

官方文档: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);
       }
    复制代码
       }
    复制代码   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笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。

相关文章
相关标签/搜索