Mybatis-Plus自动生成代码以及踩坑

1:@Data注解无效

解决方案:IDEA安装Lombok插件,然后重启IDEA

2:实体类驼峰命名,数据库字段无法匹配

解决方案:mybatis-plus.configuration.map-underscore-to-camel-case=false

#配置数据库
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# mysql8的驱动要加上serverTimeZone=GMT/2B8
spring.datasource.url=jdbc:mysql://localhost:3306/hanyxx?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#解决实体类驼峰命名,数据库转为_ 的问题(自动驼峰转换关闭)
mybatis-plus.configuration.map-underscore-to-camel-case=false
#配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

3:insert时报错:argument type mismatch

解决方案:在实体类上加上:@TableId(type = IdType.AUTO)(改变主键策略,指定为自增长)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
   
   
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String userName;
    private Date birthday;
    private String sex;
    private String address;
}

如果不加@TableId(type = IdType.AUTO)

那么Mybatis_plus会采用默认的主键生成策略:雪花算法

雪花算法: 使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0,每次生成唯一的值

@TableId详细解释:
在这里插入图片描述

4:代码自动生成

package com.banana;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.Date
<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`控制)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值