1. 程式人生 > >Mapping.xml資料庫操作常用標籤

Mapping.xml資料庫操作常用標籤

l  <select >

l  <insert>

l  <update>

l  <delete>

l  <resultMap>

l  <parameterMap>

4.1<select>/<insert>/<update>/<delete>

Ø  不同的標籤寫不同的SQL語句

<!-- 查詢一條資料 -->

<select id="getAll" resultType="entity.User">

        select * from goods

</select

>

<!-- 刪除一條資料 -->

<delete id="delAll" parameterType="java.lang.Integer">

        delete from goods where id=#{id}

</delete>

<!-- 插入一條資料 -->

<insert id="insertAll" parameterType="entity.User">

        insert into goods(id,name,price) value(#{id},#{name},#{price})

</insert>

<!-- 更新一條資料 -->

<update id="upAll" parameterType="entity.User">

        update goods set name=#{name},price=#{price} where id=#{id}

</update>

u  屬性解釋:

Ø  Id 每條SQL語句的唯一識別符號,Java程式碼通過索引特定的id ,從而找到與之對應的那條SQL語句

Ø  parameterType傳入引數。如果查詢一條資料中,傳入的是主鍵id,它的引數型別是int,而在插入一條資料中,傳入的引數是一個User物件,這裡應該寫User類的完整路徑(entity.User)包名+類名。

Ø  resultType在查詢語句中,會有個返回值,同parameterType一樣,這裡標識的是返回值的引數型別。

Ø  resultMap查詢語句返回的結果型別,此型別需要和對映檔案中的<resultMap>標籤配合使用

Ø  parameterMap為查詢語句傳入引數型別,此型別需要配合對映檔案中的<parameterMap>標籤使用

4.2<resultMap><parameterMap>標籤

當實體類中的屬性和資料庫中的欄位對應是,我們使用resultType和parameterType就可以完成CRUD(資料庫基本操作中的Create(建立)、ReadRetrieve(讀取)、Update(更新)、Delete(刪除));

當實體類中的屬性和資料庫中的欄位不對應時,就要用resultMap和parameterMap了

4.2.1瞭解JDBC從sql查詢結果到模型實體

我們需要了解從sql 查詢結果集到JavaBean 或者POJO實體物件

Ø  通過JDBC查詢得到resultSet物件

Ø  遍歷resultSet 物件,並將每行資料暫存到HashMap例項中,以結果集的欄位名或欄位名為鍵,以欄位的值為值

Ø  根據resultMap 的type 屬性通過反射例項化領域模型。

Ø  根據resultMap 標籤的type 屬性 和id ,result 等標籤,將HashMap 中的鍵值對,填充到領域模型例項中並返回

4.2.2 resultMap 標籤

l  屬性說明:

Ø  Id:resultMap標籤的唯一標識

Ø  Type:返回值的類名,或者別名

l  作用:

Ø  建立SQL查詢結果欄位與實體屬性的對映關係資訊

1.         建立領域模型

package entity;

publicclass User {

privateintid;

private String name;

publicint getId() {

returnid;

}

publicvoid setId(int id) {

this.id = id;

}

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

publicint getPrice() {

returnprice;

}

}

2.         Mapping.xml程式碼

<select id="getMap" resultMap="getUserMap">

        select * from goods

</select>

<resultMap type="entity.User" id="getUserMap">

<id column="id" property="ids"/>

<result column="name" property="names"/>

</resultMap>

l  子標籤說明:

            Ø  Id:用於設定主鍵欄位與模型屬性對映關係

            Ø  Result:使用者設定普通欄位與模型屬性對映關係

    Ø  元素說明:

            ²  Column:資料庫列名,如果不和資料庫對應,會查詢不出資料

            ²  Property:對映到實體物件的屬性

3.         測試程式碼

@Test

publicvoid test05(){

//開啟會話

       SqlSession session = sFactory.openSession();

//和物件對映檔案的名稱空間相同,加上要執行的語句的id

       String sql="UserMappings.getMap";

       List<User> list = session.selectList(sql);

for(User user:list){

           System.out.println(user.getName()+"   "+user.getId());

       }

       session.close();

    }

結果:

   1

c++   2

<parameterMap>用於傳輸一個map 作為引數使用

         Mapping.xml程式碼

<!-- 儲存一個goods-->
 <insert id="saveGoods" parameterMap="goodsParameterMap">
      insert into goods
   (ID,NAME)
    values
   (#{ids},#{names})
 </insert>

 <!-- resultMap:resultMap的id ,bookName:resultMap的property,即實體類中的屬性 -->

 <parameterMap type="Book.dao.Book" id="goodsParameterMap">
      <parameter property="ids" resultMap="getUserMap" />  
      <parameter property="names" resultMap="getUserMap" />  
 </parameterMap>