MyBatis學習存檔(3)——mapper.xml對應檔

來源:互聯網
上載者:User

標籤:傳回值   圖片   select   類對象   一個個   資料類型   es2017   mapper   重用   

MyBatis 真正的強大在於映射語句,專註於SQL,功能強大,SQL映射的配置卻是相當簡單

所以我們來看看對應檔的具體結構

一、xml節點結構

mapper為根節點 - namespace命名空間

cache - 配置給定命名空間的緩衝

cache-ref – 從其他命名空間引用緩衝配置

resultMap –用來描述資料庫結果集和對象的對應關係

sql – 可以重用的SQL塊,也可以被其他語句引用

insert – 映射插入語句

update – 映射更新語句

delete – 映射刪除語句

select – 映射查詢語句

二、各節點作用

此處以MyBatis學習存檔(1)——入門中反向產生的UsersMapper.xml和UsersMapper.java為例

<?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="com.mapper.UsersMapper" >  <resultMap id="BaseResultMap" type="com.pojo.Users" >    <id column="id" property="id" jdbcType="INTEGER" />    <result column="name" property="name" jdbcType="VARCHAR" />    <result column="password" property="password" jdbcType="VARCHAR" />  </resultMap>  <sql id="Base_Column_List" >    id, name, password  </sql>  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >    select     <include refid="Base_Column_List" />    from users    where id = #{id,jdbcType=INTEGER}  </select>  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >    delete from users    where id = #{id,jdbcType=INTEGER}  </delete>  <insert id="insert" parameterType="com.pojo.Users" >    insert into users (id, name, password      )    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}      )  </insert>  <insert id="insertSelective" parameterType="com.pojo.Users" >    insert into users    <trim prefix="(" suffix=")" suffixOverrides="," >      <if test="id != null" >        id,      </if>      <if test="name != null" >        name,      </if>      <if test="password != null" >        password,      </if>    </trim>    <trim prefix="values (" suffix=")" suffixOverrides="," >      <if test="id != null" >        #{id,jdbcType=INTEGER},      </if>      <if test="name != null" >        #{name,jdbcType=VARCHAR},      </if>      <if test="password != null" >        #{password,jdbcType=VARCHAR},      </if>    </trim>  </insert>  <update id="updateByPrimaryKeySelective" parameterType="com.pojo.Users" >    update users    <set >      <if test="name != null" >        name = #{name,jdbcType=VARCHAR},      </if>      <if test="password != null" >        password = #{password,jdbcType=VARCHAR},      </if>    </set>    where id = #{id,jdbcType=INTEGER}  </update>  <update id="updateByPrimaryKey" parameterType="com.pojo.Users" >    update users    set name = #{name,jdbcType=VARCHAR},      password = #{password,jdbcType=VARCHAR}    where id = #{id,jdbcType=INTEGER}  </update></mapper>
UsersMapper.xml
package com.mapper;import com.pojo.Users;public interface UsersMapper {    int deleteByPrimaryKey(Integer id);    int insert(Users record);    int insertSelective(Users record);    Users selectByPrimaryKey(Integer id);    int updateByPrimaryKeySelective(Users record);    int updateByPrimaryKey(Users record);}
UsersMapper.java

2.1 mapper節點

作為xml的根節點,它具有一個很重要的屬性——namespace(命名空間)

namespace的值應與其所綁定的映射介面向一致,為保證其唯一性,通常為“包名+類名”,如com.mapper.UsersMapper,即綁定了com.mapper包下的名為UsersMapper的介面

而與其綁定的介面UsersMapper中的方法應與對應檔中SQL語句id一一對應(順序無需一致)

2.2 cache、cache-ref節點

不推薦使用MyBatis內建的緩衝,因此此處不細講

2.3 resultMap節點

可在sql映射語句中被引用,通常用於表示資料庫表和實體類之間的映射關係

resultMap節點有2個屬性:

id:標識作用,應具有唯一性

type:類型,即對應的實體類,若在mybatis-config.xml中設定過別名,也可使用設定的別名

id節點:對應資料庫中的主鍵

result節點:非主鍵的其他欄位

column:資料庫表中對應的欄位名

property:實體類中對應的屬性

jdbcType:資料庫中改欄位的類型

2.4 sql節點

很簡單的一個節點,用於sql語句的重用,其id屬性起到標識作用,應具有唯一性

2.5 select節點

select是MyBatis中最常用的元素之一,對應select語句

id:命名空間中唯一的標識符,介面中的方法與對應檔中的SQL語句id一一對應

parameterType:傳入SQL語句的參數類型,分為2種情況:

1.基礎資料類型

int、String、Date等

只能傳入一個,通過#{參數名}即可擷取傳入的值

2.複雜資料類型

Java實體類、Map等

通過#{屬性名稱}或者#{map的keyName}即可擷取傳入值

resultType:SQL語句傳回值類型的完整類名或別名

resultMap:引用配置的resultMap

2.6 insert、delete、update節點

分別對應添加、刪除、更改語句,屬性與select基本相同,唯一不同之處在於無需配置resultType或resultMap,本身預設返回受影響的行數

因此,對於增刪改這類更新操作,介面方法的傳回值建議為int類型,執行sql影響的行數,最好不要寫boolean類型

三、多參數傳入

如2.5中所說,MyBatis僅支援單個參數的傳入,那麼如何進行多參數的傳入呢?

方法有2種:

1.將多個參數封裝成1個Map,傳入Map即可,但該方法不透明,無法直接看出所需的參數是什麼

   或直接傳入一個實體類對象

2.使用註解@Param來傳入多個參數

在介面中對傳入參數進行註解@Param("value"),在對應檔中使用${value}即可獲得該參數

建議:通常傳入參數大於3個時最好封裝成一個對象,而不是一個個傳入

MyBatis學習存檔(3)——mapper.xml對應檔

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.