mybatis动态sql,批量插入,批量删除,模糊查询
trim可以去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。
trim的属性:
属性 | 描述 |
---|---|
prefix | 给sql语句拼接的前缀 |
suffix | 给sql语句拼接的后缀 |
prefixOverrides | 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND" |
suffixOverrides | 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定 |
mybatis中foreach的属性:
属性 | 描述 |
---|---|
collection | 要做foreach的对象,mapper接口传过来的参数 |
item | 集合中元素迭代时的别名,该参数为必选。 |
open | foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选 |
separator | 元素之间的分隔符 |
close | foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。 |
动态插入,选择性插入
mapper接口:
int insert(User user);
xml:
<!-- 插入用户 --><insert id="insert">insert into SYS_USER<trim prefix="(" suffix=")" suffixOverrides=",">ID,CODE,NAME,YEAR,PWD,ENABLED,<if test="tel != null and tel != ''">TEL,</if><if test="email != null and email != ''">EMAIL,</if><if test="addr != null and addr != ''">ADDR,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=",">#{id},#{code,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR},#{year,jdbcType=DECIMAL},#{pwd,jdbcType=VARCHAR},#{enabled,jdbcType=DECIMAL},<if test="tel != null and tel != ''">#{tel,jdbcType=VARCHAR},</if><if test="email != null and email != ''">#{email,jdbcType=VARCHAR},</if><if test="addr != null and addr != ''">#{addr,jdbcType=VARCHAR},</if></trim></insert>
批量插入
java:
int insertBatch(List<User> list);
xml:
<insert id="insertBatch">INSERT INTO t_user(id, name, del_flag)VALUES<foreach collection ="list" item="user" separator =",">(#{user.id}, #{user.name}, #{user.delFlag})</foreach >
</insert>
批量删除,(假删)
mapper接口:
/*** 通过id批量删除用户(逻辑删除)* @param ids 用户id集合* @param year 年份* @return 影响行数* @date 2020/8/11 21:29*/int booleanDeleteByIds(List<String> ids, int year);
xml:
<delete id="booleanDeleteByIds">update sys_userset bdel = 1where year = #{year}and id in<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach></delete>
选择性修改
java:
int baseInfoUpdate(ProjectPreBill projectPreBill);
xml:
<update id="baseInfoUpdate" parameterType="cn.wwkj.pms.repo.entity.po.ProjectRepoBill">update proj_pre_bill<trim prefix="set" suffixOverrides=","><if test="name!=null">name=#{name},</if><if test="bsId!=null">bs_id=#{bsId},</if><if test="enId!=null">EN_ID=#{enId},</if><if test="enPid!=null">EN_PID=#{enPid},</if><if test="bsgId!=null">bsg_id=#{bsgId},</if><if test="bsiId!=null">bsi_id=#{bsiId},</if><if test="pctId!=null">pct_id=#{pctId},</if><if test="pttId!=null">ptt_id=#{pttId},</if><if test="pgtId!=null">pgt_id=#{pgtId},</if><if test="muId!=null">mu_id=#{muId},</if><if test="bDate!=null">b_date=#{bDate},</if><if test="eDate!=null">e_date=#{eDate},</if><if test="manager!=null">manager=#{manager},</if><if test="contact!=null">contact=#{contact},</if><if test="tel!=null">tel=#{tel},</if><if test="addr!=null">addr=#{addr},</if><if test="allBudget!=null" >all_budget=#{allBudget},</if><if test="curBudget!=null">cur_budget=#{curBudget},</if><if test="purBudget!=null">pur_budget=#{purBudget},</if><if test="content!=null">content=#{content},</if><if test="basis!=null">basis=#{basis},</if><if test="necessity!=null">necessity=#{necessity},</if><if test="calcMethod!=null">calc_method=#{calcMethod},</if><if test="allGoal!=null">all_goal=#{allGoal},</if><if test="curGoal!=null">cur_goal=#{curGoal},</if><if test="plan!=null">plan=#{plan},</if></trim>WHERE id=#{id} and year = #{year}</update>
模糊查询
mapper接口:
/*** 根据当前用户ID,year查询所有 未删除项目* @param name 项目名称* @param bsgId 政府经济分类id数组* @param bsId 功能分类id数组* @param cdate 填报年月* @param muId 资金用途id数组* @param pctId 项目类别-内容分类 id数组* @param pgtId 项目类别-目标分类 id数组* @param pttId 项目类别-时间分类 id数组* @param year 当前年* @param mark 项目来源 3=GOAL:目标 2=IMP:导入 1=ADD:手工录入* @param enabled 项目状态 0:无效(被部门预算砍掉) 1:有效 -1:初始状态* @return 绩效项目集合* @author GaoDongYang* @date 2020/8/24 14:54**/List<ProjectRepoBill> getProjectRepoBillByParam(String name,List<String> bsId,List<String> bsgId,List<String> pctId,List<String> pttId,List<String> pgtId,List<String> muId,String cdate,Integer enabled,int year, String mark);
xml:
<select id="getProjectRepoBillByParam" resultType="cn.wwkj.pms.repo.entity.po.ProjectRepoBill">select p.id,p.en_id,p.code,p.name,s.name as mu_id_name,p.bgov,p.bcity,p.enabled,p.pur_budget,p.b_date,p.e_date,p.bsg_id,p.pct_id,p.pgt_id,p.bs_id,p.ptt_id,p.mu_id,p.bsi_id,p.source,p.year,p.all_budget,p.CUR_BUDGET,p.cu_id,p.manager,p.tel,p.contact,p.addr,(select name from sys_element_detail where id=p.bsg_id) as bsg_id_name,(select name from sys_element_detail where id=p.pct_id) as pct_id_name,(select name from sys_element_detail where id=p.bs_id) as bs_id_name,(select name from sys_element_detail where id=p.ptt_id) as ptt_id_name,(select name from sys_element_detail where id=p.pgt_id) as pgt_id_name,(select name from sys_element_detail where id=p.bsi_id) as bsi_id_name,to_char(p.cdate,'yyyy-mm-dd') cdatefrom proj_repo_bill pinner join sys_element_detail s on p.mu_id=s.id and p.year=#{year} and p.bdel=0<where><if test="name!=null and name!=''">and p.name like concat('%',concat(#{name},'%'))</if><if test="muId!=null and muId.size() > 0 ">and p.mu_id in<foreach collection="muId" item="muId" open="(" separator="," close=")">#{muId}</foreach></if><if test="bsId!=null and bsId.size() > 0">and p.bs_id in<foreach collection="bsId" item="bsId" open="(" separator="," close=")">#{bsId}</foreach></if><if test="bsgId!=null and bsgId.size() > 0">and p.bsg_id in<foreach collection="bsgId" item="bsgId" open="(" separator="," close=")">#{bsgId}</foreach></if><if test="pctId!=null and pctId.size() > 0">and p.pct_id in<foreach collection="pctId" item="pctId" open="(" separator="," close=")">#{pctId}</foreach></if><if test="pttId!=null and pttId.size() > 0">and p.ptt_id in<foreach collection="pttId" item="pttId" open="(" separator="," close=")">#{pttId}</foreach></if><if test="pgtId!=null and pgtId.size() > 0">and p.pgt_id in<foreach collection="pgtId" item="pgtId" open="(" separator="," close=")">#{pgtId}</foreach></if><if test="cdate!=null and cdate!=''">and to_char(p.cdate,'yyyy-mm')=#{cdate}</if><if test="mark==1">and p.source='ADD'</if><if test="mark==2">and p.source='IMP'</if><if test="mark==3">and p.source='GOAL'</if><if test="enabled==-1">and p.enabled=-1</if><if test="enabled==0">and p.enabled=0</if><if test="enabled==1">and p.enabled=1</if></where>order by p.code desc</select>
mybatis动态sql,批量插入,批量删除,模糊查询相关推荐
- SQL Server数据库表的基本操作(批量插入、删除、查询数据,删除表中重复数据方法)
实验名称:数据库表的基本操作与表内数据操作 实验目的: 掌握数据库表创建方法(交互式.T-SQL法) 掌握修改数据库表结构的方法 掌握删除数据库表的方法 掌握交互式EXCEL文件录入数据至数据库表的方 ...
- 【MyBatis动态SQL批量修改数据出现报错问题】
MyBatis动态SQL批量修改数据出现报错问题 MyBatis动态SQL批量修改数据出现报错问题 问题描述 XML文件中的动态SQL 执行结果 测试执行 报错日志 解决 原数据库URL 修改后数据库 ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...
- MyBatis动态SQL,写SQL更爽
点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...
- 后端技术:MyBatis动态SQL写法介绍
MyBatis 令人喜欢的一大特性就是动态 SQL.在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的.MyBatis 动态 SQL 的出现, 解决了这个麻烦. MyBa ...
- MyBatis动态SQL使用
MyBatis令人喜欢的一大特性就是动态SQL.在使用JDBC的过程中, 根据条件进行SQL的拼接是很麻烦且很容易出错的.MyBatis动态SQL的出现, 解决了这个麻烦.MyBatis通过OGNL来 ...
- MyBatis 动态 SQL,讲的很细
点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 整理:阿进的写字台 原文:cnblogs.com/homejim/p/9909657.html MyBatis 令人喜 ...
- MyBatis动态SQL详解
一:MyBatis动态 sql 是? 1.动态 SQL 是 MyBatis 的强大特性之一.在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句.根据不同的条件拼接 SQL 语句是 ...
最新文章
- 公共端接正极还是负极_【动力电池大事记】现代摩比斯启动首批模组工厂,松下拟挪威建厂,200名车主起诉现代,密歇根大学开发锂金属固态电池及“无负极”工艺...
- 实战:搭建CA认证中心,使用CA证书搭建HTTPS
- python3将列表当做堆栈使用
- Linux nohup和的功效
- eclipse 扩展_Eclipse扩展的轻量级集成测试
- 多对一(一对多)的双向关联
- ffmpeg 转换flv压缩大小_使用ffmpeg进行视频文件转换成FLV整理
- Spark Mllib里的如何对单个数据集用斯皮尔曼计算相关系数
- android执行lua脚本的方法,从Android应用程序调用Lua脚本
- oracle获取日期中日,关于ORACLE ERP中日记帐的借、贷对应的问题
- 使PNG图片在IE6下透明(非背景图片)
- MyCat 主键ID自增长配置
- 视频教程-R语言绘图基础-其他
- 简单易学的机器学习算法——Mean Shift聚类算法
- 华为路由器忘记密码怎么恢复
- data在python_Fake data的使用和产生 - Python篇
- IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
- 【CTF题】使用文件包含漏洞读取网页代码
- java升序排列数组_java 数组升序排列
- rjs 中的一些记下 免的忘 了