一.Mybatis 动态sql 之<where>标签和<trim>标签

  首先两个标签都可以实现这样的功能:做一个查询接口,有两个参数,当输入参数无论是一个还是两个或者不输入的时候,sql都不会报错,都会返回相应的结果,实现动态sql的目的。

方法一:<where>标签

<select id="selectByModuleUuidAndAppUuid" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from dev_app_res
<where>
<if test="appUuid != null" >
and app_uuid = #{appUuid,jdbcType=VARCHAR}
</if>
<if test="modUuid != null" >
and mod_uuid = #{modUuid,jdbcType=VARCHAR}
</if>
</where>
</select>

where 元素知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句(不输入条件时,查询全部),而且,若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。

  方法二:<trim>标签

<select id="selectByCondition" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from auth_app_res
<trim prefix="where" prefixOverrides="and">
<if test="modUuid!='' and modUuid!=null">
and mod_uuid=#{modUuid}
</if>
<if test="appUuid!='' and appUuid!=null">
and app_uuid=#{appUuid}
</if>
<if test="appUuid='' and appUuid=null and modUuid='' and modUuid=null">

</if>
</trim>
</select>

  本人喜欢<where>标签。

二.数据库的左连接和右连接的写法

左连接select * from table1 as a left join table2 as b on a.id = b.id
右连接select * from table1 as a right join table2 as b on a.id = b.id
as去掉也没有问题

三.mybatis insert操作 返回主键的方法


在使用Mybatis做持久层的时候,insert默认返回的是插入记录的条数,如果根据业务需求需要返回记录的主键时,可以这样编写sql语句。

单条插入:

<insert id="add" parameterType="vo.Category">

<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">

SELECT LAST_INSERT_ID() AS id

</selectKey>

insert into category (name_zh, parent_id,

show_order, delete_status, description

)

values (#{nameZh,jdbcType=VARCHAR},

#{parentId,jdbcType=SMALLINT},

#{showOrder,jdbcType=SMALLINT},

#{deleteStatus,jdbcType=BIT},

#{description,jdbcType=VARCHAR}

)

</insert>

批量插入:

<insert id="batchInsert" parameterType="java.lang.List">

  <selectkey keyproperty="uuid" order="AFTER" resultType="int">

  select Last_Insert_ID()

  </selectkey>

  insert into auth_app_func(uuid,appUuid)values

  <foreach collection="list" item="item" index="index" separator=",">

  (#{item.uuid},#{item.appUuid})

  </foreach>

</insert>


 四.mybatis 批量修改

<update id="batchUpdate" parameterType="cn.lz.authAppFuncFilter">

update auth_app_func set group_uuid=#{groupUuid}

where uuid in

<foreach collection="listUuid" index="index" item="item" separator="," open="(" close=")">

#{item}

</foreach>

</update>

SQL语句平时不注意的那些小知识点总结的更多相关文章

  1. 能写数据后台,需要掌握哪些进阶的sql语句?

    国庆假期花了一些时间,首次尝试并玩转 grafana,这几天继续不断优化和完善,如今看着自己的成果,相当满意.--逐步接近我想要的理想后台啦. 需求是不停歇的.今天我又给自己发掘了一些新需求,比如变量 ...

  2. [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  3. SQL语句小总结

    无论是面试过程中,还是未来工作中,SQL都是一定会考到和用到的.所以,在此对之前看过的一些SQL知识点进行一下总结和记录,算是起到一个笔记本的作用.没有深入学习过SQL的和对SQL印象不太深的朋友可以 ...

  4. 一个自动生成插入与更新SQL语句的小类

    无需关注字段类型,只要传入字段名与值的集合,自动生成Ms sql server SQL语句.详见Test()方法 using System; namespace Fan.iData.SqlUtilit ...

  5. (小技巧)Sql server查看sql语句的执行时间(转)

    转自CSDN: 在写数据库sql的时候,我们往往很关心该sql语句的执行效率,如下小技巧可以帮助程序员简单快速的得到某条或某几条sql的执行时间. declare @d datetime set @d ...

  6. 自制小工具大大加速MySQL SQL语句优化(附源码)

    引言 优化SQL,是DBA常见的工作之一.如何高效.快速地优化一条语句,是每个DBA经常要面对的一个问题.在日常的优化工作中,我发现有很多操作是在优化过程中必不可少的步骤.然而这些步骤重复性的执行,又 ...

  7. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

  8. 这两个小技巧,让我的SQL语句不仅躲了坑,还提升了1000 倍

    原文: https://cloud.tencent.com/developer/article/1465618 本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查 ...

  9. sql语句小记录

    测试过程中,需要去数据库中查询一些结果,比如验证码 常用的是查询 更新比较少用 删除一般不用 sql查询语句的嵌套用法,比较实用 比如in的用法:第一种:查询多个值时 SELECT "栏位名 ...

随机推荐

  1. centos 开机自启设定:

    在sentos系统下,主要有两种方法设置自己安装的程序开机启动.1.把启动程序的命令添加到/etc/rc.d/rc.local文件中,比如下面的是设置开机启动httpd. #!/bin/sh # # ...

  2. k8s环境搭建--基于kubeadm方法

    环境 master node: 数量 1, 系统 ubuntu 16.04_amd64 worker node: 数量 1, 系统 ubuntu 16.04_amd64 kubernetes 版本: ...

  3. Calico网络方案

    参考文档: Difficulties with traditional overlay networks:https://www.projectcalico.org/learn/ Get Start( ...

  4. sublime c/c++ 环境

    sublime c/c++ 环境 参考: 别人的教程1 别人的教程2 注意,一定要用cmd先试一下,编译成功后再用sublime试 我遇到了一个很诡异的问题,就是cmd运行正常但sublime显示 在 ...

  5. First Blood

    自我介绍 大家好!我的名字是戴俊涵,代号211606359,喜欢看电影和古风音乐,也是一个资深漫迷(让世界感受痛楚吧),喜欢的美食是牛排. 回想初衷 (1)回想一下你初入大学时对本专业的畅想 当初你是 ...

  6. MFC按钮、列表控件应用实例(一)

    需求:实现张三.李四.王五 3 人的课程选择,并将选课结果提交到列表框中显示. 实现过程: 1.建立对话框mfc工程. 2.添加控件 tab 顺序 控 件 类 型 控件 ID1 Button IDC_ ...

  7. Date 类的使用

    package com.Date.Math; import java.text.ParseException; import java.text.SimpleDateFormat; import ja ...

  8. 【动态规划】POJ-2229

    一.题目 Description Farmer John commanded his cows to search for different sets of numbers that sum to ...

  9. 使用 java 实现一个简单的 markdown 语法解析器

    1. 什么是 markdown Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的 ...

  10. 使用docker inspect获取数据卷信息时返回地址为空

    使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...