Mybatis 九种数据库 sql 实操方式

news/2024/5/18 22:22:15 标签: 数据库, mysql, sql, hibernate, jdbc

背景

现在越来越流行基于 SpringBoot 开发 web 应用,其中利用 mybatis 作为数据库 CRUD 操作已成为主流,楼主以 sql>mysql为例,总结了九大类使用 mybatis 操作数据库 sql 小技巧分享给大家。

  1. 分页查询

  2. 预置 sql 查询字段

  3. 一对多级联查询

  4. 一对一级联查询

  5. foreach 搭配 in 查询

  6. 利用if 标签拼装动态 where 条件

  7. 利用 chooseotherwise组合标签拼装查询条件

  8. 动态绑定查询参数:_parameter

  9. 利用 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 一对多级联查询

利用 mybatiscollection 标签,可以在每次查询文章主体同时通过 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>

queryparaminstancelistsql 语句

<select id="queryparaminstancelist" resultMap="ParamInstanceResultMap">
 select * from `cms_article_flow_param_instance` where article_id=#{id} 
</select>

04 一对一级联查询

利用 mybatisassociation 标签,一对一查询关联表数据。

<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 参数的含义

Mapperassociationcollection 指定只有一个参数时进行查询时,可以使用 _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

作者简介猿芯,一枚简单的北漂程序员。喜欢用简单的文字记录工作与生活中的点点滴滴,愿与你一起分享程序员灵魂深处真正的内心独白。我的微信号:WooolaDunzung,公众号【猿芯输入 1024 ,有份面试惊喜送给你哦

< END >

【猿芯】

 微信扫描二维码,关注我的公众号。

原创不易,莫要干想,如果觉得有点用的话,动动你的发财之手,一键三连击:分享、点赞、在看,你们的鼓励是我写作更多优质文章的最强动力 ^_^


http://www.niftyadmin.cn/n/1240728.html

相关文章

python中止程序的命令_python 如何终止进程

一、UNIX下Kill进程 os.kill() 一般用于直接Kill掉进程&#xff0c;但是只能在UNIX平台上有效。 基本原理&#xff1a;该函数是模拟传统的UNIX函数发信号给进程&#xff0c;其中包含两个参数&#xff1a;一个是进程名&#xff0c;即所要接收信号的进程&#xff1b;一个是所要进…

机器人辅助的符文天赋_闪烁之光手游:阿奇丽带什么符文 阿奇丽天赋符文攻略...

更多游戏资讯&#xff0c;请点击上方蓝字查询&#xff01;闪烁之光阿奇丽是本周刚刚出的新英雄&#xff0c;如果玩家抽不到或者置换不到&#xff0c;还可以直接去先知商店用45个碎片兑换前面有为大家分析过阿奇丽的技能&#xff0c;可以用在烧烤队里&#xff0c;那么阿奇丽带什…

python爬虫登录有验证码_python爬虫之自动登录与验证码识别

python爬虫之自动登录与验证码识别 来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日 【下载文档: python爬虫之自动登录与验证码识别.txt 】 (友情提示:右键点上行txt文档名->目标另存为) python爬虫之自动登录与验证码识别在用爬虫爬取网站…

实验室装水的容器叫什么_化学 初三上册 第一单元 1.3 走进化学实验室

教学目标1、知识与能力知道化学实验是进行科学探究的重要手段&#xff0c;严谨的科学态度、正确的操作方法和实验原理是保证实验成功的关键。了解一些化学实验室的规则&#xff0c;掌握常见仪器的名称和使用&#xff0c;培养学生的观察能力和动手能力。2、过程与方法采用教师的…

面试官问你 Redis 数据如何持久化,你应该这样回答

https://u.nu/20mh6Redis 提供了多种不同级别的持久化方式&#xff1a;RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照&#xff08;point-in-time snapshot&#xff09;。AOF 持久化记录服务器执行的所有写操作命令&#xff0c;并在服务器启动时&#xff0c;通过重新…

idea启动springboot卡_SpringBoot系列:快速开始Spring Boot

也许你现在用着SSH或者SSM框架&#xff0c;而且得心应手&#xff0c;但你确实应该尝试一下Spring Boot&#xff0c;感受Spring Boot带来的快捷开发。学习一项新技术迈出脚步很难&#xff0c;但一旦开始&#xff0c;你就会感觉格外简单&#xff0c;因为Spring Boot就是这么简单。…

python代码变量_Python(变量与简单数据类型)

变量与简单数据类型 1、python命名约定 在创建一个文件夹或文件名中&#xff0c;最好使用小写字母&#xff0c;并使用下划线来表示空格&#xff0c;因为这是python采用的命名约定。 2、变量的命名和使用 在Python中使用变量时&#xff0c;需要遵守一些规则和指南。违反这些规则…

技术选型 | Eureka 与 ZooKeeper 的优劣比较

https://u.nu/iogt8Eureka的优势1、在Eureka平台中&#xff0c;如果某台服务器宕机&#xff0c;Eureka不会有类似于ZooKeeper的选举leader的过程&#xff1b;客户端请求会自动切换到新的Eureka节点&#xff1b;当宕机的服务器重新恢复后&#xff0c;Eureka会再次将其纳入到服务…