您好,登錄后才能下訂單哦!
MyBatis 真正的力量是在映射語(yǔ)句中,SQL 映射文件有以下幾個(gè)頂級(jí)元素.
<br/>
查詢語(yǔ)句是使用 MyBatis 時(shí)最常用的元素之一,對(duì)于每次插入,更新或刪除,那也會(huì)有很多的查詢。這是 MyBatis 的一個(gè)基本原則,也是將重心和努力放到查詢和結(jié)果映射的原因。對(duì)簡(jiǎn)單類別的查詢?cè)厥欠浅:?jiǎn)單的。
比如:
<select id=”selectPerson” parameterType=”int” resultType=”hashmap”>
SELECT * FROM PERSON WHERE ID = #{id}
</select>
這個(gè)語(yǔ)句被稱作 selectPerson,使用一個(gè) int(或 Integer)類型的參數(shù),并返回一個(gè) HashMap類型的對(duì)象,其中的鍵是列名,值是列對(duì)應(yīng)的值。
<br/>
這就告訴 MyBatis 創(chuàng)建一個(gè) PreparedStatement(預(yù)處理語(yǔ)句)參數(shù)。使用JDBC,這樣的一個(gè)參數(shù)在 SQL 中會(huì)由一個(gè)“?”來(lái)標(biāo)識(shí),并被傳遞到一個(gè)新的預(yù)處理語(yǔ)句中,就像這樣:
// 相似的JDBC代碼,不是MyBatis的
String selectPerson = “SELECT * FROM PERSON WHERE ID=?”;
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);
當(dāng)然,這需要很多單獨(dú)的 JDBC 的代碼來(lái)提取結(jié)果并將它們映射到對(duì)象實(shí)例中,這就是MyBatis 節(jié)省你時(shí)間的地方。我們需要深入了解參數(shù)和結(jié)果映射.
select 元素有很多屬性允許你配置,來(lái)決定每條語(yǔ)句的作用細(xì)節(jié)。
<select
id=”selectPerson”
parameterType=”int”
resultType=”hashmap”
resultMap=”personResultMap”
flushCache=”false”
useCache=”true”
timeout=”10000”
fetchSize=”256”
statementType=”PREPARED”
resultSetType=”FORWARD_ONLY”
>
如下內(nèi)容為各個(gè)參數(shù)的介紹:
<!--設(shè)置domain類和數(shù)據(jù)庫(kù)中表的字段一一對(duì)應(yīng),注意數(shù)據(jù)庫(kù)字段和domain類中的字段名稱不致,此處一定要!-->
<resultMap id="BaseResultMap" type="User">
<id column="USER_ID" property="userId" jdbcType="INTEGER" />
<result column="USER_NAME" property="userName" jdbcType="CHAR" />
<result column="USER_PASSWORD" property="userPassword" jdbcType="CHAR" />
<result column="USER_EMAIL" property="userEmail" jdbcType="CHAR" />
</resultMap>
<!-- 查詢單條記錄 -->
<select id="selectUserById" parameterType="int" resultMap="BaseResultMap">
SELECT * FROM t_user WHERE USER_ID = #{userId}
</select>
<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty=""
useGeneratedKeys=""
timeout="20000">
對(duì)于插入操作,假如數(shù)據(jù)庫(kù)表結(jié)構(gòu)中支持自動(dòng)生成主鍵的字段,那么你可以設(shè)置 useGeneratedKeys=”true”,而且設(shè)置 keyProperty 到你已經(jīng)做好的目標(biāo)屬性上.
例如:
<insert id="insertAuthor" parameterType="domain.blog.Author"
useGeneratedKeys=”true” keyProperty=”id”>
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
</insert>
<update
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20000">
例如:
<update id="updateAuthor" parameterType="domain.blog.Author">
update Author set
username = #{username},
password = #{password},
email = #{email},
bio = #{bio}
where id = #{id}
</update>
<delete
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20000">
例如:
<delete id="deleteAuthor” parameterType="int">
delete from Author where id = #{id}
</delete>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。