首页 > 解决方案 > 为什么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("已经发送验证邮件&quot;) : 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;
    }

标签: javamysqlspring-bootmybatis

解决方案


推荐阅读