1. 程式人生 > >SSM】之MyBatis插入資料後獲取自增主鍵

SSM】之MyBatis插入資料後獲取自增主鍵

        很多時候,我們都需要在插入一條資料後回過頭來獲取到這條資料在資料表中的自增主鍵,便於後續操作。針對這個問題,有兩種解決方案:

(1)先插入,後查詢。我們可以先插入一條資料,然後根據插入的資料的各個欄位值,再次訪問資料庫,從資料庫中將剛剛插入的資料查詢出來。當然,這種方法是很笨的,不提倡使用。

(2)MyBatis為我們提供了一種在插入資料後獲取自增主鍵的方式,通過這種方式,我們可以在插入一條資料之後直接從插入的POJO物件中取出id即可。這種方式簡單且效率高、節省程式碼量,因此提倡使用。

Mapper.xml檔案中的程式碼如下:

<mapper namespace="testuser">
	<insert id="insertUser" parameterType="com.itgungnir.hellomybatis.bean.User">
		<!-- 將插入資料的主鍵返回,返回到User物件中 -->
		<!-- keyProperty:將查詢到的主鍵值設定到parameterType物件的哪個屬性中 -->
		<!-- order:SELECT LAST_INSERT_ID()語句的執行順序(相對於insert語句來說的執行順序) -->
		<!-- resultType:指定SELECT LAST_INSERT_ID()語句的結果型別 -->
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			<!-- SELECT LAST_INSERT_ID():得到剛insert到資料表中的記錄的主鍵值,只適用於自增主鍵 -->
			SELECT LAST_INSERT_ID()
		</selectKey>
		INSERT INTO user(name) VALUES(#{name})
	</insert>
</mapper>
測試程式碼中這樣寫:
public void insertUser(){
	SqlSession session = null;
	try {
		// MyBatis配置檔案
		String resource = "SqlMapConfig.xml";
		// 得到配置檔案流
		InputStream is = Resources.getResourceAsStream(resource);
		// 建立會話工廠,傳入MyBatis配置檔案的資訊
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		// 通過工廠得到SqlSession
		session = factory.openSession();
		// 要新增到資料庫中的作為引數的員工物件
		User user = new User();
		user.setName("111111");
		// 通過SqlSession操作資料庫,查詢結果是與對映檔案中的resultType相匹配的資料型別
		// 第一個引數:對映檔案中Statement的id,等於namespace+"."+statementid
		// 第二個引數:指定和對映檔案中的SQL語句匹配的parameter type型別的引數
		session.insert("testuser.insertUser", user);
		// 提交事務
		session.commit();
		// 列印主鍵
		System.out.println(user.getId());
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		// 釋放資源(會話資源)
		if (session != null) {
			session.close();
		}
	}
}