mybatis-plus 自定义SQL,XML形式,传参的几种方式
mybatis-plus 自定义SQL,XML形式,传参的几种方式
前提说明
所涉及文件
传参类型说明
1.Java代码中使用QueryWrapper动态拼装SQL
2.简单类型参数(如String,Long,Integer等),适用于固定且确定的参数
3.参数传入类型为Class类,或mybatis-plus生成的 entity类
4.参数传入类型为Map类型的数据
前提说明
在使用 mybatis-plus 进行操作数据库,有一部分比较复杂的操作需要写SQL语句,这样就会涉及到传参数。下面记载一下我遇到的几种传参数情况。如果有更好的可以留言,继续完善。 所涉及文件
自定义SQL涉及到两种类型的文件:###Mapper.java 和 ###Mapper.xml 。这两种文件都是mybatis-plus自动生成的。
例如下面的例子: TGrouponMapper.java文件的内容
public interface TGrouponMapper extends BaseMapper<TGroupon> {
/**
* @description: 获取用户参加的团购信息
* @author: haojg
* @date: 2020/6/18 19:48
* @return:
*/
IPage<TGroupon> selectUserJoinGroupon(Page<?> page, @Param("userId") Long userId);
} TGrouponMapper.xml文件的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hddata.xpt.db.mapper.TGrouponMapper">
<select id="selectUserJoinGroupon" resultType="TGroupon">
SELECT g.*, ref.join_status, ref.join_name, ref.join_phone, ref.user_id as join_user_id
FROM t_groupon g, t_groupon_user_ref ref
WHERE g.id = ref.groupon_id
AND g.is_delete != 1
AND ref.user_id = ${userId}
ORDER BY g.create_time desc
</select>
</mapper> 传参类型说明
1.Java代码中使用QueryWrapper动态拼装SQL
Java代码中使用QueryWrapper动态拼装SQL后,最后在马Mapper.xml文件中使用。这种情况适用于where条件比较复杂,分支比较多的情况,更多情况自己品味吧。直接上代码如下: Mapper.java文件内容:
public interface TIdentityDocumentInfoMapper extends BaseMapper<TIdentityDocumentInfo> {
/**
* @Description: 根据身份证和医院患者Id获取系统患者Id等信息
* @Author: Haojg on 2019/8/7 23:37
* @return:
*/
List<TIdentityDocumentInfo> getPatientByIdAndPat(@Param(Constants.WRAPPER) QueryWrapper<TIdentityDocumentInfo> wrapper); } Mapper.xml文件内容: ew.sqlSegment 是固定的写法,请注意。 <select id="getPatientByIdAndPat" resultType="TIdentityDocumentInfo">
SELECT t1.*, t3.*
FROM t_medical_card_info t1, t_identity_document_info t3
WHERE t1.identity_document_id = t3.identity_document_id
AND ${ew.sqlSegment}
</select> 调用接口方法:
这里通过Java直接拼接where语句。 QueryWrapper<TIdentityDocumentInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("t3.id", IdCard);
queryWrapper.eq("t1.hospital_id", hosId);
List<TIdentityDocumentInfo> queryList = tIdentityDocumentInfoMapper.getPatientByIdAndPat(queryWrapper); 2.简单类型参数(如String,Long,Integer等),适用于固定且确定的参数
这种情况直接上代码。 Mapper.java文件内容,通过 @Param 进行参数设置。
IPage<TGroupon> selectUserJoinGroupon(Page<?> page, @Param("userId") Long userId);
1
Mapper.xml文件内容:直接使用参数 userId
<select id="selectUserJoinGroupon" resultType="TGroupon">
SELECT g.*, ref.join_status, ref.join_name, ref.join_phone, ref.user_id as join_user_id
FROM t_groupon g, t_groupon_user_ref ref
WHERE g.id = ref.groupon_id
AND g.is_delete != 1
AND ref.join_status != 0
AND ref.user_id = ${userId}
ORDER BY g.create_time desc
</select> 3.参数传入类型为Class类,或mybatis-plus生成的 entity类
Mapper.java文件内容: **HoRefunds ** 是数据库中表映射成的entity类
int updateRefundOk(@Param("subTable") String subTable, @Param("hoRefunds") HoRefunds hoRefunds);
1
Mapper.xml文件内容中, 如下面的代码中: hoRefunds.refundResponse , hoRefunds 是 entity类, refundResponse 是字段名称。
<update id="updateRefundOk">
update ho_refunds_${subTable} set
refund_request = #{hoRefunds.refundRequest},
refund_response = #{hoRefunds.refundResponse},
err_code = #{hoRefunds.errCode},
err_code_des = #{hoRefunds.errCodeDes}
where id = #{hoRefunds.id}
</update> 4.参数传入类型为Map类型的数据
当entity类不满足情况的时候,可以使用Map类型的数据,具体例子如下。 Mapper.java文件内容: paramsMap 为Map类型
public int getPushHistoryIsExsit(Map<String, Object> paramsMap);
1
Mapper.xml文件内容中,
01,标明传入参数的类型 ** parameterType=“java.util.Map” **
02,直接使用传入参数中的Key, 如:step , cardId, notifyType
<select id="getPushHistoryIsExsit" parameterType="java.util.Map" resultType="int">
select count(t1.id) from hcustom_his_push t1
inner join hcustom_notify_config t2
on t1.notify_config_id = t2.id
and t2.notify_steps = #{step} and t2.notify_type = #{notifyType} and t1.medical_card_id = #{cardId}
</select> 调用实例
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("cardId", cardId);
paramsMap.put("step", step);
paramsMap.put("notifyType", notifyType);
int pushCount = hcustomHisPushMapper.getPushHistoryIsExsit(paramsMap);
mybatis-plus 自定义SQL,XML形式,传参的几种方式的更多相关文章
- Vue路由传参的几种方式
原 Vue路由传参的几种方式 2018年07月28日 23:52:40 广积粮缓称王 阅读数 12613 前言:顾名思义,vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效.传参方式 ...
- react-绑定this并传参的三种方式
绑定this并传参的三种方式 在事件中绑定this并传参: <input type="button" value="在事件中绑定this并传参" onCl ...
- ajax的data传参的两种方式
ajax的data传参的两种方式 本文为转载. 1.[javascript] view plain copy /** * 订单取消 * @return {Boolean} 处理是否成功 */ func ...
- vue 路由传参中刷新页面参数丢失 及传参的几种方式?
在页面跳转中,我通过路由传参,结果发现页面参数丢失了.路径返回了根目录.... 1. 先说下路由传参的几种方式吧? 比如:<div v-for="item in items" ...
- jq ajax传参的两种方式
第一种 在url ? 后通过拼接传参 第二种 通过data传参 (1)第一种方法:(通过url传参) function GetQuery(id) { if (id ==1||id==7) { ...
- mybatis传参的几种方式
1,@Param @参考文章 @Select("select s_id id,s_name name,class_id classid from student where s_name= ...
- TestNG传参的几种方式
1. 通过parameter传参 java代码部分: import org.testng.annotations.Parameters; import org.testng.annotations.T ...
- vue里面路由传参的三种方式
1.方式一 通过query的方式也就是?的方式路径会显示传递的参数 HTML的方式<router-link :to="{name:xxx,query:{page:1,code:8899 ...
- 总结QueueUserWorkItem传参的几种方式
最近在学习citrix的xenserver6.2的源代码,发现多处用到System.Threading命名空间下的ThreadPool.QueueUserWorkItem方法: public stat ...
随机推荐
- JZOJ2020年8月7日提高组反思
JZOJ2020年8月7日提高组反思 T1 暴力枚举 枚举起点和\(p\) 然后就 过了?! 根据本人不严谨的推算 时间复杂度\(O(\dfrac{n^7}{4})\) 数据太水就过去了QAQ T2 ...
- django 不使用序列化器时进行查询结果序列化
在app01views中添加 class User1(View): def post(self,request): user=User.objects.all() list=[] for i in u ...
- moviepy音视频开发:音频合成类CompositeAudioClip介绍
☞ ░ 前往老猿Python博文目录 ░ CompositeAudioClip是AudioClip的直接子类,用于将几个音频剪辑合成为一个音频剪辑.CompositeAudioClip类只有一个构造方 ...
- 第8.32节 Python中重写__delattr__方法捕获属性删除
一. 引言 上节介绍了__delattr__方法在Python清除实例属性时被捕获执行,本节结合例子介绍重写__delattr__方法,并说明__delattr__方法执行的触发逻辑. 二. 重写__ ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的geometry几何属性
geometry属性保存部件相对于其父级对象的位置和大小,Qt实际上是以一个长方形来表示部件的位置和大小的,包括左上角的坐标位置.长度和宽带. 当部件的geometry调整时,部件如果可见将立即接收m ...
- PyQt(Python+Qt)学习随笔:formLayout的layoutFieldGrowthPolicy属性
Qt Designer的表单布局(formLayout)中,layoutFieldGrowthPolicy用于控制表单布局中输入部件大小的增长方式.如图: 该字段实际与QFormLayout类的Fie ...
- scrapy爬取微信小程序社区教程(crawlspider)
爬取的目标网站是: http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1 目的是爬取每一个教程的标题,作者,时间和 ...
- ASP数据库连接方法语法总结
经常使用到有关数据库的操作.包括连接代码,SQL命令等等,又不曾刻意去记忆它们(我本人是不愿意去记这东东),所以常常在用到的时候又去查书本,翻来翻去.一些比较少用的数据库还不一定能顺利找到,所以现在把 ...
- 国际关注,Panda 交易所获悉美银监机构批准特许银行托管加密资产
近期,Panda 交易所注意到,根据此前与Cointelegraph分享的一份声明,美国货币监理署(OCC)正在授予联邦特许银行托管加密货币的权限. 鉴于加密钱包与其他种类资产的托管要求不同,这一问题 ...
- 10分钟快速入门vue.js
Vue.js是一个轻巧.高性能.可组件化的MVVM库,一套用于构建用户界面的渐进式框架,上手简单,兼容强大. 官方文档:https://cn.vuejs.org/v2/guide/ 下面我们就直接来使 ...