• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

SpringBoot 集成 MybatisPlus

Mybatis winrains 来源:鹿老师的Java笔记 6个月前 (03-21) 41次浏览

前言

在使用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;
}

2. 创建dao接口

import com.baizhi.entity.CmfzAdmin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * 注意: 
 * 1.接口中不需要写方法
 * 2.接口需要继承MybatisPlus中的类 BaseMapper  泛型为 当前dao对应的实体类
 */
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 adminList = cmfzAdminPage.getRecords();
    for (CmfzAdmin cmfzAdmin : adminList) {
         System.out.println(cmfzAdmin);   
    }   
}

总结

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

作者:鹿老师的Java笔记

来源:https://juejin.im/post/5e60f170f265da576303e76f


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (1)