tk.mybatis
mapper更新update方法具体实现追踪
MapperFactory类
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.xxx.Entity;
import tk.mybatis.mapper.common.Mapper;
public class MapperFactory {
private static Map<Class<? extends Entity>, Mapper<? extends Entity>> mapperFactory = new ConcurrentHashMap<>();
public static void register(Class<? extends Entity> cls, Mapper<? extends Entity> mapper) {
mapperFactory.put(cls, mapper);
}
public static Mapper<? extends Entity> get(Entity en){
return mapperFactory.get(en.getImplementedInterface());
}
}
Mapper mapper = MapperFactory.get(entity);
if (mapper == null) {
return false;
}
mapper.updateByPrimaryKeySelective(entity);
ctrl左键 点进去updateByPrimaryKeySelective方法里边
package tk.mybatis.mapper.common.base.update;
import org.apache.ibatis.annotations.UpdateProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.provider.base.BaseUpdateProvider;
@RegisterMapper
public interface UpdateByPrimaryKeySelectiveMapper<T> {
@UpdateProvider(
type = BaseUpdateProvider.class,
method = "dynamicSQL"
)
int updateByPrimaryKeySelective(T var1);
}
点BaseUpdateProvider
package tk.mybatis.mapper.provider.base;
import org.apache.ibatis.mapping.MappedStatement;
import tk.mybatis.mapper.mapperhelper.MapperHelper;
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
import tk.mybatis.mapper.mapperhelper.SqlHelper;
public class BaseUpdateProvider extends MapperTemplate {
public BaseUpdateProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
public String updateByPrimaryKey(MappedStatement ms) {
Class<?> entityClass = this.getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.updateTable(entityClass, this.tableName(entityClass)));
sql.append(SqlHelper.updateSetColumns(entityClass, (String)null, false, false));
sql.append(SqlHelper.wherePKColumns(entityClass, true));
return sql.toString();
}
public String updateByPrimaryKeySelective(MappedStatement ms) {
Class<?> entityClass = this.getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.updateTable(entityClass, this.tableName(entityClass)));
sql.append(SqlHelper.updateSetColumns(entityClass, (String)null, true, this.isNotEmpty()));
sql.append(SqlHelper.wherePKColumns(entityClass, true));
return sql.toString();
}
}