Mybatis-Plus使用枚举类型int值,Mysql tinyint(1)返回null

本文探讨了Mybatis-Plus在使用枚举类型时遇到的问题,当数据库字段为tinyint(1)与Integer枚举不匹配导致转换为null。解决方法提示将字段类型改为tinyint(2),并解释了类型转换的重要性。

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

问题描述:

Mybatis-Plus在使用枚举类型,如果Mysql数据库中字段类型是tinyint(1) 而枚举值类型为Integer,导致转换时枚举类型为null。

修改:tinyint(2) 即可

### Spring Boot 集成 MyBatis-Plus、Redis、MQ 和 SWG 的球厅比赛管理系统 #### 1. 系统架构概述 构建一个基于 Spring Boot 的单体应用,集成 MyBatis-Plus 进行数据持久化操作,Redis 实现缓存管理,消息队列 (MQ) 处理异步任务,Swagger 提供 API 文档支持。该系统的核心功能包括 CRUD 操作以及与球厅比赛相关的业务逻辑。 --- #### 2. 数据库设计 以下是针对球厅比赛管理系统的数据库表设计方案: ##### 表结构定义 ```sql -- 比赛信息表 CREATE TABLE competition ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', name VARCHAR(255) NOT NULL COMMENT '比赛名称', start_time DATETIME NOT NULL COMMENT '开始时间', end_time DATETIME NOT NULL COMMENT '结束时间', max_participants INT DEFAULT 0 COMMENT '最大参赛人数', status TINYINT DEFAULT 0 COMMENT '状态:0-未开始;1-进行中;2-已结束' ); -- 参赛人员表 CREATE TABLE participant ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', user_id BIGINT NOT NULL COMMENT '用户ID', competition_id BIGINT NOT NULL COMMENT '比赛ID', registration_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间', FOREIGN KEY (competition_id) REFERENCES competition(id) ); ``` 上述 SQL 定义了两个核心表 `competition` 和 `participant`,分别用于存储比赛信息和参赛者记录[^1]。 --- #### 3. Maven 依赖配置 为了实现所需的功能模块,在项目的 `pom.xml` 文件中引入以下依赖项: ```xml <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <!-- Redis 缓存 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- RabbitMQ 或 Kafka (以RabbitMQ为例)--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!-- Swagger UI --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <!-- MySQL Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> ``` 以上依赖涵盖了 Web 开发框架、ORM 工具、缓存服务、消息中间件及接口文档工具的支持[^2]。 --- #### 4. 核心代码实现 ##### 4.1 MyBatis-Plus Mapper 接口 通过 MyBatis-Plus 自动生成基础的 CRUD 方法。 ```java @Mapper public interface CompetitionMapper extends BaseMapper<Competition> { } ``` ##### 4.2 Service 层实现 提供具体的业务逻辑处理方法。 ```java @Service public class CompetitionService { @Autowired private CompetitionMapper competitionMapper; public List<Competition> getCompetitionList() { return competitionMapper.selectList(null); // 获取所有比赛列表 } public void registerParticipant(Long userId, Long competitionId) { Participant participant = new Participant(); participant.setUserId(userId); participant.setCompetitionId(competitionId); participant.setRegistrationTime(new Date()); int count = competitionMapper.getParticipantsCountByCompetitionId(competitionId); if (count >= getMaxParticipantsForCompetition(competitionId)) { throw new RuntimeException("报名人数已达上限"); } saveParticipant(participant); } private Integer getMaxParticipantsForCompetition(Long competitionId) { Competition competition = competitionMapper.selectById(competitionId); return competition.getMaxParticipants(); // 返回指定比赛的最大参赛人数 } private void saveParticipant(Participant participant) { // 存储到数据库并发送通知至 MQ participantMapper.insert(participant); rabbitTemplate.convertAndSend("competition.register", participant.getId()); // 发送注册事件 } } ``` ##### 4.3 Redis 缓存优化 利用 Redis 减少频繁访问数据库的压力。 ```java @Component public class CacheManager { @Autowired private StringRedisTemplate redisTemplate; public void cacheCompetitionDetails(Long competitionId, Competition competition) { ValueOperations<String, String> ops = redisTemplate.opsForValue(); ops.set("COMPETITION:" + competitionId, JSON.toJSONString(competition)); } public Optional<Competition> getCachedCompetitionDetails(Long competitionId) { ValueOperations<String, String> ops = redisTemplate.opsForValue(); String cachedData = ops.get("COMPETITION:" + competitionId); return StringUtils.hasText(cachedData) ? Optional.of(JSON.parseObject(cachedData, Competition.class)) : Optional.empty(); } } ``` ##### 4.4 Message Queue 配置 设置 RabbitMQ 来处理异步任务。 ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest ``` 消费者端接收来自生产者的注册事件,并执行后续动作(如邮件通知等)。 ```java @Component public class RegistrationConsumer { @RabbitListener(queues = "competition.register") public void handleRegistrationEvent(String participantId) { System.out.println("接收到新的报名请求:" + participantId); sendNotificationEmail(participantId); } private void sendNotificationEmail(String participantId) { // TODO: 调用第三方邮件服务或内部模板引擎生成通知邮件 } } ``` ##### 4.5 Swagger 配置 启用 Swagger 并暴露 RESTful API 文档。 ```java @Configuration @EnableSwagger2WebMvc public class SwaggerConfig implements WebFluxConfigurer { @Bean public Docket apiDocket() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) .paths(PathSelectors.any()) .build(); } } ``` --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值