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 |
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> |