方式一:@@IDENTITY
table1为主表,主键为自增的ID,在插入数据时ID不需要被赋值,自动插入;table2为从表,jlid为外键,与table1中的ID关联。
现在传入一条数据,需要同时在两个表插入数据,可以使用 @@IDENTITY 属性。
<!-- 在多条语句同时执行时,注意加 ; 分隔-->
insert into table1 (除自增ID外的属性)VALUES(属性值);
select @@IDENTITY;
INSERT INTO table2(外键ID, 除自增ID、外键ID外的属性)
VALUES(@@IDENTITY, 其他属性值)
在一条或多条 INSERT、SELECT 语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT 语句失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。
方式二:接收返回新增主键ID--可以用int接收,也可以在实体类中接收id
<insert id="saveId" parameterType="com.entity">
<!-- 通过mybatis框架提供的selectKey标签获得自增产生的ID值-->
<!-- order="AFTER",声明当前select语句在insert后面执行-->
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="test.id">
select LAST_INSERT_ID()
</selectKey>
insert into t_ern (alid) values (#{test.alid});
</insert>
方式三:on dupdate key update表中根据主键或唯一键来判断,有就修改,否则插入(没实现过)
<insert id="insertOrUpdate" keyProperty="id" useGeneratedKeys="true">
INSERT INTO user(id, user_id, name)
VALUES (#{id}, #{userId}, #{name})
ON DUPLICATE KEY UPDATE
id = values(id) , user_id = values(user_id) ,name = values(name)
</insert>
@Override
public boolean user1(Long id,String userId,String name){
User user = new User();
user.setId(id);
user.setUserId(userId);
user.setName(name);
mapper.insertOrUpdate(user);
}