mybatis-中級篇-UserMapper.xml

?xml version="1.0" encoding="UTF-8" ?>
<!-- 引入dtd -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">




<!-- namespace就是接口的包名加類名 -->
<mapper namespace="cn.dao.UserMapper">








<!-- 查個數 -->
<!-- id是一個方法,id是唯一的 -->
<!-- resaultType是返回值類型 -->
<select id="count" resultType="int">
<!-- 寫SQL語句 -->
select count(1) from user
</select>



<!-- =============================================== -->

<!-- 增加 -->
<!-- parameterType:增加的時候傳進來的是User對象 -->
<insert id="add" parameterType="User">
insert into user(userCode, userName, userPassword)
values (#{userCode},#{userName},#{userPassword})
</insert>

<!-- =============================================== -->

<!-- 修改 -->
<!-- 注意:如果屬性很多而用戶只修改一種一個或幾個屬性的時候
就不用每個屬性都set了 -->
<update id="update" parameterType="User">
<!-- 方法1 -->
<!-- update user
<set>
<if test="userCode != null and userCode != ''">
userCode=#{userCode},
</if>
<if test="userName != null and userName != ''">
userName=#{userName},
</if>
<if test="userPassword != null and userPassword != ''">
userPassword=#{userPassword}
</if>
</set>
where id = #{id} -->

<!-- 方法2 -->

update user
<trim prefix = "set" suffixOverrides = ",">
<if test="userCode != null and userCode != ''">
userCode=#{userCode},
</if>
<if test="userName != null and userName != ''">
userName=#{userName},
</if>
<if test="userPassword != null and userPassword != ''">
userPassword=#{userPassword}
</if>
</trim>
where id = #{id}


</update>

<!-- =============================================== -->
<!-- 刪除 -->
<delete id="delete" parameterType="User">
delete from user where id=#{id}
</delete>

<!-- =============================================== -->
<!-- 查詢-->
<select id="getUserList" resultType="User">
select * from user
</select>
<!-- =============================================== -->
<!-- 根據roleId獲取數據列表 -->

<!-- 自己建一個結果集 -->
<!-- id除了是唯一標識,還 被其他 犯法調用時用 -->
<!-- 把查詢出來的結果集映射到User對象裏 -->
<!-- 爲了提高效率,用不着表裏的內容都查一遍,所以不用resultType而用resultMap -->
<!-- 當列名和屬性名不一致是我們用resultMap,比如說oracle的時候 -->
<!-- resultType的結果也是一個Map,key是列名,values是所對應的值 -->
<!-- <resultMap type="User" id="userMap">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="roleName" column="roleName"/>
</resultMap> -->

<!-- <select id="getUserListByRoleId" parameterType="Role" resultMap="userMap">
select u.*,r.roleName as roleName from user u,role r where u.roleId = r.id and u.roleId = #{id}
  </select> -->
 
  <!-- =============================================== -->
  <!-- 根據roleId獲取數據列表 association多對一-->
  <resultMap type="User" id="userMap">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<!-- 屬性是JavaBean的時候 -->
<!-- 第一種寫法 -->
    <!-- <association property="role" javaType="Role">
    <result property="id" column="r_id"/>
    <result property="roleCode" column="roleCode"/>
    <result property="roleName" column="roleName"/>
    </association> -->
    <!-- 第二種寫法 -->
    <association property="role" javaType="Role" resultMap="roleMap"></association>
</resultMap>
<resultMap type="Role" id="roleMap">
<result property="id" column="r_id"/>
    <result property="roleCode" column="roleCode"/>
    <result property="roleName" column="roleName"/>
</resultMap>


<select id="getUserListByRoleId" parameterType="Role" resultMap="userMap">
select u.*,r.id as r_id,r.roleCode,r.roleName as roleName 
from user u,role r 
where u.roleId = r.id 
and u.roleId = #{id}
  </select>


<!-- 動態SQL查詢 -->
<resultMap type="User" id="userMap2">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="roleName" column="roleName"/>
</resultMap>
<select id="serchUserList" parameterType="User" resultMap="userMap2">
select u.*,r.roleName as roleName 
from user u,role r 
where u.roleId = r.id 
<if test = "roleId != null">
and u.roleId = #{roleId}
</if>
<!-- 防止SQL注入 -->
<if test = "userName != null">
and u.userName like concat ('%',#{userName},'%') 
</if>
<if test = "userCode != null">
and u.userCode like concat ('%',#{userCode},'%') 
</if>
  </select>

<!-- =============================================== -->
  <!-- 獲取指定用戶的地址列表 collection一對多-->
  <resultMap type="User" id="serchMap">
  <id property="id" column="userId"/>
  <collection property="addressList" ofType="Address">
  <id property="id" column="a_id"/>
  <result property="postCode" column="postCode"/>
  <result property="addressContent" column="addressContent"/>
  </collection>
  </resultMap>
<select id="getAddressListByUserId" parameterType="User" resultMap="serchMap">
SELECT *,a.id AS a_id, a.addressContent, a.`userId` FROM USER u, address a WHERE u.id = a.userId AND u.id = #{id}
</select>

<!-- =============================================== -->
  <!-- 用foreach in-->
  <resultMap type="User" id="userMapDep">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="depName" column="depName"/>
</resultMap>
<select id="getUserByDepId" parameterType="User" resultMap="userMapDep">
select * from user where depId in
<foreach collection = "array" item = "depIds" open = "(" separator = "," close = ")">
#{depIds}
</foreach>
</select>
<select id="getUserByDepId2" parameterType="User" resultMap="userMapDep">
select * from user where depId in
<foreach collection = "list" item = "depIds" open = "(" separator = "," close = ")">
#{depIds}
</foreach>
</select>
 
</mapper>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章