mybatis部分sql技巧
阅读原文时间:2023年07月09日阅读:2

1、mybatis中没有<=号,必须用表示。 UPDATE seckill SET number = number - 1 WHERE seckill_id =#{seckillId} AND start_time #{killTime} AND end_time >=#{killTime} AND number >0;

2、mysql分页语句的写法

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);

}