MyBatis(四)プライマリ・キー生成ポリシー

3382 ワード

1、データベースは自動生成メインキーをサポートする
データベースがMySQLやSQL Serverなどのプライマリ・キーを自動的に生成するフィールドをサポートしている場合は、useGeneratedKeys="true"を設定し、keyPropertyをターゲット・プロパティに設定できます.
  • mysqlは自増主キーをサポートし、自増主キー値の取得はmybatisもstatementを利用する.getGenreatadKeys();
  • useGeneratedKeys="true":自己増加プライマリ・キーを使用してプライマリ・キー値ポリシーを取得します.
  • keyProperty:取得した自己増加プライマリ・キー値をJavabeanのどの属性値に配置しますか.
  • 
        <insert id="addEmployee" useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
            insert into employee(last_name,age,email)
                values(#{lastName},#{age},#{email})
        insert>
    

    2、データベースは自動生成メインキーをサポートしていない
    一方、自己拡張プライマリ・キーがサポートされていないデータベース(Oracleなど)では、selectKeyサブ要素を使用できます.selectKey要素は最初に実行され、idは設定され、挿入文が呼び出されます.
    Oracleは自己増加をサポートしていません.Oracleでは、シーケンスを使用して自己増加をシミュレートします.挿入されるデータのプライマリ・キーは、シーケンスから取得されます.
    
        <insert id="addEmployee" databaseId="oracle">
            <selectKey keyProperty="id" order="BEFORE" resultType="Integer">
                select EMPLOYEE_SEQ.nextval from dual
            selectKey>
            
                insert into employee(id,last_name,age,email)
                    values(#{id},#{lastName},#{age},#{email})
         insert>
    

    上のXMLファイルの構成により、データを挿入する際に、そのレコードのIDを取得できます.
    
        @Test
        public void testInsert() {
            try {
                EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
                //   ,ID     null
                Employee emp = new Employee(null, "EE", 25, "[email protected]");
    
                mapper.addEmployee(emp);
                //                  ID 
                System.out.println("ID:" + emp.getId());
                sqlSession.commit();
            } finally {
                sqlSession.close();
            }
        }