一、增

  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. mysql 主从 Last_IO_Errno错误代码说明

    Last_IO_Errno错误代码说明:  1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...

  2. Five minutes to understand async and defer

    Script tag When we want to insert a script into a web page, the standard way is to use the script ta ...

  3. grunt-contrib-uglify js压缩

    grunt-contrib-uglify:压缩以及合并JavaScript文件. 插件安装:npm install grunt-contrib-uglify --save-dev 参数: banner ...

  4. 无法将 DBNull.Value 强制转换为类型“System.DateTime”。请使用可空类型

    取数据库中的数据时,数据库中的字段有可能是空值,虽然Linq中的Field方法和SetField方法都可以处理可以为 null 的类型,不必像前面的示例那样检查 Null 值,我们再用Field将一些 ...

  5. docker 部署项目

    一:我使用的是阿里云的ubuntu16.4系统. 项目数据库: # 数据源 spring: datasource: type: com.zaxxer.hikari.HikariDataSource d ...

  6. PHP 下载+安装

    1.官网下载 官网地址:http://PHP.net/ 地址:http://download.csdn.NET/detail/anndy_/9494632 官网手册:https://secure.ph ...

  7. [JZOJ6244]【NOI2019模拟2019.7.1】islands【计数】【图论】

    Description n<=1e9,M,K<=100 Solution 显然任选m个港口的答案是一样的,乘个组合数即可. 考虑枚举m个港口的度数之和D 可以DP计算 记\(F_{m,D} ...

  8. 1143, 3997: Dilworth定理的简单应用

    偏序集上的最小链覆盖等于最长反链 于是两道题 1143: [CTSC2008]祭祀river 求偏序集上的最长反链 转换成偏序集上的最小链覆盖 求个闭包,转换成最小路径覆盖,二分图匹配一发 #incl ...

  9. HDU 3468:A Simple Problem with Integers(线段树+延迟标记)

    A Simple Problem with Integers Case Time Limit: 2000MS Description You have N integers, A1, A2, ... ...

  10. docker简单理解

    Docker是开源的一个基于轻量级虚拟化技术的容器引擎项目.它通过分层镜像标准化和内核虚拟化技术,使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的 ...