在写代码的时候,数据库id字段设置为自增,需要添加一条新的数据到数据库,然而添加完之后,还需要获取这条新加数据的id,用于其他业务。
数据库中id为自增:
表中的数据:
XML文件内容:
<insert id="insertSetting" parameterType="com.pig4cloud.pigx.earlywarning.entity.EwSetting"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO `workingspace`.`ew_setting`
(`id`,`deviceId`,`ewIconId`,`ewTypeId`,`ewLevelId`,`ewLevelName`,`name`,
`delayTime`,`upgradeTime`,`isDisplay`,`enable`,`sendMail`,`sendMessage`,
`createTime`,`updateTime`,`createUser`,`updateUser`,`delFlag`,`description`)
VALUES
(#{id},#{deviceId},#{ewIconId},#{ewTypeId},#{ewLevelId},#{ewLevelName},
#{name},#{delayTime},#{upgradeTime},#{isDisplay},#{enable},#{sendMail},
#{sendMessage},#{createTime},#{updateTime},#{createUser},#{updateUser},
#{delFlag},#{description});
</insert>
Mapper方法:
public interface EwSettingMapper{
int insertSetting(EwSetting ewSetting);
}
实际调用代码:
@Service
@AllArgsConstructor
public class EwSettingServiceImpl extends ServiceImpl<EwSettingMapper, EwSetting> implements EwSettingService {
private final EwSettingMapper ewSettingMapper;
public void saveSetting() {
//new一个对象
EwSetting ewv = new EwSetting();
//随便给这个对象设置几个值
ewv.setEwLevelId(1L);
ewv.setEwIconId(1L);
ewv.setDeviceId(1L);
ewv.setEwTypeId(1L);
if(ewSettingMapper.insertSetting(ewv) > 0){
System.out.println("ewv的id为:"+ewv.getId());
}
}
}
输出结果:
ewv的id为: 5
关于这两个属性的具体信息可参阅:Mybatis中文手册
说来惭愧,这还是我第一次看Mybatis的官方文档,emm,没看懂说的是什么
百度了一下,下面这段话觉得说的还蛮通俗易懂的 :
Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。
——来自 nininininiabc222
需要注意的是,此时返回的主键是直接setter进了 ewSettingMapper.insertSetting(ewv) 中的ewv的,insertSetting方法的返回值依旧是受影响的行数,所以,执行了 insertSetting 操作后,可通过 Long id = ewv.getId(); 得到id的值。
反正,新知识点 get√ ~~~~~