以下测试中的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