1. 程式人生 > >複雜SQL語句的書寫(mybatis中XML檔案的核心)

複雜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>