问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mybatis mapper sql语句

发布网友 发布时间:2022-04-30 10:59

我来回答

2个回答

懂视网 时间:2022-04-30 15:20


<select id="productId" parameterType="Product" resultMap="getProduct">
 SELECT * FROM PRODUCT t WHERE (1=1)
 <if test="Product.productId!=null">
 AND t.PRODUCT_ID = #{Product.productId}
 </if>
 <if test="Product.productName!=null">
 AND t.PRODUCT_NAME like ‘%#{Product.productName}%‘
 </if>
 <if test="Product.inStock!=null">
 AND t.PRODUCT.INSTOCK = 0
 </if>
 ORDER BY SEQUENCE_NO
</select>

2.这适用于数据库有默认值的时候可以不让插入空值
<insert id="addCategory" parameterType="Category">
 INSERT INTO CATEGORY(
 <if test="categoryName!=null and categoryName!=‘‘ ">
 CATEGORY_NAME
 </if>
 <if test="categoryId!=null and categoryId!=‘‘ ">
 CATEGORY_ID
 </if>
 ADD_TIME)
 VALUES(
 <if test="categoryName!=null and categoryName!=‘‘ ">
  #{categoryName, jdbcType=VARCHAR}
 </if>
 <if test="categoryId!=null and categoryId!=‘‘ ">
  #{categoryId, jdbcType=NUMERIC}
 </if>
 currentTimeStamp
 )
</insert>

3.这条动态地修改语句用得非常多,是因为很多时候我们在做修改操作时并不确定到底要修改哪些字段(哪些属性),可能有的需要保存原值不变.
这时候就可以做动态的sql,你新建一个对象后,将需要修改的字段附上新值,这样不用修改的属性在这个对象上表现的是null,调用这个动态的sql时便可以完成部分修改。
<update id="updateCategory" parameterType="Category">
 update CATEGORY t SET
 <if test="categoryName!=null">
 t.CATEGORY_NAME = #{categoryName, jdbcType=VARCHAR},
 </if>
 <if test="updateUser!=null">
 t.UPDATE_USER = #{updateUser, jdbcType=VARCHAR},
 </if>
 t.UPDATE_TIME = currentTimeStamp
 WHERE t.CATEGORY_ID = #{categoryId, jdbcType=NUMERIC}
</update>

4.choose,when,otherwise
适用场景:我们不想用到所有的条件语句,而只想从中择其一二。
针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
(我感觉它有点像提供多种条件规则时,而这些规则又可以综合写在一起时)
<select id="findInStockLike" resultType="Product">
 SELECT * FROM PRODUCT WHERE STATE = ‘INSTOCK‘
 <choose>
 <when>
  AND TITLE LIKE #{title}
 </when>
 <when>
  AND BRAND_NAME LIKE #{brand.name}
 </when>
 <otherwise>
  AND INMARKETING = 0
 </otherwise>
 </choose>
</select>

5.where, set, trim
为了避免当if动态条件都不成立时,或者第一个条件不成立第二个条件成立时出现
诸如"select * from TableA where"
或者"select * from TableA and where"病态sql,
我们可以使用where, set, trim标签来解决。
5.1)where
<select id="findInStockProductLike" resultType="Product">
 SELECT * FROM PRODUCT
 <when>
 <if test="state!=null">
  STATE = #{state}
 </if>
 <if test="title!=null">
  AND TITLE LIKE #{title}
 </if>
 <if test="brand!=null and brand.name!=null">
  AND BRAND_NAME LIKE #{brand.name}
 </if>
 </when>
</select>
在实际应用中,我通常是不写where标签,而在where关键字之后加上1=1的条件。即不管有无动态条件,总可以得到完整的sql:select * from A where 1=1。。。
5.2)set
<update id="updateUserInfo">
 UPDATE USER
 <set>
 <if test="userName!=null">USER_NAME = #{userName}</if>
 <if test="userPsw!=null">USER_PSW = #{userPsw}</if>
 <if test="userEmail!=null">USER_EMAIL = #{userEmail}</if>
 </set>
 WHERE USER_ID = #{userId}
</update>

6.foreach
foreach有时候在项目中会遇到,而且不止一次,用的时候是需要动点脑子的。
通常用于筛选出在多个值组成的一个集合中或者排除多个值的场景.
说白了,也就是我们之前写sql时用到in、not in的时候:(集合是动态不确定的,需要从前台传值过来)
<select id="selectProdcutNoInOrder" resultType="String">
 SELECT COUNT(0) FROM PRODUCT a LEFT JOIN ORDER_INFO b
 ON a.PRODUCT_ID = b.PRODUCT_ID
 WHERE a.STATUS in(‘1‘, ‘2‘, ‘3‘, ‘6‘)
 <if test="list.size()>0">
 AND b.PHONE_NUM IN
 <foreach item="phoneNumList" collection="list" open="(" separator="," close=")">
  #{phoneNumList.num}
 </foreach>
 </if>
</select>
foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。
它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。
这个元素是很智能的,因此它不会偶然地附加多余的分隔符。
注意,你可以将一个 List 实例或者数组作为参数对象传给 MyBatis,当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中并以名称为键。
List 实例将会以“list”作为键,而数组实例的键将是“array”。
<select id="selectProductIn" resultType="com.dowik.dowikmall.Product">
 SELECT * FROM PRODUCT p WHERE PRODUCT_ID IN
 <foreach item="productIdList" index="index" collection="list" open="(" separetor="," close=")">
 #{productIdList}
 </foreach>
</select>



MyBatis常用SQL语句整理笔记

标签:

热心网友 时间:2022-04-30 12:28

--OracleSEQUENCE序列语法:CREATESEQUENCE序列名[INCREMENTBYn][STARTWITHn][{MAXVALUE/MINVALUEn|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];示例:CREATESEQUENCEsq_test--序列名INCREMENTBY1--每次加几个STARTWITH1--从1开始计数MAXVALUE9999999--最大值9999999NOCYCLE--一直累加,不循环NOCACHE;SELECTsq_test.NEXTVALFROMDUAL;可以使用sequence的地方:--不包含子查询、snapshot、VIEW的SELECT语句--INSERT语句的子查询中--NSERT语句的VALUES中--UPDATE的SET中可以看如下例子:INSERTINTOtable_nameVALUES(sq_test.nextval,'CLERK',1200,SYSDATE);追问你在说什么?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
分手后我还想着他,我该怎么办? 为什么人们会对曾经抛弃自己的人产生好感? Java 中如何加密配置文件中的数据库账号和密码? Java 实现MD5加密 我想学编程,html,css,asp,,javascript,delphi,java,jsp,Ajax那个语言最... html5初学者,想问一下好学吗 如何用支付宝给自己微信转账 亚太7号卫星天线为什么雨天图像一停一停怎样解决? 天水华阳国际购物广场 街机武侠铜钱有什么用? 如何从外形上分辨出阀门的种类 止逆阀种类分为哪几类 妈妈,您知道吗 你是如何称呼自己母亲的 写母亲作文在文章中用母亲这个人称还是用妈妈这个人称好 我们常把黄河比作母亲,为什么课文《黄河颂》称呼黄河不用“您”而用“你”? 写给爸爸妈妈的书信,要用您们好还是你们好 自己的爸爸妈妈自己长大后该叫您还是你呢? 称呼爸爸妈妈和老师用您们好还是用你们比较好 古代对父母称呼是你还是您?还是别的什么? 写关于母亲作文用你,还是您好些? 妈妈你还是您好,那个对 写信给妈妈,有一句“妈妈我想(您)。应该写你还是您 写给母亲的一封信,对母亲的称呼用您还是用你好? 写给妈妈的信用你还是您,我觉得用你亲切点,但用您尊敬点,用哪个捏 妈妈你辛苦了用你还是用您哪个会比较好? 我应该把我妈叫成“你”还是应该叫成“您”? 称母亲可以称“您”字吗? 蓝魔r1产品说明书 激活word2016需要花钱吗? “低声细语”的意思是什么?快一点 低声细语。是什么意思? 低声细语是什么意思? 低声细语的意思是? 我要画一张有关“畅想未来”的画,但没有题材,不懂画,求各位大师求解 提示:不要儿童画的的。 低声细语的意思 要画畅想未来城市怎么画,要有想象力。 请问大家画未来 畅想科技未来画 怎么画?主题多一些可以吗?(有天空上的,海里的,果园里的,城市里) 低声细语是什么意思 低声细语问安泰是什么意思? 《“畅想未来”绘画比赛》有谁可以帮我想想画什么? 仪表堂堂和低声细语是什么意思 创想兰州未来的手抄报 低声细语的近义词是什么? 关于畅想未来的漫画怎么画 “喃喃细语”是什么意思? 急需畅想美好未来的图片 低声细语是含有近义词的成语吗? 有谁知道创想未来是干什么的? 响彻云霄的意思和低声细语意思细细私语的意思还有鸦鹊无声的意思悄无声息的意思