Skip to content
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的设置是全局通用的,不要因为满足一处而使整个应用设置变得不通用!

Clone this wiki locally