SpringBoot使用通用mapper模板的insertSelective相关异常

SpringBoot使用通用mapper模板的insertSelective相关异常

项目场景:

这里简述项目相关背景:
配置springboot后,使用通用mapper的insertSelective方法进行有选择性地插入,正确配置了pojo中的User( @Id和@KeySql(useGeneratedKeys = true)注解),最后进行test测试时故意将主键id的值进行缺省,测试时报错


问题描述:

提交User的属性时发现,主键id的值缺省后就会以下报错,其余字段的值均可以进行缺省提交。

Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
JDBC Connection [HikariProxyConnection@1888400144 wrapping com.mysql.cj.jdbc.ConnectionImpl@6ebc9573] will be managed by Spring
==>  Preparing: INSERT INTO springboot_user ( id,username,password ) VALUES( ?,?,? )
==> Parameters: null, xia(String), 123(String)
Releasing transactional SqlSession 

[org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'id' cannot be null
### The error may exist in com/fcy/mapper/UserMapper.java (best guess)
### The error may involve com.fcy.mapper.UserMapper.insertSelective-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO springboot_user  ( id,username,password ) VALUES( ?,?,? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'id' cannot be null
; Column 'id' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column 'id' cannot be null

原因分析:

报错表明:提交的字段 ”id“ 不能为null,但是前面设置通用模板的时候已经设置”insertSelective“,其余字段可以进行缺省提交说明pojo的配置和insertSelective的使用均正确,应该是数据库的表的问题。字段”id“为主键,但是没有设置为自增长。
数据库表字段信息


解决方案:

需进行如下操作,将主键”id“设置为自增长。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以很方便地整合通用Mapper,只需要在pom.xml中添加通用Mapper的依赖,然后在配置文件中配置数据源和通用Mapper相关属性即可。 具体步骤如下: 1. 在pom.xml中添加通用Mapper的依赖: ```xml <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency> ``` 2. 在配置文件中配置数据源和通用Mapper相关属性: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true mapper: mappers: - tk.mybatis.mapper.common.Mapper not-empty: false identity: MYSQL ``` 其中,mapper.mappers指定了要使用Mapper接口,这里使用通用MapperMapper接口;mapper.identity指定了主键生成策略,这里使用了MySQL的自增长主键。 3. 在Mapper接口中继承通用MapperMapper接口即可使用通用Mapper提供的方法: ```java public interface UserMapper extends Mapper<User> { } ``` 这样就可以使用通用Mapper提供的方法来进行数据库操作了,例如: ```java @Autowired private UserMapper userMapper; public void addUser(User user) { userMapper.insert(user); } public void updateUser(User user) { userMapper.updateByPrimaryKeySelective(user); } public void deleteUser(Long id) { userMapper.deleteByPrimaryKey(id); } public User getUser(Long id) { return userMapper.selectByPrimaryKey(id); } public List<User> getUsers() { return userMapper.selectAll(); } ``` 以上就是Spring Boot整合通用Mapper的基本步骤,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值