代码拉取完成,页面将自动刷新
MappingHandler
的存在就一个作用,将类名、属性名和表名、列名进行互转。
接口定义如下,看方法名就能知道每个方法具体的作用:
public interface MappingHandler {
/**
* 根据实体名获取表名
*
* @param className the class name
* @param params the params
* @return table name
*/
String getTable(String className, Map<String, Object> params);
/**
* 根据实体名获取表名
*
* @param clazz the clazz
* @param params the params
* @return table name
*/
String getTable(Class<?> clazz, Map<String, Object> params);
/**
* 根据类名获取主键字段名
*
* @param clazz the clazz
* @return pK name
*/
String getPkField(Class<?> clazz);
/**
* 根据属性名获取列名
*
* @param clazzName the clazz name
* @param fieldName the field name
* @return column name
*/
String getColumn(String clazzName, String fieldName);
/**
* 根据属性名获取列名
*
* @param clazz the clazz
* @param fieldName the field name
* @return column name
*/
String getColumn(Class<?> clazz, String fieldName);
/**
* 根据列获取属性
*
* @param clazz
* @param columnName
* @return
*/
String getField(Class<?> clazz, String columnName);
}
默认提供了DefaultMappingHandler
实现,继承于AbstractMappingHandler
,遵守了前面的约定。
另外提供了几个常用的参数可供配置:
modelPackages
实体类所在包,写法跟spring扫描包一致,支持通配符,多个用英文逗号隔开。
当写自定义sql使用短类名时需要指定,由构造方法传入。
customClassMapping
添加自定义的全类名到短类名的映射,一般情况下用不到。
当不同的包下有相同的类名,又想在sql中使用短类名时可以使用。
tablePrefixMap
表前缀定义,很多时候不同的项目或模块拥有不同的表前缀,但映射的实体类不会有前缀。例如ss_user
表对应实体类为User
.
Map<String, String> tablePrefixMap = new LinkedHashMap<>();
tablePrefixMap.put("com.sonsure", "ss_");
mappingHandler.setTablePrefixMap(tablePrefixMap);
以上配置将在处理com.sonsure
包下的所有实体类名转换时,自动添加ss_
前缀。
PS:当实体类上有使用注解时,会优先使用注解内指定的名称。
当默认提供的DefaultMappingHandler
不能满足需求时,可以自行实现或重写相关转换方法。
然后在声明JdbcEngine时设置:
<bean id="jdbcTemplateEngine" class="com.sonsure.dumper.springjdbc.config.JdbcTemplateEngineFactoryBean">
<!-- ...... -->
<property name="mappingHandler" ref="customMappingHandler"/>
</bean>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。