【SpringBoot】整合 MybatisPlus

1、MySQL + MybatisPlus

spring-boot-starter-parent 3.4.0

  • 第一步,pom.xml 导入依赖
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.5.9</version>
     </dependency>
    
  • 第二步,application.yml 添加配置
    # mysql config
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf-8&amp;autoReconnect=true
        username: root
        password: zhangsan123
     
    # mybatis-plus config
    mybatis-plus:
      type-aliases-package: com.story.domain 					# 别名扫描包,指定实体类所在的包路径
      mapper-locations: "classpath*:/mapper/**/*.xml" 			# Mapper.xml 文件地址
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl	# 定义MyBatis-Plus的日志实现方式(若不配置该参数,Mybatis在默认情况下会采用自动检测的方式):org.apache.ibatis.logging.slf4j.Slf4jImpl、org.apache.ibatis.logging.log4j.Log4jImpl、org.apache.ibatis.logging.stdout.StdOutImpl、org.apache.ibatis.logging.nologging.NoLoggingImpl
        map-underscore-to-camel-case: true 						# 是否开启下划线和驼峰的映射
        cache-enabled: false 									# 是否开启二级缓存
      global-config:
        banner: false											# 控制MyBatis-Plus启动时是否显示banner信息
        db-config:
          id-type: assign_id 									# 主键生成策略:AUTO、NONE、INPUT、ASSIGN_ID、ASSIGN_UUID
          update-strategy: not_null 							# 更新策略: 只更新非空字段
          logic-delete-value: 1									# 指定了逻辑删除的值
          logic-not-delete-value: 0								# 指定了未逻辑删除的值
    
  • 第三步,代码编写(可通过 EasyCode、MybatisPlus代码生成器生成代码)
    • 实体类

      /**
       * 用户表
       */
      @Data
      @TableName("api_student")
      public class Student {
          /**
           * 主键 ID,使用雪花算法生成
           */
          @TableId(type = IdType.ASSIGN_ID)
          private Long id;
       
          /**
           * 名称
           */
          private String name;
       
          /**
           * 年龄
           */
          private Integer age;
       
          /**
           * 性别
           */
          private String sex;
          
          /**
           * 班级id
           */
          private Integer classId;
      }
      

      相关注解:@TableId、@TableName、@TableField、@TableLogic、@Version

    • 数据访问层(Mapper)

      package com.example.demo.mapper;
      
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.example.demo.model.Student;
      import org.apache.ibatis.annotations.Mapper;
      
      @Mapper
      public interface StudentMapper extends BaseMapper<Student> {
      }
      
    • 业务逻辑层(Service)

      package com.example.demo.service;
      
      import com.baomidou.mybatisplus.extension.service.IService;
      import com.example.demo.model.Student;
      
      public interface StudentService extends IService<Student> {
      }
      
      package com.example.demo.service.impl;
      
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import com.example.demo.mapper.StudentMapper;
      import com.example.demo.model.Student;
      import com.example.demo.service.StudentService;
      import org.springframework.stereotype.Service;
      
      @Service
      public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {
      }
      
    • 表现层(Controller)

      package com.example.demo.controller;
      
      
      import com.example.demo.service.StudentService;
      import jakarta.annotation.Resource;
      import org.springframework.web.bind.annotation.*;
      
      @RestController
      @RequestMapping("student")
      public class ApiUserController {
      
          @Resource
          private StudentService studentService;
      
          @GetMapping
          public Object query(@RequestParam Integer id) {
              return  studentService.getById(id);
          }
          
      }
      
  • 第四步,启动项目,通过终端访问:curl http://127.0.0.1:8080/student?id=1

可能报错:

  • java: 无法访问com.baomidou.mybatisplus.extension.repository.IRepository
    找不到com.baomidou.mybatisplus.extension.repository.IRepository的类文件

    一般是因为 IService继承的IRepository所在的包mybatis-plus-extension的版本存在版本冲突(比如项目有使用mybatis-plus-generator)(可使用Maven Helper查看是否存在版本冲突),将对应的依赖排除即可。

  • Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

    springboot3更改了factoryBean方法,导致老版本的mybatis不能兼容, 所以最新的mybatis3.0.3修复了这个问题, 然而mybatisplus中还未更新

    <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.5.9</version>
         <exclusions>
             <exclusion>
                 <groupId>org.mybatis</groupId>
                 <artifactId>mybatis-spring</artifactId>
             </exclusion>
         </exclusions>
     </dependency>
    
     <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis-spring</artifactId>
         <version>3.0.4</version>
     </dependency>
    
  • A component required a bean of type 'com.example.demo.mapper.Mapper' that could not be found.

    Mapper 类没找到,在启动类Application上添加 @MapperScan 注解

    @SpringBootApplication
    @MapperScan("com.example.demo.mapper")
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Main.class, args);
        }
    }
    

3、PageHelper

  • 第一步,pom.xml 导入依赖
    <dependency>
         <groupId>com.github.pagehelper</groupId>
         <artifactId>pagehelper</artifactId>
         <version>6.1.0</version>
     </dependency>
    
  • 第二步,application.yml 添加配置
    pagehelper:
      helper-dialect: mysql
      reasonable: true
      support-methods-arguments: true
    
    参数说明:
    • helper-dialect:设置数据库方言为 MySQL。这是为了生成正确的分页 SQL 语句。PageHelper 会根据这个配置来选择适合的 SQL 语法和函数。
    • reasonable:分页合理化参数。当设置为 true 时,如果 pageNum<1 会查询第一页,如果 pageNum>pages(总页数),会查询最后一页。默认值为 false,直接根据参数进行查询。
    • support-methods-arguments:支持通过 Mapper 接口方法的参数来传递分页参数。这允许你在调用 Mapper 方法时直接使用分页参数(如 pageNum 和 pageSize),而不是在 XML 映射文件中配置。若用QueryWrapper及其子类,也可不设置。
    • params:允许指定额外参数。通常这个配置不是必需的,因为 PageHelper 能够自动处理大多数情况。如果你有特殊的需求,比如需要对 count 查询进行优化,或者需要使用不同的逻辑来计算总记录数,那么你可以使用这个配置。
  • 第三步,编写代码
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public PageInfo<User> getUsersByPage(int pageNum, int pageSize) {
            // 设置分页参数
            PageHelper.startPage(pageNum, pageSize);
    
            // 构建查询条件
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.ge("age", 18); // 示例条件:年龄大于等于18岁
    
            // 执行分页查询
            List<User> users = userMapper.selectList(queryWrapper);
    
            // 封装分页信息
            PageInfo<User> pageInfo = new PageInfo<>(users);
            return pageInfo;
        }
    }
    

关于分页插件,其实也可以用Mybatis-Plus本身自带的功能

  • 第一步,pom.xml 导入依赖
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.9</version>
    </dependency>
    
  • 第二步,添加配置文件 MybatisPlusConfig
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MybatisPlusConfig {
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            return new MybatisPlusInterceptor();
        }
    }
    
  • 第三步,编写业务代码
    public Object page( @RequestBody PageVo pageVo ) {
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc(pageVo.getDesc()).orderByAsc(pageVo.getAsc());
        Page<Student> page = new Page<>(pageVo.getPage(), pageVo.getSize());
        server.page(page, queryWrapper);
        return page;
    }
    

9、资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值