mybatis的插入數據后的主鍵獲取


為什么要在插入數據后獲取主鍵:當有一個訂單表和訂單詳情表,當插入訂單表的數據后,需要在訂單詳情表插入該訂單的具體購物情況,訂單詳情表需要的一個列是訂單表的主鍵或者訂單ID。(通俗講:A表的主鍵是B表的外鍵,當向A表添加數據后需要在B表對A表做補充說明,B表的外鍵列就從A表的主鍵獲取)

1.創建實體類com.entity.Dept(DeptId和DeptName)和com.dao.DeptDao(有方法Integer insert(Dept dept)),這里寫的是Dept類,要用到反射的,和后面的deptMapper.xml代碼有關

2.在dao模塊的resources中創建deptMapper.xml文件,當然,要先在mabatis-config.xml中添加<Mapper resource="deptMapper.xml"></Mapper>

方法一:在deptMapper.xml文件中,

<mapper namespace="com.dao.DeptDao">//命名空間和DeptDao類的全稱一樣
    <insert id="insert" keyProperty="deptId" useGeneratedKeys="true">//deptId是Dept類的字段
        insert into dept(dept_name) values (#{deptName})//#{deptName}中的deptName是和Dept類的字段一樣
    </insert>
</mapper>

  java代碼:

public class DeptDaoImpl implements DeptDao{

    public int insert(Dept dept) {
        DeptDao deptDao = MapperFactory.generateMapper(DeptDao.class);
        deptDao.insert(dept);
        return dept.getDeptId();
    }
}

public class DeptDaoImplTest {

    @Test
    public void testInsertKey() {
        Dept dept = new Dept();
        dept.setDeptName("動漫");
        int insert = new DeptDaoImpl().insert(dept);
        System.out.println(insert);
    }
}

  方法二:利用<insert>和<selectKey>結合使用:

deptMapper.xml文件內容:

<mapper namespace="com.dao.DeptDao">
    <insert id="insert" >
        <selectKey resultType="integer" order="AFTER" keyProperty="deptId">
            select last_insert_id();//Mysql的函數,獲取最后插入的
        </selectKey>
        insert into dept(dept_name) values (#{deptName})
    </insert>
</mapper>

  方法三:order="BEFORE"

<mapper namespace="com.dao.DeptDao">
    <insert id="insert">
        <selectKey keyProperty="deptId" order="BEFORE" resultType="integer">
            select 88 // 自己直接設置dept_id
        </selectKey>
        insert into dept(dept_id,dept_name) values (#{deptId},#{deptName})
    </insert>
</mapper>

  總結:方法二較之方法一的好處是即使要獲取的不是主鍵也可以。Java部分代碼不需要改變,只需要改變xml文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM