MyBatis知識二 配置文件解析一

這裏我們首先分析的是對於類與數據庫之間的映射配置文件,不是總配置文件。

看下列配置文件:

<?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: 指定返回的對象類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章