在寫代碼的時候,數據庫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√ ~~~~~