一、增

  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. spring 视图解析 ——InternalResourceViewResolver

    原文:https://www.cnblogs.com/lyj-gyq/p/8963885.html Spring自带了13个视图解析器,能够将逻辑视图名转换为物理实现 首先将会介绍 InternalR ...

  2. /usr/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependency

    原因:python库中urllib3 (1.22) or chardet (2.2.1) 的版本不兼容 解决如下: [ [root@aaaaaaaaaaaaaaaaaaaa~]# pip uninst ...

  3. QT5 Even 事件

    事件的引入: 实现功能: 1.点击button 文本框两字改变成button被按下;很简单的在button上转到槽对lineEdit->setTest()设置即可; void myWidget: ...

  4. POJ 1149 猪圈买猪 建图太强大!! 没有透彻领悟 慢慢消化

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19575   Accepted: 8948 Description ...

  5. poj 3685 Matrix 二分套二分 经典题型

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 5724   Accepted: 1606 Descriptio ...

  6. python动态的添加方法

    1.动态的创建实例方法 1 class Person(object): 2 def __init__(self,name,age): 3 self.name = name 4 self.age =ag ...

  7. HUD 1166:敌兵布阵(线段树 or 树状数组)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  8. Express + Mongoose 极简入门

    今天尝试使用express + mongoose,构建了一个简单的Hello world,实现以下功能: 定义mongodb使用的Schema,一个User 访问/输出Hello world 访问/i ...

  9. Java并发编程的艺术笔记(四)——ThreadLocal的使用

    ThreadLocal,即线程变量,是一个以ThreadLocal对象为键.任意对象为值的存储结构.这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上 ...

  10. React 开发中面临的九个重要抉择

    抉择系列:在技术开发的过程中我们会面临着各种各样的抉择,我们在不同情境下该如何选择恰当的技术,这是本系列文章想要解决的问题. 在 React 开发的过程中我们常常会遇到一些抉择,下面我将选取其中一些个 ...