Administrator
发布于 2023-02-14 / 2 阅读
0
0

Mybatis动态SQL:解决insert时的不确定字段

记录一个真实情况。
有这样一个需求:前端传进一个实体对象,后端需要将其存储。

此时应该这样写:

controller:

public ReturnInfo regUri(Url url){
    ......
}

mapper:

    <insert id="insertUrl"  parameterType="url">
        INSERT INTO url_info(uri, data, create_time, expiration_time)
                    VALUE (#{uri}, #{data}, #{createTime}, #{expirationTime});
    </insert>

但是,其中有一个属性可能是null,比如,在现在的实体中,expirationTime这个过期时间参数可以为空。这时候可以使用mybatis的动态sql功能的 if标签 对其进行判断,根据expirationTime这个属性的有无来修改sql语句。

    <insert id="insertUrl"  parameterType="url">
        INSERT INTO url_info(uri,data, create_time
                                 <if test="expirationTime != null and expirationTime != ''">
                                     , expiration_time
                                 </if>
                             )
                    VALUE (#{uri},#{data}, #{createTime}
                                <if test="expirationTime != null and expirationTime != ''">
                                    , #{expirationTime}
                                </if>
                            );
    </insert>

使用<if></if>标签可以根据实体属性,判断标签里的内容是否拼接进sql语句中。


评论