package net.loyin.jFinal.plugin; import java.util.List; import javax.sql.DataSource; import net.loyin.jFinal.anatation.TableBind; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.IDataSourceProvider; import com.jfinal.plugin.activerecord.Model; import com.jfinal.util.StringKit; /*** * 自动绑定model与数据库表 * @author loyin * 2012-9-4 上午11:45:09 */ public class AutoTableBindPlugin extends ActiveRecordPlugin { private TableNameStyle tableNameStyle; public AutoTableBindPlugin(DataSource dataSource) { super(dataSource); } public AutoTableBindPlugin(IDataSourceProvider dataSourceProvider, TableNameStyle tableNameStyle) { super(dataSourceProvider); this.tableNameStyle = tableNameStyle; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public boolean start() { try { List<Class> modelClasses = ClassSearcher.findClasses(Model.class); TableBind tb = null; for (Class modelClass : modelClasses) { tb = (TableBind) modelClass.getAnnotation(TableBind.class); if (tb == null) { this.addMapping(tableName(modelClass), modelClass); } else { if(StringKit.notBlank(tb.name())){ if (StringKit.notBlank(tb.pk())) { this.addMapping(tb.name(), tb.pk(), modelClass); } else { this.addMapping(tb.name(), modelClass); } } } } } catch (Exception e) { e.printStackTrace(); // throw new RuntimeException(e); } return super.start(); } @Override public boolean stop() { return super.stop(); } private String tableName(Class<?> clazz) { String tableName = clazz.getSimpleName(); if (tableNameStyle == TableNameStyle.UP) { tableName = tableName.toUpperCase(); } else if (tableNameStyle == TableNameStyle.LOWER) { tableName = tableName.toLowerCase(); } else { tableName = StringKit.firstCharToLowerCase(tableName); } return tableName; } }