myBatis3.3.0内置方法详解

以下测试中的testLog是一个日志对象,只有id和tableName被设值,其他字段都是null。
经过测试,发现的几个大致的规律【约定:处理的字段,指的是insert和update关键字后面跟的字段】:
1.selective:表示只处理参数对象中非NULL属性对应的表字段,NULL属性对应的表字段数据库会按默认值处理。
2.primaryKey:参数是Object类型。
如果实体类有被注解为主键的属性,则参数可以为实体类对象,也可以是主键的值,where条件只会使用主键属性对应的字段。
如果实体类没有被注解为主键的属性,则参数只能是实体类对象,并且where条件会使用所有属性对应的字段。
3.内置方法的方法名不含以上两者:表示会处理参数对象所有属性对应的表字段,where条件只含有参数对象非NULL属性对应的表字段。
4.selective:用来限定操作含有的字段,primaryKey:用来限定where条件含有的字段。如果没有两者,表示都不作限定。

 4.这些规律都有佐证例子,如下。

·········································································································`·······························································
operateLog 实体类***没有被注解为主键的字段***
insertSelective对应的sql语句加入了NULL校验,即只会插入数据不为null的字段值(没有插入的字段,如果有默认值,则会使用默认值)。
insert则会插入所有字段,会插入null(不使用默认值)。

1.updateByPrimaryKeySelective会对字段进行判断再更新(如果为Null则不更新),如果你只想更新某一字段,可以用这个方法。
2.updateByPrimaryKey对你注入的字段全部更新
1和2的where条件是参数对象的所有字段(不管是否为空)

sql示例(只有id和tableName被set值):
	--------------begin:updateByPrimaryKey(testLog)
	2018-10-15 15:49:53 [INFO] UPDATE operateLog SET id = 0,tableName = 'test',type = NULL,oldValue = NULL,operateAccount 
	= NULL,operateName = NULL,addTime = NULL WHERE id = 0 AND tableName = 'test' AND type = NULL 
	AND oldValue = NULL AND operateAccount = NULL AND operat
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值