Mybatis插入语句默认值不生效的问题及解决

目录

Mybatis插入语句默认值不生效

问题

原因

解决

Mybatis-plus插入修改配置默认值

创建 插入修改默认值设置方法

指定字段

Mybatis插入语句默认值不生效 问题

Mybatis插入语句默认值不生效,但直接在mysql命令行是生效的

Mybatis语句:insert into UserInfo (userName,age,sex) values (#{userName},#{age},#{sex})

其中 只给userName和age传入值,sex没有传入值,期望用默认值(建数据表时规定default)填入

Mysql命令行语句:INSERT INTO UserInfo (userName,age) VALUE ("阿三",18)

原因

对比MyBatis和Mysql两条sql语句,mysql没有写sex,而MyBatis写了sex,但又没有给sex复制因为mybatis中的sql语句是这样的,如果sex在mysql有默认值,这里使用这么一个通用的语句,如果此时不给sex传入值最后导致sex为空,也就是默认值不生效, mybatis xml代码如下:

解决

用动态sql insert语句解决。

代码判断有某个字段的值时sql语句才包含这个字段,例如:如果有sex值传入时 insert语句里才有sex字段否者没有sex字段,具体代码如下: 

<!--一种动态的insert语句--> <sql id="userInfoColumns"> <trim suffixOverrides=","> <if test="userName != null">userName,</if> <if test="age != null">age,</if> <if test="sex != null">sex</if> </trim> </sql> <sql id="userInfoValues"> <trim suffixOverrides=","> <if test="userName != null">#{userName},</if> <if test="age != null">#{age},</if> <if test="sex != null">#{sex}</if> </trim> </sql> <insert id="insert" parameterType="com.example.mybatisdemo1.domin.UserInfo" keyColumn="userInfoId" keyProperty="userInfoId" useGeneratedKeys="true"> insert into UserInfo(<include refid="userInfoColumns"/>) values (<include refid="userInfoValues"/>) </insert>

说明:<trim>标签去除片段首尾可能出现的多余的“,”字符

Mybatis-plus插入修改配置默认值 创建 插入修改默认值设置方法 @Component public class MetaObjectHandlerConfig implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { Date currentDate = new Date(); //默认未删除 setFieldValByName("isDeleted", Constant.DATA_NOT_DELETED,metaObject); //创建时间默认当前时间 setFieldValByName("createTime", currentDate,metaObject); } @Override public void updateFill(MetaObject metaObject) { Date currentDate = new Date(); //修改时间 setFieldValByName("modifyTime",currentDate,metaObject); } } 指定字段

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    wps如何修改页眉上边距

    wps如何修改页眉上边距,WPS教程,1.WPS版word怎样设置页眉边距WPS中word设置页眉边距技巧“页边距”:页面上打印区域之外的空白空间。1、设

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机