mybatis insert資料返回自動生成的32位uuid主鍵
阿新 • • 發佈:2019-01-08
mybatis儲存資料之前都要有一個唯一的主鍵id,如果主鍵不是自增長的資料列,如何自動生成主鍵id呢?UUID就是一個生成隨機32位的工具,如果用java程式碼生成uuid,則相當於sql語句與java程式碼參雜在一起,顯得有點不整潔;如何從java分離sql語句,將sql和java程式碼解耦,並且將自動生成uuid返回到java程式碼呢?java程式碼可以生成uuid,mysql當然也有uuid;具體實現方式如下:
<insert id="addUser" parameterType="User"> <selectKey keyProperty="id" resultType="String" order="BEFORE"> select REPLACE(UUID(),"-","") </selectKey> INSERT INTO user VALUES (#{id},#{name},#{age},#{delete},#{enable},#{address}) </insert>
insert內嵌一層selectKey標籤,其中keyProperty值為model的主鍵,model的主鍵對應的就是資料庫表的主鍵;resultType為返回的資料型別,因為是32為的uuid,所以返回的是string的型別;order表示生成主鍵的查詢語句是在資料儲存到資料庫之前執行還是儲存資料之後執行,這裡我們是要將32位的uuid的設為儲存資料的主鍵,所以自然是儲存資料之前執行查詢uuid的語句,所以為BEFORE;主鍵生成之後,selectKey按上面的格式配置好之後,我們的入參的資料的id就有值了,並且就是插入資料庫的主鍵,外圍通過入參的物件就是可以取到主鍵id,程式碼如下:
User user= mapper.map(dto,User.class);
int result = userDao.getSqlSession().insert("addUser",user);
String userId= user.getId();