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;
}
}