Mybatis 之 SQL生成技巧
一、增
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生成技巧的更多相关文章
- mybatis 动态SQL 源码解析
摘要 mybatis是个人最新喜欢的半自动ORM框架,它实现了SQL和业务逻辑的完美分割,今天我们来讨论一个问题,mybatis 是如何动态生成SQL SqlSessionManager sqlSes ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- 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 ...
- MyBatis动态SQL(使用)整理
MyBatis 令人喜欢的一大特性就是动态 SQL.在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的.MyBatis 动态 SQL 的出现, 解决了这个麻烦. MyBa ...
- SQL优化技巧
我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...
- SQL书写技巧
SQL书写技巧: 1.针对分区表,如果可以使用分区条件的,一定要加分区条件.分区条件的使用,可以减少不必要的数据访问,加快查询数据,如TB_CSV_ACCEPT_FLOW_OPERATOR表,以acc ...
- 使用Mybatis Generator自动生成Mybatis相关代码
本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...
- 【JAVA - SSM】之MyBatis动态SQL
动态SQL就是在SQL语句中添加一些标签,以完成某些逻辑.通常用到的动态SQL标签有<if>.<choose>.<where>.<trim>.<s ...
- Mybatis自己主动生成代码
在mybatis自己主动生成代码有两种方式: 方式一:是通过使用eclipse作为开发工具.採用maven来构建项目生成的.以下的演示是通过第一种方式. 今天来记录下mybatis-generator ...
随机推荐
- 【LOJ#536】「LibreOJ Round #6」花札
题目链接 题目描述 「UniversalNO」的规则如下:每张牌有一种颜色和一个点数.两个人轮流出牌,由 Alice 先手,最开始牌堆为空,出的人可以出任意牌(放到牌堆顶),之后出的牌必须和当时牌堆顶 ...
- linux运维、架构之路-Kubernetes离线集群部署-无坑
一.部署环境介绍 1.服务器规划 系统 IP地址 主机名 CPU 内存 CentOS 7.5 192.168.56.11 k8s-node1 2C 2G CentOS 7.5 192.168.56 ...
- layui的数据表格加上操作
数据表格加上操作. <script type="text/html" id="barDemo"> <a class="layui-b ...
- npm全局路径及cache路径设置
1.网上安装node的教程很多,下载安装包,自定义路径安装即可: 2.安装完成node默认npm已安装,可以通过npm安装其他包.cmd命令分别 node -v 或 npm -v 可以查看安 ...
- 理解ext文件系统
理解ext文件系统 @(0001学习博客) 注意:本文参考骏马金龙的博客,详情请移步浏览 一.一些常见的文件系统 Linux的文件系统: ext2(无日志功能), ext3, ext4, xfs, r ...
- 利用freemarker生成word,word另存为xml文件的标签解析
http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYU ...
- Redis数据结构常用命令
Redis数据结构--字符串
- 界面之下:还原真实的 MV* 模式
界面之下:还原真实的MV*模式 作者:戴嘉华 转载请注明出处并保留原文链接( https://github.com/livoras/blog/issues/11 )和作者信息. 目录: 前言 MVC ...
- 定时刷新指定div层
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- jQuery .delay()
.delay() Effects > Custom .delay( duration [, queueName ] )Returns: jQuery Description: Set a tim ...