現在越來越流行基于Springboot開發web應用,其中利用MyBatis作為數據庫CRUD操作已成為主流,樓主總結了九大類使用mybatis操作數據庫sql小技巧分享給大家。
- 分頁查詢
- 預置sql查詢字段
- 一對多級聯查詢
- 一對一級聯查詢
- in查詢
- 利用if標簽拼裝動態where條件
- 利用choose和otherwise組合標簽拼裝查詢條件
- 動態綁定查詢參數:_parameter
- 利用set配合if標簽,動態設置數據庫字段更新值
1、分頁查詢
以MySQL為例,利用limit設置每頁offset索引和每頁limit大小
select * from sys_user u LEFT JOIN sys_user_site s ON u.user_id = s.user_id LEFT JOIN sys_dept d ON d.dept_id = s.dept_id LEFT JOIN sys_emailinfo e ON u.user_id = e.userid AND e.MAIN_FLAG = 'Y' <where> <include refid="userCondition"/> </where> limit #{offset}, #{limit}
2、預置sql查詢字段
<sql id="columns"> id,title,content,original_img,is_user_edit,province_id,status,porder </sql>
查詢select語句引用columns:
<select id="selectById" resultMap="RM_MsShortcutPanel"> seelct <include refid="columns"/> from cms_self_panel where id = #{_parameter} </select>
3、一對多級聯查詢
利用mybatis的collection標簽,可以在每次查詢文章主體同時通過queryparaminstancelist級聯查詢出關聯表數據。
<resultMap id="BaseResultMap" type="com.unicom.portal.pcm.entity.ArticleEntity"> <id column="id" jdbcType="BIGINT" property="id"/> <collection property="paramList" column="id" select="queryparaminstancelist"/> </resultMap>
queryparaminstancelist的select sql語句
<select id="queryparaminstancelist" resultMap="ParamInstanceResultMap"> select * from `cms_article_flow_param_instance` where article_id=#{id} </select>
4、一對一級聯查詢
利用mybatis的association標簽,一對一查詢關聯表數據。
<resultMap id="BaseResultMap" type="com.unicom.portal.pcm.entity.ArticleEntity"> <association property="articleCount" JAVAType="com.unicom.portal.pcm.entity.MsArticleCount"/> </resultMap>
查詢sql語句:
MsArticlecount實體對象的字段值可以從下面select中的字段值獲取。
5、in查詢
利用foreach遍歷array集合的參數,拼成in查詢條件
<foreach collection="array" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach>
6、利用if標簽拼裝動態where條件
select r.*, (select d.org_name from sys_dept d where d.dept_id = r.dept_id) deptName from sys_role r <where> r.wid = #{wid} <if test="roleName != null and roleName.trim() != ''"> and r.`role_name` like concat('%',#{roleName},'%') </if> <if test="status != null and status.trim() != ''"> and r.`status` = #{status} </if> </where>
7、利用choose和otherwise組合標簽拼裝查詢條件
<choose> <when test="sidx != null and sidx.trim() != ''"> order by r.${sidx} ${order} </when> <otherwise> order by r.role_id asc </otherwise> </choose>
8、動態綁定查詢參數:_parameter
SELECT id, grp_no grpNo, province_id provinceId, status FROM tj_group_province <where> <if test="_parameter!=null"> and grp_no = #{_parameter} </if> </where>
9、利用set配合if標簽,動態設置數據庫字段更新值
<update id="updateById"> UPDATE cms_label <set> <if test="labelGroupId != null"> label_group_id = #{labelGroupId}, </if> dept_id = #{deptId}, <if test="recommend != null"> is_recommend = #{recommend}, </if> </set> WHERE label_id = #{labelId} </update>