1. 程式人生 > >Mybatis mapper.xml中常用標籤詳解

Mybatis mapper.xml中常用標籤詳解

一、SQL語句標籤:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.liuyanzhao.mybatis.mapper.UserMapper">
  6.     <!--查詢使用者-->
  7.     <select id="findUserById" parameterType
    ="int" resultType="com.liuyanzhao.mybatis.po.User">
  8.         SELECT * FROM user WHERE id=#{value}
  9.     </select>
  10.     <!--根據使用者名稱稱模糊查詢,可能返回多條-->
  11.     <select id="findUserByName" parameterType="java.lang.String" resultType="com.liuyanzhao.mybatis.po.User">
  12.         SELECT * FROM user WHERE username LIKE '%${value}%'
  13.     </select>
  14.     <!--新增使用者-->
  15.     <insert id="insertUser" parameterType="com.liuyanzhao.mybatis.po.User">
  16.         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  17.             SELECT LAST_INSERT_ID()
  18.         </selectKey>
  19.         INSERT INTO user(username,birthday,gender,address) VALUE(#{username},#{birthday},#{gender},#{address})
  20.     </insert>
  21.     <!--刪除使用者-->
  22.     <delete id="deleteUserById" parameterType="java.lang.Integer">
  23.         DELETE FROM user WHERE id=#{id}
  24.     </delete>
  25.     <!--更新使用者-->
  26.     <update id="updateUserById" parameterType="com.liuyanzhao.mybatis.po.User">
  27.         UPDATE user SET username=#{username},birthday=#{birthday},gender=#{gender},address=#{address} WHERE id=#{id}
  28.     </update>
  29. </mapper>

需要配置的屬性:

  • id="xxxx" >>> 表示此段sql執行語句的唯一標識,也是介面的方法名稱【必須一致才能找到】
  • parameterType="" >>>表示該sql語句中需要傳入的引數, 型別要與對應的介面方法的型別一致【可選】
  • resultMap=“ ”>>> 定義出參,呼叫已定義的<resultMap>對映管理器的id值
  • resultType=“ ”>>>定義出參,匹配普通Java型別或自定義的pojo【出參型別若不指定,將為語句型別預設型別,如<insert>語句返回值為int】

p.s: 至於為何<insert><delete><update> 語句的返回值型別為什麼是int,有過JDBC操作經驗的朋友可能會有印象,增刪改操作實際上返回的是操作的條數。而Mybatis框架本身是基於JDBC的,所以此處也沿襲這種返回值型別。

還有 int會自動轉成 Integer,別名

傳參和取值:mapper.xml 的靈活性還體現在SQL執行語句可以傳參,引數型別通過parameterType= “” 定義

取值方式1:#{value jdbcType = valuetype}:jdbcType 表示該屬性的資料型別在資料庫中對應的型別,如 #{user jdbcType=varchar} 等價於 String username;

取值方式2:${value } : 這種方式不建議大量使用,可能會發送sql注入而導致安全性問題。一般該取值方式可用在非經常變化的值上,如orderby ${columnName};

二、<if> 標籤

  1. <!--統計使用者數量-->
  2. <select id="countUserByNameAndGender" parameterType="com.liuyanzhao.mybatis.po.User" resultType="int">
  3.     SELECT COUNT(*) FROM user
  4.     <!--where標籤可以去掉首部的AND符號-->
  5.     <where>
  6.         <if test="gender!=null and gender!=''">
  7.             AND gender = #{gender}
  8.         </if>
  9.         <if test="username!=null and gender!=''">
  10.             AND username LIKE '%${username}%'
  11.         </if>
  12.     </where>
  13. </select>

三、sql 片段

在沒有使用 sql 片段之前

  1. <!--查詢使用者-->
  2. <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
  3.     SELECT id,username,gender,birthday,address FROM user WHERE id=#{value}
  4. </select>

定義和使用 sql 片段

  1. <!--定義sql片段-->
  2. <sql id="user_table_all_columns">
  3.     id,username,gender,birthday,address
  4. </sql>
  5. <!--查詢使用者-->
  6. <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
  7.     SELECT
  8.     <include refid="user_table_all_columns"/>
  9.     FROM user WHERE id=#{value}
  10. </select>

其中 sql 標籤的 di 表示 sql 片段的唯一識別符號

未完待續