Java源码示例:io.jboot.db.model.JbootModel
示例1
/**
* copy model list
*
* @param modelList
* @param <M>
* @return
*/
public static <M extends JbootModel> List<M> copy(List<M> modelList) {
if (modelList == null || modelList.isEmpty()) {
return modelList;
}
List<M> list = modelList instanceof ArrayList
? new ArrayList<>(modelList.size())
: newInstance(modelList.getClass());
for (M m : modelList) {
list.add(copy(m));
}
return list;
}
示例2
/**
* copy model set
*
* @param modelSet
* @param <M>
* @return
*/
public static <M extends JbootModel> Set<M> copy(Set<M> modelSet) {
if (modelSet == null || modelSet.isEmpty()) {
return modelSet;
}
Set<M> set = modelSet instanceof HashSet
? new HashSet<>(modelSet.size())
: newInstance(modelSet.getClass());
for (M m : modelSet) {
set.add(copy(m));
}
return set;
}
示例3
/**
* 添加关联数据到某个model中去,避免关联查询,提高性能。
*
* @param model
* @param joinOnField
* @param attrs
*/
@Override
public <M extends Model> M join(M model, String joinOnField, String[] attrs) {
if (model == null)
return model;
Object id = model.get(joinOnField);
if (id == null) {
return model;
}
JbootModel m = joinById(id);
if (m != null) {
m = m.copy();
m.keep(attrs);
model.put(StrKit.firstCharToLowerCase(m.getClass().getSimpleName()), m);
}
return model;
}
示例4
/**
* 添加关联数据到某个model中去,避免关联查询,提高性能。
*
* @param model
* @param joinOnField
* @param joinName
* @param attrs
*/
@Override
public <M extends Model> M join(M model, String joinOnField, String joinName, String[] attrs) {
if (model == null)
return model;
Object id = model.get(joinOnField);
if (id == null) {
return model;
}
JbootModel m = joinById(id);
if (m != null) {
m = m.copy();
m.keep(attrs);
model.put(joinName, m);
}
return model;
}
示例5
private <M extends JbootModel> Object getCopyObject(Invocation inv, Object data) {
if (data instanceof List) {
return ModelCopier.copy((List<? extends JbootModel>) data);
} else if (data instanceof Set) {
return ModelCopier.copy((Set<? extends JbootModel>) data);
} else if (data instanceof Page) {
return ModelCopier.copy((Page<? extends JbootModel>) data);
} else if (data instanceof JbootModel) {
return ModelCopier.copy((JbootModel) data);
} else if (data.getClass().isArray()
&& JbootModel.class.isAssignableFrom(data.getClass().getComponentType())) {
return ModelCopier.copy((M[]) data);
} else {
throw newException(null, inv, data);
}
}
示例6
/**
* copy model array
* @param models
* @param <M>
* @return
*/
public static <M extends JbootModel> M[] copy(M[] models) {
if (models == null || models.length == 0) {
return models;
}
M[] array = (M[]) Array.newInstance(models.getClass().getComponentType(), models.length);
int i = 0;
for (M m : models) {
array[i++] = copy(m);
}
return array;
}
示例7
/**
* copy model page
*
* @param modelPage
* @param <M>
* @return
*/
public static <M extends JbootModel> Page<M> copy(Page<M> modelPage) {
if (modelPage == null) {
return null;
}
List<M> modelList = modelPage.getList();
if (modelList == null || modelList.isEmpty()) {
return modelPage;
}
modelPage.setList(copy(modelList));
return modelPage;
}
示例8
private void startActiveRecordPlugin(AddonInfo addonInfo) {
List<Class<? extends JbootModel>> modelClasses = addonInfo.getModels();
if (modelClasses != null && !modelClasses.isEmpty()) {
ActiveRecordPlugin arp = addonInfo.getOrCreateArp();
List<com.jfinal.plugin.activerecord.Table> tableList = getTableList(arp);
for (Class<? extends JbootModel> c : modelClasses) {
Table tableAnnotation = c.getAnnotation(Table.class);
boolean needAddMapping = true;
if (tableList != null && !tableList.isEmpty()) {
for (com.jfinal.plugin.activerecord.Table t : tableList) {
if (t.getName().equals(AnnotationUtil.get(tableAnnotation.tableName()))) {
needAddMapping = false;
break;
}
}
}
if (needAddMapping) {
if (StrUtil.isNotBlank(tableAnnotation.primaryKey())) {
arp.addMapping(AnnotationUtil.get(tableAnnotation.tableName()), AnnotationUtil.get(tableAnnotation.primaryKey()), (Class<? extends Model<?>>) c);
} else {
arp.addMapping(AnnotationUtil.get(tableAnnotation.tableName()), (Class<? extends Model<?>>) c);
}
}
}
addonInfo.setArp(arp);
arp.start();
}
}
示例9
/**
* 必须要移除所有的缓存,否则当插件卸载重新安装的时候,
* 缓存里的可能还存在数据,由于可能是内存缓存,所有可能导致Class转化异常的问题
* PS:每次新安装的插件,都是一个新的 Classloader
*
* @param addonInfo
*/
private void removeModelsCache(AddonInfo addonInfo) {
List<Class<? extends JbootModel>> modelClasses = addonInfo.getModels();
if (modelClasses != null) {
modelClasses.forEach(aClass -> {
Table table = aClass.getAnnotation(Table.class);
String tableName = AnnotationUtil.get(table.tableName());
JbootModelConfig.getConfig().getIdCache().removeAll(tableName);
Jboot.getCache().removeAll(tableName);
});
}
}
示例10
public void addModel(Class<? extends JbootModel> clazz) {
Table table = clazz.getAnnotation(Table.class);
if (table == null) {
return;
}
if (models == null) {
models = new ArrayList<>();
}
models.add(clazz);
}
示例11
public static <M extends JbootModel> List<M> copy(List<M> list) {
if (list == null || list.isEmpty()) {
return null;
}
List<M> rlist = new ArrayList<>(list.size());
list.forEach(m -> rlist.add((M) m.copy()));
return rlist;
}
示例12
public JbootModel getDao() {
return DAO;
}
示例13
@Override
protected void doInject(Class<?> targetClass, Object targetObject) throws ReflectiveOperationException {
targetClass = getUsefulClass(targetClass);
Field[] fields = targetClass.getDeclaredFields();
if (fields.length != 0) {
for (Field field : fields) {
Inject inject = field.getAnnotation(Inject.class);
if (inject != null) {
Bean bean = field.getAnnotation(Bean.class);
String beanName = bean != null ? AnnotationUtil.get(bean.name()) : null;
if (StrUtil.isNotBlank(beanName)) {
doInjectByName(targetObject, field, inject, beanName);
} else {
doInjectJFinalOrginal(targetObject, field, inject);
}
continue;
}
ConfigValue configValue = field.getAnnotation(ConfigValue.class);
if (configValue != null) {
doInjectConfigValue(targetObject, field, configValue);
continue;
}
RPCInject rpcInject = field.getAnnotation(RPCInject.class);
if (rpcInject != null) {
doInjectRPC(targetObject, field, rpcInject);
continue;
}
}
}
// 是否对超类进行注入
if (injectSuperClass) {
Class<?> c = targetClass.getSuperclass();
if (c != JbootController.class
&& c != Controller.class
&& c != JbootServiceBase.class
&& c != Object.class
&& c != JbootModel.class
&& c != Model.class
&& c != null
) {
doInject(c, targetObject);
}
}
}
示例14
public List<Class<? extends JbootModel>> getModels() {
return models;
}
示例15
public void setModels(List<Class<? extends JbootModel>> models) {
this.models = models;
}
示例16
public void load() {
for (String className : classNameList) {
try {
Class loadedClass = loadClass(className);
Bean bean = (Bean) loadedClass.getDeclaredAnnotation(Bean.class);
if (bean != null) {
initBeanMapping(loadedClass);
}
// controllers
if (Controller.class.isAssignableFrom(loadedClass)) {
addonInfo.addController(loadedClass);
}
// interceptors
else if (Interceptor.class.isAssignableFrom(loadedClass)) {
if (loadedClass.getAnnotation(GlobalInterceptor.class) != null) {
addonInfo.addInterceptor(loadedClass);
}
}
// handlers
else if (Handler.class.isAssignableFrom(loadedClass)) {
addonInfo.addHandler(loadedClass);
}
// models
else if (JbootModel.class.isAssignableFrom(loadedClass)) {
addonInfo.addModel(loadedClass);
}
// directives
else if (Directive.class.isAssignableFrom(loadedClass)) {
addonInfo.addDirective(loadedClass);
}
// wechatAddons
else if (WechatAddon.class.isAssignableFrom(loadedClass)) {
addonInfo.addWechatAddon(loadedClass);
}
// addonClass
else if (Addon.class.isAssignableFrom(loadedClass)) {
addonInfo.setAddonClass(loadedClass);
}
// upgraderClass
else if (AddonUpgrader.class.isAssignableFrom(loadedClass)) {
addonInfo.setUpgraderClass(loadedClass);
}
} catch (Exception ex) {
LOG.error(ex.toString(), ex);
}
}
}
示例17
/**
* copy model
*
* @param model
* @param <M>
* @return
*/
public static <M extends JbootModel> M copy(M model) {
return model == null ? null : (M) model.copy();
}
示例18
/**
* 复写 JbootServiceJoinerImpl 的方法
*
* @param id
* @return
*/
@Override
protected JbootModel joinById(Object id) {
return findById(id);
}
示例19
/**
* 可以让子类去复写joinById ,比如默认只 join 部分字段等
*
* @param id
* @return
*/
protected abstract JbootModel joinById(Object id);