java - 为什么Mybatis Plus SqlSession总是会自动删除插入的数据?
问题描述
我在我的项目中使用spring boot + mybatis-plus,并且正在使用登录功能。但是我遇到了一个问题,sqlSession 在插入选项后总是会删除数据,我无法修复它,我可以收到电子邮件,但数据库没有记录。
** 这是 pom.xml **
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
这是数据库的日志
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a4e11ec]
JDBC Connection [HikariProxyConnection@1274979915 wrapping com.mysql.cj.jdbc.ConnectionImpl@1767589b] will be managed by Spring
==> Preparing: SELECT id,username,password,email,has_freeze,role_id,create_date,update_date FROM sys_login WHERE (email = ?)
==> Parameters: AnEmailOfMine@163.com(String)
<== Columns: id, username, password, email, has_freeze, role_id, create_date, update_date
<== Row: 1388743439594512385, dastur, $2a$10$dX8Pyf.LnKcOyyT8VDwcwOTUaeUL/kT6AQA51u9jzqRgb9Cr3nybO, leonharddastur@163.com, 1, 1, null, null
<== Total: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a4e11ec]
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a4e11ec]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a4e11ec]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a4e11ec]
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4877237b]
JDBC Connection [HikariProxyConnection@557260532 wrapping com.mysql.cj.jdbc.ConnectionImpl@1767589b] will be managed by Spring
==> Preparing: DELETE FROM sys_login WHERE id=?
==> Parameters: 1388743439594512385(String)
<== Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4877237b]
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4877237b]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4877237b]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4877237b]
这是我的应用程序.yml
mybatis-plus:
configuration:
cache-enabled: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
global-config:
db-config:
capital-mode: false
table-underline: true
insert-strategy: not_null
mapper-locations: classpath:/mapper/*Mapper.xml
type-aliases-package: jit.edu.paas.domain.entity
type-enums-package: jit.edu.paas.domain.enums
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
password: psw
url: jdbc:mysql://myHostIp:port/database?useUnicode=true&characterEncoding=utf-8
username: username
这是我的用户实体
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SysLogin implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 邮箱
*/
private String email;
/**
* 是否冻结,默认false
*/
private Boolean hasFreeze;
/**
* 权限id
*/
private Integer roleId;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createDate;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
public SysLogin(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
}
** 这是我的注册控制器**
@PostMapping("/register")
public ResultVO register(String username, String password, String email) {
if (StringUtils.isBlank(username, password, email)) {
return ResultVOUtils.error(ResultEnum.PARAM_ERROR);
}
// 1、校验用户名、密码
ResultVO resultVO = loginService.registerCheck(username, email);
if (resultVO.getCode() != ResultEnum.OK.getCode()) {
return resultVO;
}
// 2、生成用户
SysLogin sysLogin = new SysLogin();
sysLogin.setUsername(username);
sysLogin.setPassword(password);
sysLogin.setEmail(email);
// 设置为冻结状态
sysLogin.setHasFreeze(true);
Boolean b1 = loginService.save(sysLogin);
// 3、发送邮件
Boolean b = loginService.sendRegisterEmail(email);
return b ? ResultVOUtils.success("已经发送验证邮件") : ResultVOUtils.error(ResultEnum.EMAIL_SEND_ERROR);
}
** 这是我的映射器类**
@Mapper
public interface SysLoginMapper extends BaseMapper<SysLogin> {
List<String> listId();
boolean hasExist(String id);
}
**这是服务中的保存方法**
@Override
public boolean save(SysLogin sysLogin) {
// 加密密码
if (StringUtils.isNotBlank(sysLogin.getPassword())) {
sysLogin.setPassword(new BCryptPasswordEncoder().encode(sysLogin.getPassword()));
}
// 用户角色默认为User
sysLogin.setRoleId(RoleEnum.ROLE_USER.getCode());
Integer i = loginMapper.insert(sysLogin);
return i == 1;
}