SQLmybatis常用標籤
1. 定義sql語句
1.1 select 標籤
屬性介紹:
id
:唯一的識別符號.
parameterType
:傳給此語句的引數的全路徑名或別名 例:com.test.poso.User或user
resultType
:語句返回值型別或別名。注意,如果是集合,那麼這裡填寫的是集合的泛型,而不是集合本身(resultType 與resultMap 不能並用)
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object"> select * from student where id=#{id}</select>
1.2 insert標籤
屬性介紹:
id
:唯一的識別符號
parameterType
:傳給此語句的引數的全路徑名或別名
<insert id="insertUser" parameterType="User"> <!-- 主鍵回填,將新資料的ID,存入java物件的和主鍵對應的屬性中 --> <selectKey order="AFTER" resultType="int" keyProperty="id"> select last_insert_id() </selectKey> insert into t_user values(#{id},#{username},#{password},#{gender},#{registTime}) </insert>
1.3 delete標籤
屬性同 insert
<delete id="deleteByPrimaryKey" parameterType="Object"> delete from student where id=#{id}</delete>
1.4 update標籤
屬性同 insert
2. 配置JAVA物件屬性與查詢結果集中列名對應關係
resultMap 標籤的使用
基本作用:
建立SQL查詢結果欄位與實體屬性的對映關係資訊
查詢的結果集轉換為java物件,方便進一步操作。
將結果集中的列與java物件中的屬性對應起來並將值填充進去
注意:與java物件對應的列不是資料庫中表的列名,而是查詢後結果集的列名
<resultMap id="BaseResultMap" type="com.online.charge.platform.student.model.Student"> <id property="id" column="id" /> <result column="NAME" property="name" /> <result column="HOBBY" property="hobby" /> <result column="MAJOR" property="major" /> <result column="BIRTHDAY" property="birthday" /> <result column="AGE" property="age" /></resultMap> <!--查詢時resultMap引用該resultMap --> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object"> select id,name,hobby,major,birthday,age from student where id=#{id}</select>
標籤說明:
-
主標籤:
id
:該resultMap的標誌
type
:返回值的類名,此例中返回Studnet類 -
子標籤:
id
:用於設定主鍵欄位與領域模型屬性的對映關係,此處主鍵為ID,對應id。
result
:用於設定普通欄位與領域模型屬性的對映關係
3. 動態sql拼接
3.1 if 標籤
if標籤通常用於WHERE語句、UPDATE語句、INSERT語句中,通過判斷引數值來決定是否使用某個查詢條件、判斷是否更新某一個欄位、判斷是否插入某個欄位的值。
<if test="name != null and name != ''"> and NAME = #{name} </if>
3.2 foreach 標籤
foreach標籤主要用於構建in條件,可在sql中對集合進行迭代。也常用到批量刪除、新增等操作中。
<!-- in查詢所有,不分頁 --> <select id="selectIn" resultMap="BaseResultMap"> select name,hobby from student where id in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
屬性介紹:
collection
:collection屬性的值有三個分別是list、array、map三種,分別對應的引數型別為:List、陣列、map集合。
item
:表示在迭代過程中每一個元素的別名
index
:表示在迭代過程中每次迭代到的位置(下標)
open
:字首
close
:字尾
separator
:分隔符,表示迭代時每個元素之間以什麼分隔
3.3 choose標籤
有時候我們並不想應用所有的條件,而只是想從多個選項中選擇一個。MyBatis提供了choose 元素,按順序判斷when中的條件出否成立,如果有一個成立,則choose結束。當choose中所有when的條件都不滿則時,則執行 otherwise中的sql。類似於Java 的switch 語句,choose為switch,when為case,otherwise則為default。
if是與(and)的關係,而choose是或(or)的關係。
<select id="getStudentListChoose" parameterType="Student" resultMap="BaseResultMap"> SELECT * from STUDENT WHERE 1=1 <where> <choose> <when test="Name!=null and student!='' "> AND name LIKE CONCAT(CONCAT('%', #{student}),'%') </when> <when test="hobby!= null and hobby!= '' "> AND hobby = #{hobby} </when> <otherwise> AND AGE = 15 </otherwise> </choose> </where> </select>
4. 格式化輸出
4.1 where標籤
當if標籤較多時,這樣的組合可能會導致錯誤。 如下:
<select id="getStudentListWhere" parameterType="Object" resultMap="BaseResultMap"> SELECT * from STUDENT WHERE <if test="name!=null and name!='' "> NAME LIKE CONCAT(CONCAT('%', #{name}),'%') </if> <if test="hobby!= null and hobby!= '' "> AND hobby = #{hobby} </if> </select>
當name值為null時,查詢語句會出現 “WHERE AND” 的情況,解決該情況除了將"WHERE"改為“WHERE 1=1”之外,還可以利用where標籤。這個“where”標籤會知道如果它包含的標籤中有返回值的話,它就插入一個‘where’。此外,如果標籤返回的內容是以AND 或OR 開頭的,則它會剔除掉。
<select id="getStudentListWhere" parameterType="Object" resultMap="BaseResultMap"> SELECT * from STUDENT <where> <if test="name!=null and name!='' "> NAME LIKE CONCAT(CONCAT('%', #{name}),'%') </if> <if test="hobby!= null and hobby!= '' "> AND hobby = #{hobby} </if> </where> </select>
4.2 set 標籤
沒有使用if標籤時,如果有一個引數為null,都會導致錯誤。當在update語句中使用if標籤時,如果最後的if沒有執行,則或導致逗號多餘錯誤。使用set標籤可以將動態的配置set關鍵字,和剔除追加到條件末尾的任何不相關的逗號。
<update id="updateStudent" parameterType="Object"> UPDATE STUDENT SET NAME = #{name}, MAJOR = #{major}, HOBBY = #{hobby} WHERE ID = #{id}; </update>
<update id="updateStudent" parameterType="Object"> UPDATE STUDENT SET <if test="name!=null and name!='' "> NAME = #{name}, </if> <if test="hobby!=null and hobby!='' "> MAJOR = #{major}, </if> <if test="hobby!=null and hobby!='' "> HOBBY = #{hobby} </if> WHERE ID = #{id}; </update>
使用set+if標籤修改後,如果某項為null則不進行更新,而是保持資料庫原值。
<update id="updateStudent" parameterType="Object"> UPDATE STUDENT <set> <if test="name!=null and name!='' "> NAME = #{name}, </if> <if test="hobby!=null and hobby!='' "> MAJOR = #{major}, </if> <if test="hobby!=null and hobby!='' "> HOBBY = #{hobby} </if> </set> WHERE ID = #{id}; </update>
4.3 trim標籤
格式化輸出,也可以通過trim標籤設定或忽略前字尾來實現
5. 配置關聯關係
5.1 collection標籤
集合,用於一對多
<mapper namespace="com.qf.dao.DepartmentDAO"> <resultMap id="dept_emp" type="Department"> <id column="id" property="id"></id> <result column="name" property="name"></result> <result column="location" property="location"></result> <!-- emp_id emp_name salary employees --> <collection property="employees" ofType="Employee"> <id column="emp_id" property="id"></id> <result column="emp_name" property="name"></result> <result column="salary" property="salary"></result> </collection> </resultMap> <select id="queryDepartmentById" resultMap="dept_emp"> select t_departments.id ,t_departments.name,t_departments.location, t_employees.id emp_id,t_employees.name emp_name,t_employees.salary from t_departments join t_employees on t_departments.id = t_employees.dept_id where t_departments.id=#{id} </select></mapper>
5.2 association標籤
關聯,用於一對一
<mapper namespace="com.qf.dao.EmployeeDAO"> <resultMap id="emp_dept" type="Employee"> <id column="id" property="id"></id> <result column="name" property="name"></result> <result column="salary" property="salary"></result> <association property="department" javaType="Department"> <id column="deptId" property="id"></id> <result column="deptName" property="name"></result> <result column="location" property="location"></result> </association> </resultMap> <select id="queryEmployeeById" resultMap="emp_dept"> select t_employees.id,t_employees.name,t_employees.salary, t_departments.id deptId ,t_departments.name deptName,t_departments.location from t_employees join t_departments on t_departments.id = t_employees.dept_id where t_employees.id=#{id} </select></mapper>
6. 定義常量及引用
6.1 sql標籤
當多種型別的查詢語句的查詢欄位或者查詢條件相同時,可以將其定義為常量,方便呼叫。為求結構清晰也可將sql語句分解。
<!-- 查詢欄位 --> <sql id="Base_Column_List"> ID,MAJOR,BIRTHDAY,AGE,NAME,HOBBY </sql> <!-- 查詢條件 --> <sql id="Example_Where_Clause"> where 1=1 <trim suffixOverrides=","> <if test="id != null and id !=''"> and id = #{id} </if> <if test="major != null and major != ''"> and MAJOR = #{major} </if> <if test="birthday != null "> and BIRTHDAY = #{birthday} </if> <if test="age != null "> and AGE = #{age} </if> <if test="name != null and name != ''"> and NAME = #{name} </if> <if test="hobby != null and hobby != ''"> and HOBBY = #{hobby} </if> <if test="sorting != null"> order by #{sorting} </if> <if test="sort!= null and sort != '' "> order by ${sort} ${order} </if> </trim> </sql>
6.2 include標籤
用於引用定義的常量
<!-- 查詢所有,不分頁 --> <select id="selectAll" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List" /> FROM student <include refid="Example_Where_Clause" /> </select><!-- 分頁查詢 --> <select id="select" resultMap="BaseResultMap"> select * from ( select tt.*,rownum as rowno from ( SELECT <include refid="Base_Column_List" /> FROM student <include refid="Example_Where_Clause" /> ) tt <where> <if test="pageNum != null and rows != null"> and rownum <![CDATA[<=]]>#{page}*#{rows} </if> </where> ) table_alias where table_alias.rowno>#{pageNum} </select><!-- 根據條件刪除 --> <delete id="deleteByEntity" parameterType="java.util.Map"> DELETE FROM student <include refid="Example_Where_Clause" /> </delete>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989885/viewspace-2741262/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- html中常用的標籤-表格標籤HTML
- HTML 常用標籤HTML
- HTML常用標籤HTML
- html中常用的標籤-表單標籤HTML
- HTML 的常用標籤HTML
- HTML之常用標籤HTML
- 常用HTML標籤1HTML
- html-常用標籤HTML
- 常用標籤總結
- xss常用標籤
- html中常用的標籤-超連結標籤HTML
- HTML常用標籤的使用HTML
- HTML5常用標籤HTML
- 1.2 常用HTML標籤1HTML
- Mybatis中常用的標籤MyBatis
- HTML筆記 常用標籤HTML筆記
- HTML常用標籤介紹HTML
- html中常用的標籤HTML
- 常用HTML標籤3:表單HTML
- HTML 基本骨架與常用標籤HTML
- html5基本常用標籤HTML
- pbootcms常用標籤程式碼集合boot
- 什麼是JSTL標籤?常用的標籤庫有哪些?JS
- HTML 常用的標籤和屬性HTML
- HTML一些常用的標籤HTML
- 1.4 常用HTML標籤3:表單HTML
- 常用HTML標籤2:表格和列表HTML
- html中的其他的常用標籤HTML
- bootstrap2.3.2常用標籤的使用boot
- 常用的HTML標籤和屬性HTML
- 常用的標籤分類有哪些
- 你看我像不像學前端的人(三)——HTML常用標籤(影像標籤)前端HTML
- HTML常用基礎標籤:圖片與超連結標籤全解!HTML
- 1.3 常用HTML標籤2:表格和列表HTML
- HTML常用標籤或屬性全稱HTML
- springmvc常用註解標籤詳解SpringMVC
- 常用的HTML標籤詳解與總結HTML
- HTML學習記錄(2)(HTML常用標籤)HTML