<insert id="insertAuthor">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
</selectKey>
insert into Author (id, username, password, email,bio, favourite_section) values (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>
private String FoodId;
private String FoodName;
private String price;
<insert id="saveFood">
<!-- 用的是Oracle数据库,表的主键用序列生成 -->
<selectKey keyProperty="foodId" order="BEFORE" statementType="STATEMENT" resultType="string">
select FOOD_SEC.NEXTVAL from dual
</selectKey>
insert into food values(#{foodId} , #{foodName} , #{price})
</insert>
@Test
public void saveFood() throws IOException{
// 获取数据库会话
SqlSession session = getSession();
// 获取映射接口
FoodMapper mapper = session.getMapper(FoodMapper.class);
Food food = new Food();
food.setFoodName("红烧狮子头");
food.setPrice("55");
// 插入数据库
mapper.saveFood(food);
// 提交事务
session.commit();
/* 现在这个Food实例的foodId的值就是selectKey中的SQL语句返回的值。 */
System.out.println(food.getFoodId());
}
@SelectKey(
before = true, // 在方法执行前执行selectKey
keyProperty = "foodId", // 填充的字段
resultType = String.class, // selectKey的数据类型
statement = "select FOOD_SEC.NEXTVAL from dual" // 产生key的SQL语句)
@Insert("insert into food values(#{foodId} , #{foodName} , #{price})")
public void insertFood(Food food);
@Test
public void insertFood() throws IOException{
SqlSession session = getSession();
FoodMapper mapper = session.getMapper(FoodMapper.class);
Food food = new Food();
food.setFoodName("卤水拼盘");
food.setPrice("50");
mapper.insertFood(food);
session.commit();
System.out.println("selectKey:" + food.getFoodId());
}