mybatis插入mysql字段默认值不生效的处理方法分享
下文笔者讲述MyBatis中mysql字段默认值不生效的处理方法分享,如下所示:
MyBatis简介
mybatis是一个持久层框架,我们在java项目中经常使用此框架,通常用于操作mysql数据库 有时候数据库中的字段设置默认值及not null, 那么如一张表中user(id,userName,address)三个列,其中userName和address都设置为not null <insert id="addOneUser" parameterType="User"> insert into user(userName,address) values(#{userName},#{address}) </insert> 以上代码,当我们只传入userName时,会报相应的错误,如: Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'address' cannot be null
出现以上错误的原因: insert时 没有指定address值,所以产生相应的错误 我们可以采用以下方式修正此错误 <insert id="addOneUser" parameterType="User"> insert into user(userName) values(#{userName}) </insert> 但是采用以上方法,可插入数据,但是当我们需要address时,则无法进行插入, 则以上不是一个最优的解决方案下文笔者讲述世界上最完美的解决方案,如下所示:
<sql id="userColumns"> <trim suffixOverrides=","> <if test="userName != null">userName,</if> <if test="address != null">address,</if> </trim> </sql> <sql id="userValues"> <trim suffixOverrides=","> <if test="userName != null">#{userName},</if> <if test="address != null">#{address},</if> </trim> </sql> <insert id="addOneUser" parameterType="User"> insert into User(<include refid="userColumns"/>) values (<include refid="userValues"/>) </insert>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。