我们知道MySql中主键可以设成auto_increment,也就是自增主键,每当新增一条记录,主键值自动加1。 在MyBatis中,执行insert,返回值为受影响的语句行数,此操作跟JDBC一致。 但是如果应用中需要将插入的值的主键返回时,这时有两种方式: 第一种方式:在mapper的insert节点中添加useGeneratedKey和keyProperty属性 第二种方式:...
主键自增在插入操作中的行为 在插入操作中,当执行save或insert方法时,MyBatis-Plus会自动识别主键列的自增属性,并在执行SQL时省略对主键列的赋值(如果未显式设置的话)。数据库在接收到插入请求后,会自动为新记录分配一个唯一的自增值,并将其存储在主键列中。 注意事项和常见问题解答 确保数据库表已正确设置主键...
继续往下debug,因为是insert语句,故而会进入到ms.getSqlCommandType() == SqlCommandType.INSERT方法里,将isFill赋值true,isInsert赋值true,这两个分别表示是否需要填充以及是否插入。由此可见,它将会执行if (isFill) {}里的逻辑—— 在if(isFill)方法当中,最重要的是populateKeys(metaObjectHandler, tableInfo, ms...
useGeneratedKeys:是否自动生成主键,默认false。 keyColumn:数据库中的自增主键的列名,默认是数据库表的第一列,当主键列不是表中的第一列的时候需要设置。 keyProperty:返回的主键值赋给实体类中哪个属性。 在insert标签中嵌套selectKey 标签获取: 修改一下BookMapper.xml文件: <insert id="insertBook" parameterType=...
我们往DB中插入一条数据,使用Mybatis plus的BaseMapper#insert()方法时,如果实体类的主键成员是从自增序列中自动取值,而我们又不做任何标识的话会出现以下错误。出现主键数据很大而无法插入的问题。org.apache.ibatis.reflection.ReflectionException :Could not set property 'id' of 'class com .pojo .sallerPojo...
public String insertStudent() { Student student = new Student(); student.setName("zhangsan"); student.setAge(23); student.setSex("男"); studentService.save(student); return "success"; }回到顶部 MyBatisPlus操作Oracle:使用自定义的主键生成策略(不依赖序列)1...
底层ORM框架用的是Mybatis-Plus,我寻思了一下,这看起来像是在插入数据库旧自动生成的id,导致并非默认使用MySql的自增AUTO_INCREMENT的id。 因此,决定一步步定位,先给Mybatis-Plus打印出sql日志,看下其insert语句是否自动生成了一个id,然后才插入数据库。
接下来,验证一番后,发现,Mybatis-Plus在做insert操作时,确实自动生成一条长19的数字当做该条数据的id插入到MySql,导致虽然MySql表设置了自增,但被Mybatis-Plus生成的id为1468844351843872769所影响,导致下一条数据自动递增值变成1468844351843872770,这种过长的id值,在做索引维护时,是很影响效率,占用空间过大,故而,这...
带着这样的疑惑,我开始研究了一番Mybatis Plus的insert自增id的策略源码,并将其写成了本文。 先来看一下Mybatis Plus生成id的自增策略,可以通过枚举IdType设置以下数种策略—— 代码语言:javascript 复制 @GetterpublicenumIdType{/** * 数据库ID自增 ...