Open maheng-hub opened 4 years ago
自己回答:
即使我们的参数Weekend已经实现IDynamicTableName,但动态拼表名的前提条件时entity也实现这个接口:
/**
* 获取表名 - 支持动态表名
*
* @param entityClass
* @param tableName
* @return
*/
public static String getDynamicTableName(Class<?> entityClass, String tableName) {
if (IDynamicTableName.class.isAssignableFrom(entityClass)) {
StringBuilder sql = new StringBuilder();
sql.append("<choose>");
sql.append("<when test=\"@tk.mybatis.mapper.util.OGNL@isDynamicParameter(_parameter) and dynamicTableName != null and dynamicTableName != ''\">");
sql.append("${dynamicTableName}\n");
sql.append("</when>");
//不支持指定列的时候查询全部列
sql.append("<otherwise>");
sql.append(tableName);
sql.append("</otherwise>");
sql.append("</choose>");
return sql.toString();
} else {
return tableName;
}
}
这里有点问题,如果要使用动态表名的话,entity必须实现IDynamicTableName接口,而我们的参数Weekend,实现了这个接口,因此,个人感觉,entity实现IDynamicTableName不是动态拼接表名的必要条件,只要我们的参数_parameter实现这个接口即可
如题,有个SQL没有走索引,所以想改一下表名强制走索引,但这样写以后还是原来的表名,setTableName的时候有什么注意事项吗