MyBatis(四)プライマリ・キー生成ポリシー
3382 ワード
1、データベースは自動生成メインキーをサポートする
データベースがMySQLやSQL Serverなどのプライマリ・キーを自動的に生成するフィールドをサポートしている場合は、useGeneratedKeys="true"を設定し、keyPropertyをターゲット・プロパティに設定できます. mysqlは自増主キーをサポートし、自増主キー値の取得はmybatisもstatementを利用する.getGenreatadKeys(); useGeneratedKeys="true":自己増加プライマリ・キーを使用してプライマリ・キー値ポリシーを取得します. keyProperty:取得した自己増加プライマリ・キー値をJavabeanのどの属性値に配置しますか.
2、データベースは自動生成メインキーをサポートしていない
一方、自己拡張プライマリ・キーがサポートされていないデータベース(Oracleなど)では、selectKeyサブ要素を使用できます.selectKey要素は最初に実行され、idは設定され、挿入文が呼び出されます.
Oracleは自己増加をサポートしていません.Oracleでは、シーケンスを使用して自己増加をシミュレートします.挿入されるデータのプライマリ・キーは、シーケンスから取得されます.
上のXMLファイルの構成により、データを挿入する際に、そのレコードのIDを取得できます.
データベースがMySQLやSQL Serverなどのプライマリ・キーを自動的に生成するフィールドをサポートしている場合は、useGeneratedKeys="true"を設定し、keyPropertyをターゲット・プロパティに設定できます.
<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();
}
}