mybatis存在更新否则新增,mybatis更新部分字段

  mybatis存在更新否则新增,mybatis更新部分字段

  

目录

米巴提斯更新时候只更新变更部分具体可以参考以下代码框架更新更新字段的使用多个制图人方法,更新单字段通用制图人方法,java代码控制字段特别注意,定位字段不要加如果

 

  

Mybatis更新时候只更新变更部分

在更新数据库的某条记录的时候,通过我们只需要更新我们设置的字段就可以了,但是如果基于对象关系映射(对象关系映射)映射更新,当参数传入的为一个豆的时候,这个时候会将豆的全部字段都更新一次。

 

  有一个场景的如在登陆时候,如果用户登陆成功以后只想更新用户登陆的互联网协议(互联网协议的缩写)跟时间,对于这一类场景可以用框架的SqlProvider方法来只更新我们设置的字段,

  

具体可以参考以下代码

Dao:

 

  包装组织。**.道;导入Java。SQL。时间戳;导入org。阿帕奇。伊巴提斯。注释。param导入org。阿帕奇。伊巴提斯。注释。结果;导入org。阿帕奇。伊巴提斯。注释。结果;导入org。阿帕奇。伊巴提斯。注释。选择;导入org。阿帕奇。伊巴提斯。注释。更新提供程序;导入组织. beans.User。导入组织。* * .SQL。提供商。usersqlprovider导入org。spring框架。刻板印象。知识库;@Repository(userDao )公共接口UserDao { /** *登录方法* @ Param username * @ Param password * @ return */@ Select( Select * from j _ User其中用户名=# {用户名}和password=# { password } )@ Results({ @ Result(id=true,property=userId ,column=user_id ,javaType=Integer.class),@Result(property=username ,column=username ,javaType=String.class),@Result(property=password ,column=password ,Java type @ update provider(type=user SQL

  Provider.class, method = "update")    public int updateLoginInfo(User user);}SqlProvider:

  

package org.**.sql.provider; import org.apache.commons.lang3.StringUtils;import org.apache.ibatis.jdbc.SQL;import org.**.beans.User;  public class UserSqlProvider {        public String update(final User user) {        return new SQL(){            {                UPDATE("jo_user");                                if (StringUtils.isNotBlank(user.getUsername())) {                    SET("username = #{username}");                }                                if (StringUtils.isNotBlank(user.getEmail())) {                    SET("email = #{email}");                }                                if (StringUtils.isNotBlank(user.getPassword())) {                    SET("password = #{password}");                }                                if (user.getRegisterTime() != null) {                    SET("register_time = #{registerTime}");                }                                if (StringUtils.isNotBlank(user.getRegisterIp())) {                    SET("register_ip = #{registerIp}");                }                                if (user.getLastLoginTime() != null ) {                    SET("last_login_time = #{lastLoginTime}");                }                                if (StringUtils.isNotBlank(user.getLastLoginIp())) {                    SET("last_login_ip = #{lastLoginIp}");                }                                if (StringUtils.isNotBlank(user.getLoginCount().toString())) {                    SET("login_count = #{loginCount}");                }                                if (StringUtils.isNotBlank(user.getResetKey())) {                    SET("reset_key = #{resetKey}");                }                                if (StringUtils.isNotBlank(user.getResetPwd())) {                    SET("reset_pwd = #{resetPwd}");                }                                if (user.getErrorTime() != null) {                    SET("error_time = #{errorTime}");                }                                if (StringUtils.isNotBlank(user.getErrorCount().toString())) {                    SET("error_count = #{errorCount}");                }                                if (StringUtils.isNotBlank(user.getErrorIp())) {                    SET("error_ip = #{errorIp}");                }                                if (StringUtils.isNotBlank(user.getActivationCode())) {                    SET("activation_code = #{activationCode}");                }                                WHERE("user_id = #{userId}");            }        }.toString();    } }

 

  

Mybatis update更新字段的使用

 

  

多个mapper方法,更新单字段

说实话不太推荐,因为如果有10个字段要更新,难道写10个方法。

 

  但是实际中很多人都这么写。

  

 

  

通用mapper方法,java代码控制字段

特点是一个mapper方法包含所有字段,不为空的就update。

 

  但是需要控制入参,一般有2中方式:

  new 一个对象然后set id和要改的字段

  如果字段多比较费劲,需要一个一个set。

  查询出对象,然后set要改的字段

  这2种方式差不多,就是代码看起来不一样。

  

 

  

特别注意,定位字段不要加if

要更新的字段加if没有什么问题

 

  但是定位条件不要加if,因为万一忘记传递了,变成没有where条件,那么条数不可控了。搞不好把全表更新了,可就万劫不复了。

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: