一、增

  1、<trim> 和<if>实现数据插入

<insert id="addInOrder" parameterType="XXX.model.InOrder">
INSERT INTO inorder
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="inId != null and inId !=''" >
inId,
</if>
<if test="gender != null and gender !=''" >
gender,
</if>
<if test="modifiedDate != null and modifiedDate !=''" >
modifiedDate,
 </if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="inId != null and inId !=''" >
#{inId,jdbcType=VARCHAR},
</if>
<if test="gender != null and gender !=''" >
#{gender,jdbcType=INTEGER},
</if>
<if test="modifiedDate != null and modifiedDate !=''" >
#{modifiedDate,jdbcType=VARCHAR},
</if>
</trim>
</insert>

  2、新增时返回新增数据的 获取新增数据的 id值 <selectKey>

<insert id="addUser" parameterType="com.hotel3.model.User">
<selectKey keyProperty="userId" keyColumn="userId" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
INSERT INTO USER (userName,userPassword,userType) VALUES(#{userName},#{userPassword},#{userType});
</insert>

    结果:

 ==>  Preparing: INSERT INTO USER (userName,userPassword,userType) VALUES(?,?,?);
==> Parameters: Not_Copy(String), 222222(String), null
<== Updates: 1
==> Preparing: select last_insert_id();
==> Parameters:
<== Total: 1

    结论:select last_insert_id(); 将插入数据的主键返回到 user 对象中。

二、删

  <delete id="deleteInOrderById" parameterType="java.lang.String" >
delete from inorder
where inId = #{inId,jdbcType=VARCHAR}
</delete>

三、改

  Controller层传值代码:

   @PostMapping("/OverInOrder")
@ResponseBody
@Transactional
public Message OverInOrder(@RequestParam(value = "InIds[]")String[] InIds, HttpSession session){ User user= (User)session.getAttribute("loginUser");
inOrderService.OverInOrder(InIds,"结单",user.getUserName()); return new Message("", "success");
}

  DAO层代码:

public int OverInOrder(@Param("inIds") String[] inIds, @Param("status") String status, @Param("modifiedBy") String modifiedBy);

  Mapper 的XML文件:

<update id="OverInOrder" parameterType="java.lang.String">
update inorder
<set >
<if test="status != null and status !=''" >
status=#{status,jdbcType=VARCHAR},
</if>
<if test="modifiedBy != null and modifiedBy !=''" >
modifiedBy=#{modifiedBy,jdbcType=VARCHAR},
</if>
modifiedDate= SYSDATE(),
outTime= SYSDATE()
</set>
WHERE inId IN
<foreach collection="inIds" item="inId" index="index" open="(" close=")" separator=",">
#{inId}
</foreach>
</update>

四、查

<select id="getInOrderAll" resultType="XXX.model.InOrder" parameterType="XXX.model.InOrder">
select * from inorder
<trim prefix="where 1=1" suffix=" " suffixOverrides="," >
<if test="inId != null and inId !=''" >
and inId=#{inId,jdbcType=VARCHAR}
</if>
<if test="gender != null and gender !=''" >
and gender=#{gender,jdbcType=INTEGER}
</if>
<if test="inTime != null and inTime !=''" >
and inTime>=#{inTime,jdbcType=VARCHAR}
</if>
</trim>
ORDER BY createrDate DESC;
</select>

  1、模糊查询

<select id="getRoom" resultType="XXX.model.Room">
select * from room where roomId like CONCAT('%',#{roomId},'%' )
</select>

    待续。。。

    

关于SQL查询的技巧还有很多,像<where>和<selectKey>等。。。

待续。。。

Mybatis 之 SQL生成技巧的更多相关文章

  1. mybatis 动态SQL 源码解析

    摘要 mybatis是个人最新喜欢的半自动ORM框架,它实现了SQL和业务逻辑的完美分割,今天我们来讨论一个问题,mybatis 是如何动态生成SQL SqlSessionManager sqlSes ...

  2. 超全MyBatis动态SQL详解!( 看完SQL爽多了)

    MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...

  3. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPD ...

  4. MyBatis动态SQL(使用)整理

    MyBatis 令人喜欢的一大特性就是动态 SQL.在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的.MyBatis 动态 SQL 的出现, 解决了这个麻烦. MyBa ...

  5. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  6. SQL书写技巧

    SQL书写技巧: 1.针对分区表,如果可以使用分区条件的,一定要加分区条件.分区条件的使用,可以减少不必要的数据访问,加快查询数据,如TB_CSV_ACCEPT_FLOW_OPERATOR表,以acc ...

  7. 使用Mybatis Generator自动生成Mybatis相关代码

    本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...

  8. 【JAVA - SSM】之MyBatis动态SQL

    动态SQL就是在SQL语句中添加一些标签,以完成某些逻辑.通常用到的动态SQL标签有<if>.<choose>.<where>.<trim>.<s ...

  9. Mybatis自己主动生成代码

    在mybatis自己主动生成代码有两种方式: 方式一:是通过使用eclipse作为开发工具.採用maven来构建项目生成的.以下的演示是通过第一种方式. 今天来记录下mybatis-generator ...

随机推荐

  1. Kattis - itsamodmodmodmodworld It's a Mod, Mod, Mod, Mod World (类欧几里得)

    题意:计算$\sum\limits_{i=1}^n[(p{\cdot }i)\bmod{q}]$ 类欧模板题,首先作转化$\sum\limits_{i=1}^n[(p{\cdot}i)\bmod{q} ...

  2. SQL手工注入技巧

    MYSQL篇 1.内置函数和变量 @@datadir,version(),database(),user(),load_file(),outfile() 2.利用concat(),group_conc ...

  3. PHP preg_match正则表达式

    行定位符 ^表示开始 $表示结束 preg_match(模式,待搜索的字符串,$matches) 其中matches为可选参数,一旦匹配上,可以返回匹配结果 举个例子: $pattern = '/#\ ...

  4. zrender-粒子动画

    效果: let x = shuN.style.x + rectValue/4,//粒子开始的地方 y = zuY+140 + 5, h = 14*0.8, w = rectValue/2; this. ...

  5. Robot Framework中ride.py打不开的解决方法

    1.首先查看wxPython版本是否跟python的版本一致,一般都使用wxPython2.8-win64-unicode-2.8.12.1-py27.exe或者wxPython2.8-win32-u ...

  6. C# 桌面截屏 添加鼠标

    #region 第一种方法 [DllImport("user32.dll")] static extern bool GetCursorInfo(out CURSORINFO pc ...

  7. getch和getchar的区别

    造冰箱的大熊猫@cnblogs 2018/11/30 1.getc() 头文件:stdio.h 函数声明:int getc ( FILE * stream ); 功能: - 返回流(stream)当前 ...

  8. Confluence 6 预览一个文件

    当你浏览一个页面的时候,单击一个图片,文件缩略图或者链接将会运行预览. 预览视图包括了从远程 Web 页面导入的图片文件和已经附加到页面中的文件(尽管有可能这些文件没有在页面中显示). 在预览中你可以 ...

  9. 51 Nod 最大子矩阵和

    1051 最大子矩阵和  基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的 ...

  10. Windows下安装jdk

    1. 下载安装包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. 双击e ...