<mapper namespace="vallue " ></mapper>java
當使用相對於類路徑的資源引用和徹底限定資源定位符(URL)映射器時,namespace=」valeu」 value的值能夠任意指定,而且mapper映射文件的位置能夠任意指定.sql
<mapper namespace="nnn" ></mapper>數據庫
<mapper namespace="com.lifeibai.dao.UserDao" ></mapper>緩存
<mapper namespace="vallue " > 這裏是mapper的元素</mapper>mybatis
<!-- 自定義條件查詢用戶列表 -->app
<sql id="sometable">性能
${prefix}Tablespa
</sql>3d
<sql id="someinclude">對象
from
<include refid="${include_target}"/>
</sql>
<select id="select" resultType="map">
select
field1, field2, field3
<include refid="someinclude">
<property name="prefix" value="Some"/>
<property name="include_target" value="sometable"/>
</include>
</select>
<!-- 自定義條件查詢用戶列表 -->
<select id="findUserByUsername" parameterType="java.lang.String"
resultType="cn.itcast.mybatis.po.User">
select * from user where username like '%${value}%'
</select>
#{}表示一個佔位符號,經過#{}能夠實現preparedStatement向佔位符中設置值,自動進行java類型和jdbc類型轉換,#{}能夠有效防止sql注入。 #{}能夠接收簡單類型值或pojo屬性值。 若是parameterType傳輸單個簡單類型值,#{}括號中能夠是value或其它名稱。
${}表示拼接sql串,經過${}能夠將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換, ${}能夠接收簡單類型值或pojo屬性值,若是parameterType傳輸單個簡單類型值,${}括號中只能是value。
1) po類字段與數據表中的列名不一致
2) 一對一關係
3) 一對多關係
4) 多對多
5) 根據條件封裝不一樣結果
<resultMap id="vehicleResult" type="Vehicle">
<id property="id" column="id" />
<result property="vin" column="vin"/>
<result property="year" column="year"/>
<result property="make" column="make"/>
<result property="model" column="model"/>
<result property="color" column="color"/>
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultType="carResult">
<result property="doorCount" column="door_count" />
</case>
<case value="2" resultType="truckResult">
<result property="boxSize" column="box_size" />
<result property="extendedCab" column="extended_cab" />
</case>
<case value="3" resultType="vanResult">
<result property="powerSlidingDoor" column="power_sliding_door" />
</case>
<case value="4" resultType="suvResult">
<result property="allWheelDrive" column="all_wheel_drive" />
</case>
</discriminator>
</resultMap>
作條件判斷的,若是咱們不使用這個標籤,咱們確定會在代碼中判斷如查詢的元素是否爲空,傳入的元素是否爲空,而這時咱們直接使用這個標籤,就減小了代碼的書寫
<!-- 傳遞pojo綜合查詢用戶信息 -->
<select id="findUserList" parameterType="user" resultType="user">
select * from user
where 1=1
<if test="id!=null">
and id=#{id}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
concat(‘%’,#{username},’%’)
</if>
</select>
對於這類標籤,就是採用多個選項中找一個,就像單項選擇題,可是你不會都選擇,只會從中選擇1個來做爲條件。就有點相似於switch。。case。
<select id="findActiveBlogLike" resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
若是使用第一個if語句的sql有and的話,就會發現沒有寫where標籤就會報錯。而這類標籤一般是搭配條件標籤使用的。
<select id="findUserList" parameterType="user" resultType="user">
select * from user
<where>
<if test="id!=null and id!=''">
and id=#{id}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
</if>
</where>
</select>