這裏我們首先分析的是對於類與數據庫之間的映射配置文件,不是總配置文件。
看下列配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
<select id="selectById" parameterType="int" resultType="com.wf.model.User">
<!-- select * from User where id = #{id} -->
<!-- select * from User where id = #{value} -->
select * from User where id = #{hehe}
</select>
<select id="selectByName" parameterType="java.lang.String" resultType="com.wf.model.User">
select * from User where username like '%${value}%'
</select>
<insert id="insertUser" parameterType="com.wf.model.User">
<!-- insert into user value (#{id},#{username},#{birthday},#{sex},#{address}) -->
insert into user value (null,#{username},#{birthday},#{sex},#{address})
<!-- 字段必須全部寫完,即使是自增的也要寫上,或者利用null代替 -->
</insert>
<insert id="insertUserAndCheckID" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<insert id="insertUserAndCheckIDFree" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select uuid()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<delete id="deleteuserwithid" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
<update id="updateuserwithid" parameterType="com.wf.model.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},
address=#{address} where id=#{id}
</update>
</mapper>
NameSpace屬性
namespace的作用,首先在沒有利用Mapper代理開發的時候,他的作用僅僅是用來進行模塊化劃分,對SQL進行分類化管理,隔離SQL,但是我們如果使用了Mapper代理進行開發的時候,我們就是根據我們的namespace的類全名稱進行我們的接口與配置文件之間的映射,用來指定映射的接口。
增刪改查標籤
INSERT,DELETE,UPDATE,SELECT ,標籤用來標識此時的SQL語句的操作。
ID屬性
id屬性標識映射文件的sql,用來唯一標示此SQL語句的身份特質,一般在代碼的Dao層會進行SQL語句的執行,此時就是根據這個NameSpace和ID用來唯一標示要執行的SQL語句。
parameterType屬性
指定輸入參數的類型,可以是基本類型,也可以是封裝類型,一般情況在在傳遞一個參數時,我們只需要進行單個參數的類型入int,String等設定即可,但是,對於多參數的傳遞,我們都會將其封裝成一個對象,然後將這個對象傳遞到我們的SQL語句中。
resultType屬性
resultType,指定SQL輸出結果的所映射的java對象類型,也就是這個屬性,將我們數據庫中的一條記錄對應成我們的一個Java對象,如果查詢的結果是一個List列表的形式,我們利用此屬性只需要指定List集合中的對象屬性即可。
井{ }和${ }
在一般的屬性傳值中,我們的 #{} 表示一個佔位符號,而${} 表示不加任何修飾的拼接SQL串。
井{id} id 表示接收輸入值的參數,參數名稱是id,如果輸入參數是簡單類型,#{}中的參數名稱可以是任意的。可以是value或者其他。而如果傳入的參數不爲簡單類型,那麼括號裏面的屬性必須爲value。
${ } 表示不加任何修飾的拼接SQL串,將傳入的參數直接拼接到我們的SQL語句中,利用的是拼接而不是佔位符
<!--簡單類型 任意-->
<select id="selectById" parameterType="int" resultType="com.wf.model.User">
<!-- select * from User where id = #{id} -->
<!-- select * from User where id = #{value} -->
select * from User where id = #{hehe}
</select>
<!--複雜類型 value -->
<select id="selectByName" parameterType="java.lang.String" resultType="com.wf.model.User">
select * from User where username like '%${value}%'
</select>
selectKey標籤—主鍵的返回
selectKey子標籤,對於在插入的同時獲取插入的id值,用於外鍵的插入
<insert id="insertUserAndCheckID" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<insert id="insertUserAndCheckIDFree" parameterType="com.wf.model.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select uuid()
</selectKey>
insert into user value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
上面的代碼,第一句是自增主鍵的主鍵獲取,而對於第二個,則是在進行插入時生成的非自增的uuid的字符串的主鍵。注意order的屬性值。
keyProperty屬性:selectKey 語句結果應該被設置的目標屬性。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
order 屬性: 指定語句執行順序,相當於INSERT語句來說的執行順序
resultType: 指定返回的對象類型