给controller层和model层加了注释,功能已经实现

我仿照spring的注释方法,给controller层和model层加了注释,功能已经实现了,但在加载model层时,需要获取ActiveRecordPlugin的configName值(目前通过修改源代码,增加get方法,已经获取到),希望作者能提供configName加get方法;另外我觉得注释的方法很好,核心代码如下,如果对作者有所帮助,不甚荣幸。核心代码如下:

/**

 * 控制层注解

 * @author amox

 *

 */

@Inherited

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE})

public @interface Ctrl {

/**

* 控制器名称

* @return

*/

String value() default "";

/**

* 视图对应的路径

* @return

*/

String path() default "";

}



/**

 * 模型层注解

 * @author amox

 *

 */

@Inherited

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE})

public @interface Model {

/**

* 表名

* @return

*/

String table() default "";

/**

* 主键名称

* @return

*/

String priKey() default "";

/**

* 数据源配置名

* @return

*/

String dsConfig() default DbKit.MAIN_CONFIG_NAME;

}


/**

* 加载控制器

* @param me 路由

* @param pack 包路径

*/

public void loadCtrl(Routes me, String pack) {

Set<Class<?>> clazzes = ClassKit.getClassesByAnnotation(pack, Ctrl.class);

for(Class<?> clazz : clazzes) {

if(clazz.isAnnotationPresent(Ctrl.class)) {

Ctrl ctrl = clazz.getAnnotation(Ctrl.class);

String key = ctrl.value();

    if(null == key || "".equals(key.trim())) {

    logger.warn(clazz.getName() + "注解对应的控制器名称未配置,默认以类名配置!");

    key = clazz.getSimpleName();

    }

   

    me.add(key.trim(), (Class<? extends Controller>) clazz, null == ctrl.path() ? "":ctrl.path().trim());

    }

    }

}

/**

* 加载对象模型

* @param me

* @param pack

*/

public void loadModel(ActiveRecordPlugin me, String pack) {

Set<Class<?>> clazzes = ClassKit.getClassesByAnnotation(pack, Model.class);

for(Class<?> clazz : clazzes) {

if(clazz.isAnnotationPresent(Model.class)) {

Model ctrl = clazz.getAnnotation(Model.class);

    if(null == ctrl.table() || "".equals(ctrl.table().trim())) {

    logger.warn(clazz.getName() + "注解对应的数据库名称未配置,加载跳过!");

    return;

    }

   

    String priKey = ctrl.priKey();

    if(null == priKey || "".equals(priKey.trim())) {

    if(ctrl.dsConfig().trim().equals(me.getConfigName())) {

    me.addMapping(ctrl.table().trim(), (Class<? extends com.jfinal.plugin.activerecord.Model<?> >) clazz);

    }

    } else {

    if(ctrl.dsConfig().trim().equals(me.getConfigName())) {

    me.addMapping(ctrl.table().trim(), priKey.trim(), (Class<? extends com.jfinal.plugin.activerecord.Model<?> >) clazz);

    }

    }

    }

    }

}



在引导配置如下:

blob.png


评论区

JFinal

2016-07-11 21:10

jfinal 2.2 的 ActiveRecordPlugin 已经有了生成器,不仅可以生成带有 getter、setter 的 model,还可以生成映射文件,已经可以取代楼主的 model 映射功能。此外 Controller 路由的映射以前有过一些讨论,个人倾向于手动添加路由代替扫描路由

qi_w2006

2016-07-12 16:33

@JFinal 我在升级到2.2时发现,作者把Log类各和Model里的某些方法名改了,结果得找jfinal-ext的代码重新编译,作者在升级的时候对兼容性这块能多保留下吗;另对对于sql中,多条件查询的问题,有无好的解决办法,目前我只用map自己手动写了