Mybatis 九种数据库 sql 实操方式
现在越来越流行基于 SpringBoot
开发 web
应用,其中利用 mybatis
作为数据库 CRUD
操作已成为主流,楼主以 mysql
为例,总结了九大类使用 mybatis
操作数据库 sql
小技巧分享给大家。
分页查询 预置 sql
查询字段一对多级联查询 一对一级联查询 foreach
搭配in
查询利用 if
标签拼装动态where
条件利用 choose
和otherwise
组合标签拼装查询条件动态绑定查询参数: _parameter
利用 set
配合if
标签,动态设置数据库字段更新值
01 分页查询
利用 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}
02 预置 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>
03 一对多级联查询
利用 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
的 sql
语句
<select id="queryparaminstancelist" resultMap="ParamInstanceResultMap">
select * from `cms_article_flow_param_instance` where article_id=#{id}
</select>
04 一对一级联查询
利用 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
后的 sql
字段进行匹配映射获取。
05 foreach 搭配 in 查询
利用 foreach
遍历 array
集合的参数,拼成 in
查询条件
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
06 利用 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>
07 利用 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>
08 隐形绑定参数:_parameter
_parameter
参数的含义
“当
Mapper
、association
、collection
指定只有一个参数时进行查询时,可以使用_parameter
,它就代表了这个参数。
另外,当使用 Mapper
指定方法使用 @Param
的话,会使用指定的参数值代替。
SELECT id, grp_no grpNo, province_id provinceId, status FROM tj_group_province
<where>
...
<if test="_parameter!=null">
and grp_no = #{_parameter}
</if>
</where>
09 利用 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
推荐阅读:
Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理欢迎关注微信公众号:互联网全栈架构,收取更多有价值的信息。
评论