分库、分表
用户量大的时候必须去分库分表,分库分表也需要自动化
分库
前置工作
/**
* Describe:修改注解,增加主键标识
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DbField {
String value();//表列名
boolean isPrimary() default false;//是否是主键
}
public class BaseDao<T> implements IBaseDao<T> {
//获得当前表的唯一标识,一般为主键
//这里查询到当前表主键对应的值,传递进来的entityClass是带有唯一标识的,这里将它找出来
public String getPrimary(T entity) {
for (Map.Entry<String, Field> entry : cacheMap.entrySet()) {
Field cacheField = entry.getValue();
DbField dbField = cacheField.getAnnotation(DbField.class);
//当前表列名是主键
if (dbField != null && dbField.isPrimary()) {
try {
//得到主键值
return cacheField.get(entity).toString();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return "";
}
}
/**
* Describe:数据库分库的工厂类
*/
public class BaseDaoSubFactory extends BaseDaoFactory {
//单例
private static final BaseDaoSubFactory instance = new BaseDaoSubFactory()