-
Notifications
You must be signed in to change notification settings - Fork 8
Wrapper包装器
Nico edited this page Oct 12, 2018
·
1 revision
注解的作用域细化到了Domain类上,而Wrapper则是起着对元数据全局修饰的作用,我们可以在org.nico.ourbatis.Ourbatis
类中看到配置入口:
/**
//Java Field -> Sql Column 过程的包装
public static final List<Wrapper<String>> JDBC_NAME_WRAPPERS = new ArrayList<Wrapper<String>>();
//Java Class -> Sql Table 过程的包装
public static final List<Wrapper<String>> TABLE_NAME_WRAPPERS = new ArrayList<Wrapper<String>>();
//Java Class -> Mapper映射几口名称的包装
public static final List<Wrapper<String>> MAPPER_NAME_WRAPPERS = new ArrayList<Wrapper<String>>();
如果您只使用Ourbatis,可以去直接获取到上面三个集合并添加自定义的包装器。如果您的应用使用Spring Boot开发,我们在其中定制了一套默认的包装器:
public class OurbatisDefaultConfigue implements OurbatisConfigure{
protected SlideBarJointWrapper slideBarJointWrapper = new SlideBarJointWrapper();
protected FieldEscapeWrapper fieldEscapeWrapper = new FieldEscapeWrapper();
@Override
public void configWrapper(List<Wrapper<String>> JDBC_NAME_WRAPPERS, List<Wrapper<String>> TABLE_NAME_WRAPPERS,
List<Wrapper<String>> MAPPER_NAME_WRAPPERS, Map<Class<?>, String> JAVA_TYPE_WRAPPERS) {
TABLE_NAME_WRAPPERS.add(slideBarJointWrapper);
JDBC_NAME_WRAPPERS.add(slideBarJointWrapper);
MAPPER_NAME_WRAPPERS.add(value -> {return value + "Mapper";});
}
@Override
public void configAdapter(Map<String, AssistAdapter> ASSIST_ADAPTERS) {
}
}
当然您也可以通过继承的方式自定义,而一个包装器的定义方式也及其的简单:
MAPPER_NAME_WRAPPERS.add(value -> {return value + "Mapper";});
这个包装器的应用是在对Domain类名做包装,在尾部增加Mapper,来拼装为Mapper接口的地址,如User实体类映射的Mapper接口名称为UserMapper,当然也有实现接口的方式定制Wrapper:
//驼峰式转下滑杠
public class SlideBarJointWrapper implements Wrapper<String>{
public static final char UNDERLINE='_';
@Override
public String wrapping(String value) {
if (value == null || StringUtils.BLANK.equals(value.trim())){
return StringUtils.BLANK;
}
int len = value.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = value.charAt(i);
if (Character.isUpperCase(c)){
if(i > 0) {
sb.append(UNDERLINE);
}
sb.append(Character.toLowerCase(c));
}else{
sb.append(c);
}
}
return sb.toString();
}
}
在Wrapper的使用过程中要注意的一点是,Wrapper的设置是全局通用的,不要因为满足一处而使整个应用设置变得不通用!