mybatis部分sql技巧
1、mybatis中没有<=号,必须用<![CDATA[<=]]>表示。<update id="reduceNumber">
UPDATE
seckill
SET
number = number - 1
WHERE seckill_id =#{seckillId}
AND start_time <![CDATA[<=]]>#{killTime}
AND end_time >=#{killTime}
AND number >0;
</update>
2、mysql分页语句的写法
<select id="queryAll" resultType="org.seckill.entity.Seckill">
SELECT seckill_id,name,number,start_time,end_time,create_time
FROM seckill
ORDER BY create_time DESC
limit #{offset},#{limit}
</select>
3、主键冲突报错忽略添加ignore关键字
4、一对多联合查询,此处使用内联且Seckil为实体类名,不是表名字,进行映射。
<!--主键冲突,报错-->
<insert id="insertSuccessKilled">
INSERT ignore INTO success_killed(seckill_id,user_phone,state)
VALUES (#{seckillId},#{userPhone},0)
</insert>
<!--根据id查询successKillId并携带seckill实体-->
<select id="queryByIdWithSeckill" resultType="org.seckill.entity.SuccessKilled">
SELECT
sk.seckill_id,
sk.user_phone,
sk.state,
sk.create_time,
s.seckill_id "Seckill.seckill_id",
s.name "Seckill.name",
s.number "Seckill.number",
s.start_time "Seckill.start_time",
s.end_time "Seckill.end_time",
s.create_time "Seckill.create_time"
FROM success_killed sk INNER JOIN seckill s ON sk.seckill_id=s.seckill_id
WHERE sk.seckill_id=#{seckillId} and sk.user_phone=#{userPhone}
</select>
5、mybatis接口注解使用实例,加mapper注解
@Mapper
public interface OrderDao {
@Select("select * from seckill_order where user_id=#{userId} and goods_id=#{goodsId}")
public SecKillOrder getMiaoshaOrderByUserIdGoodsId(@Param("userId")long userId, @Param("goodsId")long goodsId);
@Insert("insert into order_info(user_id, goods_id, goods_name, goods_count, goods_price, order_channel, status, create_date)values("
+ "#{userId}, #{goodsId}, #{goodsName}, #{goodsCount}, #{goodsPrice}, #{orderChannel},#{status},#{createDate} )")
@SelectKey(keyColumn="id", keyProperty="id", resultType=long.class, before=false, statement="select last_insert_id()")//此处返回刚插入的主键id
public long insert(OrderInfo orderInfo);
@Insert("insert into seckill_order (user_id, goods_id, order_id)values(#{userId}, #{goodsId}, #{orderId})")
public int insertMiaoshaOrder(SecKillOrder secKillOrder);
}
mybatis部分sql技巧的更多相关文章
- 自己动手实现mybatis动态sql
发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...
- 超全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 ...
- Mybatis - 动态sql
learn from:http://www.mybatis.org/mybatis-3/dynamic-sql.html mybatis支持动态拼接sql语句.主要有: if choose (when ...
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- mybatis 打印sql 语句
拦截器 package com.cares.asis.mybatis.interceptor; import java.text.DateFormat; import java.util.Date; ...
- 通过Log4j的DEBUG级别来显示mybatis的sql语句
为了更加方便调试sql语句,需要显示mybatis的sql语句. 网络上的一般方式都是通过log4j来实现,但是很多都有问题. 经过实验,以下代码能够保持正常:(只显示myb ...
- mybatis 打印sql log配置
mybatis 打印sql log, 方便调试.如何配置呢? log4j.xml : <!-- 打印sql start --> <appender name="IBatis ...
随机推荐
- tensorflow1.0 变量加法
import tensorflow as tf state = tf.Variable(0,name='counter') print(state.name) one = tf.constant(1) ...
- SourceTree for Windows跳过登录解决方法
来源:https://blog.csdn.net/t_332741160/article/details/79611303 SourceTree 是一个强大的git管理客户端,但是在使用最新版需要登录 ...
- 防cc攻击利器之Httpgrard
一.httpgrard介绍 HttpGuard是基于openresty,以lua脚本语言开发的防cc攻击软件.而openresty是集成了高性能web服务器Nginx,以及一系列的Nginx模块,这其 ...
- 如何用hugo 搭建博客
1,Hugo 简介 搭建个人博客有很多开源的博客框架,我们要介绍的框架叫作Hugo.Hugo 是一个基于Go 语言的框架,可以快速方便的创建自己的博客. Hugo 支持Markdown 语法,我们可以 ...
- Blazor WebAssembly 3.2.0 正式起飞,blazor 适合你吗?
最近blazor更新很快,今天在官方博客上发布了Blazor WebAssembly 3.2.0 RC:https://devblogs.microsoft.com/aspnet/blazor-web ...
- centos7安装及部署zabbix监控
一:实验环境 server.zabbix.com-------------------- 192.168.200.11 agent.zabbix.com------------------------ ...
- Linux系统管理第二次作业 目录和文件管理 rpm安装 创建yum仓库
chapter02 - 03 作业 1.分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? [ ...
- 【Linux常见命令】pwd命令
pwd - print name of current/working directory pwd命令用于显示工作目录. 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. 语法:pwd [ ...
- 听说你在从事前端开发?那这10个JavaScript的优化问题你不得不知道!
JavaScript的高效优化一直都是我们前端开发中非常重要的工作,也是很多开发人员无法做好的一部分内容,今天我总结了10个优化问题,大家可以参考来做优化,这其中很多问题都是大家经常遇到的哦. ==和 ...
- 什么是动态规划?动态规划的意义是什么?https://www.zhihu.com/question/23995189
阮行止 上海洛谷网络科技有限公司 讲师 intro 很有意思的问题.以往见过许多教材,对动态规划(DP)的引入属于"奉天承运,皇帝诏曰"式:不给出一点引入,见面即拿出一大堆公式吓人 ...