mybatis-flex / mybatis-flex

mybatis-flex is an elegant Mybatis Enhancement Framework

Home Page:https://mybatis-flex.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

使用saveOrUpdate产生的sql一直是update

MutionHu opened this issue · comments

版本:1.8.8

实体类主键使用自增:

@Data
@Table(value = "sys_test")
public class SysTestEntity {

    @Id(keyType = KeyType.Auto)
    private Long id;

    @Column(value = "NAME")
    private String name;


}

实体类主键使用None:

@Data
@Table(value = "sys_test_2")
public class SysTest2Entity {

    @Id(keyType = KeyType.None)
    private String id;

    @Column(value = "NAME")
    private String name;


}

测试:

@Test
    void saveOrUpdate() {
        SysTestEntity testEntity = new SysTestEntity();
        //testEntity.setId(1L);
        testEntity.setName("test aaa");
        sysTestService.saveOrUpdate(testEntity);

        SysTest2Entity test2Entity = new SysTest2Entity();
        test2Entity.setId("aaa");
        test2Entity.setName("aaa test");
        sysTest2Service.saveOrUpdate(test2Entity);
    }

控制台打印的SQL:
INSERT INTO sys_test(NAME) VALUES ('test aaa')

UPDATE sys_test_2SETNAME= 'aaa test' WHEREid= 'aaa'

自增主键也有问题,当设置ID为一个不存在的值时,SQL还是执行的UPDATE语句

        SysTestEntity testEntity = new SysTestEntity();
        testEntity.setId(2L);
        testEntity.setName("test aaa");
        sysTestService.saveOrUpdate(testEntity);

底层逻辑是设置了主键就是更新,未设置主键就是insert