@@ -312,30 +312,31 @@ public void deleteByPrimaryKey(MappedStatement ms) {
312
312
*
313
313
* @param ms
314
314
*/
315
- public void updateByPrimaryKey (MappedStatement ms ) {
316
- final Class <?> entityClass = getSelectReturnType (ms );
317
- //映射要包含set=?和where=?
318
- //获取set映射
319
- List <ParameterMapping > parameterMappings = getColumnParameterMappings (ms );
320
- //获取where主键映射
321
- parameterMappings .addAll (getPrimaryKeyParameterMappings (ms ));
322
- //开始拼sql
323
- String sql = new SQL () {{
324
- //update table
325
- UPDATE (tableName (entityClass ));
326
- //获取全部列
327
- Set <EntityHelper .EntityColumn > columnList = EntityHelper .getColumns (entityClass );
328
- //拼所有的set column = ?
329
- for (EntityHelper .EntityColumn column : columnList ) {
330
- SET (column .getColumn () + " = ?" );
315
+ public SqlNode updateByPrimaryKey (MappedStatement ms ) {
316
+ Class <?> entityClass = getSelectReturnType (ms );
317
+ List <SqlNode > sqlNodes = new ArrayList <SqlNode >();
318
+ //update table
319
+ sqlNodes .add (new StaticTextSqlNode ("UPDATE " + tableName (entityClass )));
320
+ //获取全部列
321
+ Set <EntityHelper .EntityColumn > columnList = EntityHelper .getColumns (entityClass );
322
+ List <SqlNode > ifNodes = new ArrayList <SqlNode >();
323
+ for (EntityHelper .EntityColumn column : columnList ) {
324
+ if (!column .isId ()) {
325
+ ifNodes .add (new StaticTextSqlNode (column .getColumn () + " = #{" + column .getProperty () + "}, " ));
331
326
}
332
- //where 主键=#{property} 条件
333
- WHERE (EntityHelper .getPrimaryKeyWhere (entityClass ));
334
- }}.toString ();
335
- //静态SqlSource
336
- StaticSqlSource sqlSource = new StaticSqlSource (ms .getConfiguration (), sql , parameterMappings );
337
- //替换原有的SqlSource
338
- setSqlSource (ms , sqlSource );
327
+ }
328
+ sqlNodes .add (new SetSqlNode (ms .getConfiguration (), new MixedSqlNode (ifNodes )));
329
+ //获取全部的主键的列
330
+ columnList = EntityHelper .getPKColumns (entityClass );
331
+ List <SqlNode > whereNodes = new ArrayList <SqlNode >();
332
+ boolean first = true ;
333
+ //where 主键=#{property} 条件
334
+ for (EntityHelper .EntityColumn column : columnList ) {
335
+ whereNodes .add (getColumnEqualsProperty (column , first ));
336
+ first = false ;
337
+ }
338
+ sqlNodes .add (new WhereSqlNode (ms .getConfiguration (), new MixedSqlNode (whereNodes )));
339
+ return new MixedSqlNode (sqlNodes );
339
340
}
340
341
341
342
/**
@@ -354,8 +355,10 @@ public SqlNode updateByPrimaryKeySelective(MappedStatement ms) {
354
355
List <SqlNode > ifNodes = new ArrayList <SqlNode >();
355
356
//全部的if property!=null and property!=''
356
357
for (EntityHelper .EntityColumn column : columnList ) {
357
- StaticTextSqlNode columnNode = new StaticTextSqlNode (column .getColumn () + " = #{" + column .getProperty () + "}, " );
358
- ifNodes .add (getIfNotNull (column , columnNode ));
358
+ if (!column .isId ()) {
359
+ StaticTextSqlNode columnNode = new StaticTextSqlNode (column .getColumn () + " = #{" + column .getProperty () + "}, " );
360
+ ifNodes .add (getIfNotNull (column , columnNode ));
361
+ }
359
362
}
360
363
sqlNodes .add (new SetSqlNode (ms .getConfiguration (), new MixedSqlNode (ifNodes )));
361
364
//获取全部的主键的列
@@ -450,8 +453,10 @@ public SqlNode updateByExampleSelective(MappedStatement ms) {
450
453
List <SqlNode > ifNodes = new ArrayList <SqlNode >();
451
454
452
455
for (EntityHelper .EntityColumn column : columnList ) {
453
- StaticTextSqlNode columnNode = new StaticTextSqlNode (column .getColumn () + " = #{record." + column .getProperty () + "}, " );
454
- ifNodes .add (new IfSqlNode (columnNode , "record." + column .getProperty () + " != null" ));
456
+ if (!column .isId ()) {
457
+ StaticTextSqlNode columnNode = new StaticTextSqlNode (column .getColumn () + " = #{record." + column .getProperty () + "}, " );
458
+ ifNodes .add (new IfSqlNode (columnNode , "record." + column .getProperty () + " != null" ));
459
+ }
455
460
}
456
461
sqlNodes .add (new SetSqlNode (ms .getConfiguration (), new MixedSqlNode (ifNodes )));
457
462
//Example的Where
@@ -476,7 +481,9 @@ public SqlNode updateByExample(MappedStatement ms) {
476
481
List <SqlNode > setSqlNodes = new ArrayList <SqlNode >();
477
482
//全部的if property!=null and property!=''
478
483
for (EntityHelper .EntityColumn column : columnList ) {
479
- setSqlNodes .add (new StaticTextSqlNode (column .getColumn () + " = #{record." + column .getProperty () + "}, " ));
484
+ if (!column .isId ()) {
485
+ setSqlNodes .add (new StaticTextSqlNode (column .getColumn () + " = #{record." + column .getProperty () + "}, " ));
486
+ }
480
487
}
481
488
sqlNodes .add (new SetSqlNode (ms .getConfiguration (), new MixedSqlNode (setSqlNodes )));
482
489
//Example的Where
0 commit comments