<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.second.hand.trading.server.model.IdleItemModel" useGeneratedKeys="true">
insert into sh_idle_item
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="idleName != null">
idle_name,
if>
<if test="idleDetails != null">
idle_details,
if>
<if test="pictureList != null">
picture_list,
if>
<if test="idlePrice != null">
idle_price,
if>
<if test="idlePlace != null">
idle_place,
if>
<if test="idleLabel != null">
idle_label,
if>
<if test="releaseTime != null">
release_time,
if>
<if test="idleStatus != null">
idle_status,
if>
<if test="userId != null">
user_id,
if>
trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="idleName != null">
#{idleName,jdbcType=VARCHAR},
if>
<if test="idleDetails != null">
#{idleDetails,jdbcType=VARCHAR},
if>
<if test="pictureList != null">
#{pictureList,jdbcType=VARCHAR},
if>
<if test="idlePrice != null">
#{idlePrice,jdbcType=DECIMAL},
if>
<if test="idlePlace != null">
#{idlePlace,jdbcType=VARCHAR},
if>
<if test="idleLabel != null">
#{idleLabel,jdbcType=INTEGER},
if>
<if test="releaseTime != null">
#{releaseTime,jdbcType=TIMESTAMP},
if>
<if test="idleStatus != null">
#{idleStatus,jdbcType=TINYINT},
if>
<if test="userId != null">
#{userId,jdbcType=BIGINT},
if>
trim>
这个mybaits的是插入一个商品的信息,为什么要重复两次,两个trim标签的作用是什么?
当然需要2个了,1个是字段,1个是值。
insert into student (id,name) values(1,"张三");
其中标签,可以理解为for循环。开头(。结尾)。中间,分割。
参考GPT和自己的思路:
这段 Mybatis 配置代码用于向数据库中插入一个商品的信息,其中使用了两个 <trim>
标签,分别对应字段名和字段值部分。
第一个 <trim>
标签将插入语句中的字段名部分包含在括号内,同时去掉多余的逗号,并在字段名对应的值为 null 时不插入该字段。prefix
属性指定括号前缀,suffix
属性指定括号后缀,suffixOverrides
属性指定去掉最后一个逗号。
第二个 <trim>
标签将插入语句中的字段值部分包含在括号内,同样去掉多余的逗号,并在字段值为 null 时不插入该字段。prefix
、suffix
和 suffixOverrides
属性的含义同上。
这两个 <trim>
标签的作用是去掉多余的逗号,并对 null 值进行处理,保证 SQL 语句的准确性和稳定性。
去掉前导后缀多余的空白