複雜SQL語句的書寫(mybatis中XML檔案的核心)
select sd.name as dptName, pro.`name` as provinceName, c.`name` as cityName, a.`name` as areaName, info.id, dpt.*, info.*, gd.* from info_sys as info left join depart as dpt on dpt.dept_namee = info.dept_namee left join grade as gd on gd.info_sys_id = info.id left join sys_dept as sd on dpt.dept_namee = sd.dept_id left join province pro on dpt.province = pro.code_p left join city c on dpt.city = c.code_c left join area a on dpt.area = a.code_a where info.id = #{id}
以上是李大哥寫的
以下是我寫的
select info.`id`, info.`dept_namee`, dpt.`principal_name`, dpt.`unit_type`, info.`sys_name`, info.`dept_name`, info.`begin_use_time`, gd.`pro_grade`, gd.`pro_time`, gd.`jug_res`, gd.`gov_res` from depart as dpt left join info_sys as info on dpt.dept_namee = info.dept_namee left join grade as gd on gd.info_sys_id = info.id
在寫多表聯合sql語句的時候:
1、如果是要拼接where條件語句,那麼where語句中的內容用#{id}
例項:
where info.id = #{id}
如果where語句中的條件語句寫在裡邊的話,那麼就要拼接。
還需要做if條件判斷。
<where>
<if test = "id != null and id != ' '"> id = #{value}</if>
</where>
2、後邊還可以加排序:
<choose>
<when test = " sort != null and sort.trim() != ' '">
order by ${sort} ${order}
</when>
<otherwise>
order by id desc
</choose>
3、分頁
<if>
limit ${offset} ${limit}
</if>
以上是要寫在select框中的。
4、在寫多表聯合查詢語句的時候,不是下一個表的外來鍵和上一個表的主鍵相等這麼對應的,而是:
兩張表中的相對應的欄位相等,這麼對應的。
5、還可以使用as將查詢到的語句欄位,後邊加上別名。
在查詢語句中:result type的型別
①當使用select進行查詢的時候,返回的result type的型別必須是實體類的欄位的型別。查詢語句後邊常常要加上很多的條件。
②當使用update更新的時候,paremet type的型別必須是實體類中的型別。update更新的時候,後邊只需要加上ID一個條件就成
③當使用insert插入的時候,result type的型別必須是實體類的型別。insert後邊不需要加條件。
useGeneratedKeys="true" keyProperty="id" 是什麼意思呢?
④當使用delete的時候,直接刪除就可以。delete * from table where id = #{id}到底是#{id} 還是#{value},這兩個寫法裡邊是什麼區別?
⑤當使用batch remove的時候,批量刪除。裡邊需要使用迴圈。
<delete id = "batchRemove">
delete table from table where id in
<foreach item = "id" collection = "array" open = "(" seperator = "," close = ")">
#{id}
</foreach>
</delete>
⑥使用distinct 查詢
<select id="listType" resultType="com.bootdo.common.domain.DictDO"> select distinct `type` , description from sys_dict </select>