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 ...
随机推荐
- 红帽Linux故障定位技术详解与实例(3)
红帽Linux故障定位技术详解与实例(3) 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行 ...
- 一例tornado框架下利用python panda对数据进行crud操作
get提交部分 <script> /* $("#postbtn").click(function () { $.ajax({ url:'/loaddata', data ...
- [人物存档]【AI少女】【捏脸数据】1224今日份的推荐
点击下载(城通网盘):AISChaF_20191111222714074.png 点击下载(城通网盘):AISChaF_20191108141610951.png
- layer 回调
目前使用的layer版本为1.8.5 在调用layer的JS中,使用end来进行处理 $.layer({ type : 2, shadeClose : true, title : '选择人员', cl ...
- no matches for kind "ReplicaSet" in version "extensions/v1beta1"
原来的yaml的资源清单为 apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: name: frontend spec: replica ...
- sh_11_字典的其他操作
sh_11_字典的其他操作 xiaoming_dict = {"name": "小明", "age": 18} # 1. 统计键值对数量 p ...
- 【CF521C】Pluses everywhere(贡献)
题意:有一个长为n的数字字符串,要求其中插入k个加号,求所有合法表达式的和之和 0<=k<n<=1e5 思路:参考官方题解,讲的很好很清楚 字符串下标从0开始 考虑第i位d[i]的贡 ...
- C++入门经典-例6.8-gets_s与puts的应用
1:使用标准输入函数cin和格式化输入函数scanf时都存在这样一个问题:当输入空格时,程序不会接受空格符之后的内容内容. 输入函数gets_s与输出函数puts都只以结束符'\0'作为输入\输出结束 ...
- 【学习】windows 下PostgreSQL导入sql文件
在软件的安装目录的bin文件下打开命令行工具 输入: psql -d 数据库名称 -h 数据库地址 -p 5432 -U postgres -f sql文件(E:\Config\SQL\iS ...
- RF Setup和Teardown的使用
执行顺序 setup执行顺序是:project级别setup>suite级别setup>case级别setup 无返回值 Run Keywords | [KW1 | arg1 | arg2 ...