Mybatis mapper.xml中常用標籤詳解
阿新 • • 發佈:2019-01-29
一、SQL語句標籤:
- <?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.liuyanzhao.mybatis.mapper.UserMapper">
- <!--查詢使用者-->
- <select id="findUserById" parameterType
- SELECT * FROM user WHERE id=#{value}
- </select>
- <!--根據使用者名稱稱模糊查詢,可能返回多條-->
- <select id="findUserByName" parameterType="java.lang.String" resultType="com.liuyanzhao.mybatis.po.User">
- SELECT * FROM user WHERE username LIKE '%${value}%'
- </select>
- <!--新增使用者-->
- <insert id="insertUser" parameterType="com.liuyanzhao.mybatis.po.User">
- <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
- SELECT LAST_INSERT_ID()
- </selectKey>
- INSERT INTO user(username,birthday,gender,address) VALUE(#{username},#{birthday},#{gender},#{address})
- </insert>
- <!--刪除使用者-->
- <delete id="deleteUserById" parameterType="java.lang.Integer">
- DELETE FROM user WHERE id=#{id}
- </delete>
- <!--更新使用者-->
- <update id="updateUserById" parameterType="com.liuyanzhao.mybatis.po.User">
- UPDATE user SET username=#{username},birthday=#{birthday},gender=#{gender},address=#{address} WHERE id=#{id}
- </update>
- </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> 標籤
- <!--統計使用者數量-->
- <select id="countUserByNameAndGender" parameterType="com.liuyanzhao.mybatis.po.User" resultType="int">
- SELECT COUNT(*) FROM user
- <!--where標籤可以去掉首部的AND符號-->
- <where>
- <if test="gender!=null and gender!=''">
- AND gender = #{gender}
- </if>
- <if test="username!=null and gender!=''">
- AND username LIKE '%${username}%'
- </if>
- </where>
- </select>
三、sql 片段
在沒有使用 sql 片段之前
- <!--查詢使用者-->
- <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
- SELECT id,username,gender,birthday,address FROM user WHERE id=#{value}
- </select>
定義和使用 sql 片段
- <!--定義sql片段-->
- <sql id="user_table_all_columns">
- id,username,gender,birthday,address
- </sql>
- <!--查詢使用者-->
- <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
- SELECT
- <include refid="user_table_all_columns"/>
- FROM user WHERE id=#{value}
- </select>
其中 sql 標籤的 di 表示 sql 片段的唯一識別符號
未完待續