ibatis入門試行4一対一(OneToOne)関連付け
ibatis入門試み4一対一(OneToOne)関連付け
以前はibatisによってデータベースのcrud操作を完了していましたが、ibatisを使用して1対1のマッピング操作を完了しました.ibatisは半自動ormなので、彼のマッピング操作は主にクエリーに現れています.
まず,データベースにテーブルperson(id,name)idcard(id,cardcode)を確立する.ここでidはプライマリ・キーテーブルidcardのidフィールドの外部キーはpersonテーブルidである.personテーブルidは自己増加タイプを採用しています.
次にクラスを作成します
Person.xml
Idcard.xml
この2つのxmlの参照をプロファイルに追加することを忘れないでください.
この例では,オブジェクト間挿入の処理方式と,関連idの使用とselectkeyラベルの用途を指摘した.
次に、オブジェクト向けのクエリー結果を完了するためにクエリーを操作します.
ここではpersonオブジェクト関連idcardオブジェクトを採用します
Personを変更します.JAvaは彼にidcardオブジェクトを含ませた
ここにいるxmlにselectラベルを追加
次にpersonを増やしますxmlでラベルをクエリーします.プロパティ構成の
次はテスト方法です
以前はibatisによってデータベースのcrud操作を完了していましたが、ibatisを使用して1対1のマッピング操作を完了しました.ibatisは半自動ormなので、彼のマッピング操作は主にクエリーに現れています.
まず,データベースにテーブルperson(id,name)idcard(id,cardcode)を確立する.ここでidはプライマリ・キーテーブルidcardのidフィールドの外部キーはpersonテーブルidである.personテーブルidは自己増加タイプを採用しています.
次にクラスを作成します
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Idcard {
private int id;
private String cardcode;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCardcode() {
return cardcode;
}
public void setCardcode(String cardcode) {
this.cardcode = cardcode;
}
}
Person.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="person">
<typeAlias alias="personVO" type="com.bean.onetoone.Person"/>
<parameterMap class="personVO" id="personVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="name" jdbcType="varchar"/>
</parameterMap>
<insert id="createPerson" parameterMap="personVOmp">
<!-- id id , id
type pre post ,pre id ,post id id
select insert mysql
mysql
-->
<selectKey keyProperty="id" type="post" resultClass="int">
select @@IDENTITY as value
</selectKey>
insert into person(id,name) values(?,?)
</insert>
</sqlMap>
Idcard.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="idcard">
<typeAlias alias="idcardVO" type="com.bean.onetoone.Idcard"/>
<parameterMap class="idcardVO" id="idcardVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="cardcode" jdbcType="varchar"/>
</parameterMap>
<insert id="createIdcard" parameterMap="idcardVOmp">
insert into idcard(id,cardcode) values(?,?)
</insert>
</sqlMap>
この2つのxmlの参照をプロファイルに追加することを忘れないでください.
この例では,オブジェクト間挿入の処理方式と,関連idの使用とselectkeyラベルの用途を指摘した.
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Person person = new Person();
person.setName("zhangsan");
sqlMap.startTransaction();
sqlMap.insert("person.createPerson", person);
// person.xml selectkey person id
// idcard id
System.out.println(person.getId());
Idcard idcard = new Idcard();
idcard.setId(person.getId());
idcard.setCardcode("22043156");
sqlMap.insert("idcard.createIdcard", idcard);
sqlMap.commitTransaction();
次に、オブジェクト向けのクエリー結果を完了するためにクエリーを操作します.
ここではpersonオブジェクト関連idcardオブジェクトを採用します
Personを変更します.JAvaは彼にidcardオブジェクトを含ませた
package com.bean.onetoone;
public class Person {
private int id;
private String name;
private Idcard idcard;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Idcard getIdcard() {
return idcard;
}
public void setIdcard(Idcard idcard) {
this.idcard = idcard;
}
}
ここにいるxmlにselectラベルを追加
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="idcard">
<typeAlias alias="idcardVO" type="com.bean.onetoone.Idcard"/>
<parameterMap class="idcardVO" id="idcardVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="cardcode" jdbcType="varchar"/>
</parameterMap>
<insert id="createIdcard" parameterMap="idcardVOmp">
insert into idcard(id,cardcode) values(?,?)
</insert>
<resultMap class="idcardVO" id="getIdcardVO">
<result property="id" column="id"/>
<result property="cardcode" column="cardcode"/>
</resultMap>
<select id="selectIdcardById" resultMap="getIdcardVO" parameterClass="int">
select * from idcard where id=#value#
</select>
</sqlMap>
次にpersonを増やしますxmlでラベルをクエリーします.プロパティ構成の
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="person">
<typeAlias alias="personVO" type="com.bean.onetoone.Person"/>
<parameterMap class="personVO" id="personVOmp">
<parameter property="id" jdbcType="int"/>
<parameter property="name" jdbcType="varchar"/>
</parameterMap>
<insert id="createPerson" parameterMap="personVOmp">
<!-- id id , id
type pre post ,pre id ,post id id
select insert mysql
mysql
-->
<selectKey keyProperty="id" type="post" resultClass="int">
select @@IDENTITY as value
</selectKey>
insert into person(id,name) values(?,?)
</insert>
<resultMap class="personVO" id="getPersonVO">
<result property="id" column="id"/>
<result property="name" column="name"/>
// idcard idcard.selectIdcardById id
<result property="idcard" column="id" select="idcard.selectIdcardById"/>
</resultMap>
<select id="selectPersonById" resultMap="getPersonVO" parameterClass="int">
select * from person where id=#value#
</select>
</sqlMap>
次はテスト方法です
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Person p = (Person)sqlMap.queryForObject("person.selectPersonById", 2);
System.out.println(p.getName());
System.out.println(p.getIdcard().getCardcode());