踩坑-MyBatis/MyBatis-Plus

文章讨论了在使用MybatisPlus进行分页查询时,遇到查询数量限制问题以及默认limit值可能导致的问题。解决方案是修改PaginationInterceptor的limit属性。另外,当查询integer类型字段值为0时,MyBatis的iftest条件可能失效,需注意非null判断。

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

1、    问题:MybatisPlus分页查询,明明设置了每页的查询数量为10000,但是仍然只查出来500条数据
    原因:MyBatis-Plus低版本的PaginationInterceptor,定义了默认limit为500,当size超出limit时设置size为limit的值
    方案:修改了配置类 PaginationInterceptor中的limit属性 paginationInterceptor.setLimit(10000);
    疑问点:网上说,如果limit值为 -1 会因为查询数据量过大而导致内存超限,但是也有人就是设置为-1
2、    问题:MyBatis/MyBatis-Plus中查询integer类型字段值为0时if test条件失效
    原因:MyBatis的源码中,在判断integer类型的值时,默认会将0值处理成空串'' 
    解决方案:仅判断非null

<think>嗯,用户想了解MyBatis-Plus怎么搞,也就是怎么开始使用它。首先,我需要回忆一下MyBatis-Plus的基础知识。MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,简化开发、提高效率。所以,用户可能已经知道MyBatis,现在想了解如何集成MyBatis-Plus到项目中。 首先,我应该从项目配置开始讲起。用户需要添加依赖,如果是Maven项目的话,得在pom.xml中加入MyBatis-Plus的starter依赖。记得要提到版本号,不过可能需要用户根据实际情况选择最新版本。比如: $$ <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> $$ 然后,配置数据源。在application.yml或者application.properties里配置数据库连接信息,这部分和MyBatis类似,但用户可能容易忽略,需要提醒他们正确填写url、username、password等信息。 接下来,实体类和Mapper的创建。MyBatis-Plus通过继承BaseMapper来获得CRUD方法,所以用户需要让他们的Mapper接口继承BaseMapper<T>。例如: public interface UserMapper extends BaseMapper<User> { } 这里要注意,实体类可能需要使用注解如@TableName来指定表名,特别是当表名和类名不一致的时候。还有字段映射,比如@TableField注解处理字段名不一致的情况。 然后,可以介绍基本的CRUD操作。比如插入、查询、更新、删除等,这些通过BaseMapper已经实现的方法可以直接调用,比如userMapper.insert(user),userMapper.selectById(1)等。这部分需要给出示例代码,让用户明白如何调用。 可能用户还会问关于Service层的封装。MyBatis-Plus提供了IService接口和ServiceImpl类,可以进一步简化Service层的编写。用户只需要创建接口继承IService,实现类继承ServiceImpl并实现自己的接口即可。这里需要给出示例,说明如何通过Service层调用通用的方法。 分页查询也是一个常用功能,需要配置分页插件。用户可能不知道要添加分页拦截器,所以得详细说明如何在配置类中添加PaginationInnerInterceptor,并演示如何使用Page对象进行分页查询。 条件构造器Wrapper的使用也是一个重点。比如QueryWrapper和LambdaQueryWrapper,如何构建查询条件,避免SQL注入,同时让代码更简洁。需要举例子,比如查询年龄大于18的用户,可以用wrapper.gt("age", 18)这样的方法。 代码生成器可能对用户有帮助,特别是当有很多表需要生成代码的时候。MyBatis-Plus的代码生成器可以自动生成Entity、Mapper、Service等代码,需要配置AutoGenerator,并指定数据源、包名等参数。这部分可能需要详细步骤,或者给出一个配置示例,供用户参考。 此外,用户可能会遇到常见问题,比如如何配置主键策略,使用@TableId注解,或者如何处理逻辑删除,使用@TableLogic注解。这些也需要提到,帮助用户避免。 最后,可以推荐一些官方文档和社区资源,让用户有进一步学习的途径。同时提醒他们在实际开发中注意事务管理、性能优化等高级特性,但基础使用的话,上述步骤应该足够了。 需要确保步骤清晰,代码示例正确,并且符合MyBatis-Plus的最佳实践。还要注意使用中文,避免专业术语使用错误,让新手也能理解。可能还需要检查是否有遗漏的重要功能,比如自动填充字段、乐观锁插件等,但作为入门介绍,可能先集中在基础部分,高级特性可以后续扩展。</think>以下为MyBatis-Plus的快速入门指南,按步骤实现基础CRUD操作: ### 一、环境准备 1. 添加Maven依赖(Spring Boot项目): ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` 2. 配置数据源(application.yml): ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useSSL=false username: root password: 123456 ``` ### 二、基础使用 #### 1. 实体类定义 ```java @Data @TableName("user") // 指定对应表名 public class User { @TableId(type = IdType.AUTO) // 主键自增策略 private Long id; private String name; private Integer age; @TableField("email") // 字段映射 private String mail; } ``` #### 2. Mapper接口继承 ```java public interface UserMapper extends BaseMapper<User> { // 无需编写XML,已包含基础CRUD方法 } ``` #### 3. 基础CRUD示例 ```java // 插入 User user = new User(); user.setName("张三"); userMapper.insert(user); // 查询 User result = userMapper.selectById(1L); // 条件查询 QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("name", "张三") .lt("age", 30); List<User> users = userMapper.selectList(wrapper); // 更新 User updateUser = new User(); updateUser.setAge(25); userMapper.update(updateUser, wrapper); // 删除 userMapper.deleteById(1L); ``` ### 三、增强功能 #### 1. Service层封装 ```java public interface UserService extends IService<User> {} @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {} ``` #### 2. 分页查询 ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor paginationInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } } // 使用示例 Page<User> page = new Page<>(1, 10); // 当前页,每页数量 Page<User> result = userMapper.selectPage(page, null); ``` #### 3. Lambda表达式写法 ```java LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>(); lambdaWrapper.eq(User::getName, "张三") .lt(User::getAge, 30); List<User> users = userMapper.selectList(lambdaWrapper); ``` ### 四、代码生成器(可选) ```java FastAutoGenerator.create("jdbc:mysql://localhost:3306/test", "root", "123456") .globalConfig(builder -> builder.outputDir("src/main/java").author("YourName")) .packageConfig(builder -> builder.parent("com.example")) .strategyConfig(builder -> builder.addInclude("user")) // 要生成的表名 .execute(); ``` ### 五、常见问题解决 1. **主键策略**:通过`@TableId`注解配置 - `IdType.AUTO`:数据库自增 - `IdType.ASSIGN_ID`:雪花算法生成ID 2. **逻辑删除**: ```java @TableLogic private Integer deleted; // 0-未删除 1-已删除 ``` 3. **字段自动填充**: ```java @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; ``` 官方文档推荐:[mybatis-plus官网](https://baomidou.com/) > **注意事项**:1. 实体类字段建议使用包装类型 2. 避免直接使用MP进行复杂联表查询 3. 生产环境建议关闭SQL日志打印(通过配置`mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl`控制)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值