SpringBoot集成MybatisPlus

本文介绍了如何在项目中集成MybatisPlus以减少实体类、DAO接口和Mapper文件的繁琐编写。通过注解实现ORM映射,利用BaseMapper接口简化DAO操作,以及使用QueryWrapper条件构造器进行灵活的查询和更新操作。同时,演示了分页查询的配置和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

集成项目

  1. 导入Mybatisplus的依赖  

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

   <dependency>

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

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

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

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);
   }

   }
 

Mybatis plus学习随笔:QueryWrapper条件构造器的使用 - JacksonLiyq - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值