MyBatis-Plus 的 insert 方法在执行插入操作后,会自动返回插入记录的主键 ID。 在MyBatis-Plus 中,当你使用 insert 方法插入一条记录时,如果实体类的主键字段使用了支持自动回填的生成策略(如 IdType.AUTO、IdType.ASSIGN_ID 等),MyBatis-Plus 会自动将生成的主键 ID 填充到实体类的主键字段中,并返回这个 ID...
ID_WORKER_STR(5): 表示字符串形式的全局唯一ID,这是idWorker生成的ID的字符串表示形式,便于在需要字符串ID的场景下使用。 接下来,让我们跟着源码看一下,究竟是如何基于这些ID策略做id自增的,本文主要以ID_WORKER(3)策略id来追踪。 先从插入insert方法开始。 基于前文创建的UserInfo类,我们写一个test的方法,用...
在if(isFill)方法当中,最重要的是populateKeys(metaObjectHandler, tableInfo, ms, parameterObject, isInsert);这个方法,这个方法就是根据不同的id策略,去生成不同的id值,然后填充到id字段里,最终插入到数据库当中。而我们要找的最终方法,正是在这里面—— protectedstaticObjectpopulateKeys(MetaObjectHandlermetaObject...
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.virtuous.demo.mapper.MyTestMapper"><insertid="insertUser"useGeneratedKeys="true"keyProperty="id">INSERT INTO my_test (name) VALUES (#{po.name})</insert></...
mybatis-plus 执行insert(),实体的id自动更新 mybatis-plus 在执行baseMapper.insert()的时候,会将传进去的实体的id自动更新为插入的主键值。 业务代码 @Transactional(rollbackFor = Exception.class)@OverridepublicStringsaveCourseInfo(CourseInfoForm courseInfoForm){//保存课程基本信息Coursecourse=newCourse(); ...
底层ORM框架用的是Mybatis-Plus,我寻思了一下,这看起来像是在插入数据库旧自动生成的id,导致并非默认使用MySql的自增AUTO_INCREMENT的id。 因此,决定一步步定位,先给Mybatis-Plus打印出sql日志,看下其insert语句是否自动生成了一个id,然后才插入数据库。
发现在使用mybatis-plus自带的insert方法时,未返回实体的主键,在自己写mapper<insert id="insert" ...
java.sql.SQLException: Field 'id' doesn't have a default value 如图: 后来了解到 使用 mybatis-plus的insert方法,在底层会默认生成一个Long类型的UUID,这就导致跟数据库里面类型不一致导致错误,我们首先要做的是要把这个默认自增的主键给禁了 在实体类 id上面加一个注解 ...
这里设置的Mysql的主键是自增的,SELECT LAST_INSERT_ID()返回的是最后一个ID值意思。 传入的参数必须为对象,不能为String int 之类的单个参数 order属性,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作。AFTER一般用于Mysql自增的情况下,BEFORE一般用于自定义的ID的获取。
<insert id="insert"parameterType="com.xx.entity.Dept"useGeneratedKeys="true"keyProperty="deptno"keyColumn="deptno">insert into dept(deptname,loc) values(#{deptname},#{loc})</insert> 获取: 因为类注解:@Controller. 所有得加上@ResponseBody, 否则会报错。