@Repository
public interface FormMapper {
//type:要调用的class,method:要调用的方法
@SelectProvider(type = FromSql.class, method = "getFrom")
List<Record> getFrom(List<Record> records);
@Transactional
@SelectProvider(type = FromSql.class, method = "demo")
String demo();
class FromSql {
public String demo() {
return new SQL().SELECT(" '.' from dual").toString();
}
public String getFrom(final List<Record> records) {
SQL sql = new SQL();
String[] strs;
String applyField, tableName, associationTable, field;
for (Record r : records) {
associationTable = r.getStr("table_name");
if (CommonUtils.isEmpty(associationTable)) {
sql.SELECT(r.getStr("table_id" + "." + r.getStr("field")));
} else {
applyField = r.getStr("apply_field");
strs = applyField.split(",");
if ("true".equals(r.getStr("is_subquery"))) {
sql.SELECT(CommonUtils.formatSubquerySql(r.getStr("show_field"), associationTable,
r.getStr("store_field"), r.getStr("table_id"), r.getStr("field"), r.getStr("field")));
if (!CommonUtils.isEmpty(applyField)) {
for (String str : strs) {
sql.SELECT(CommonUtils.formatSubquerySql(str, associationTable,
r.getStr("store_field"), r.getStr("table_id"), r.getStr("field"), str));
}
}
} else {
sql.SELECT(associationTable + "." + r.getStr("show_field ") + r.getStr("field"));
if (!CommonUtils.isEmpty(applyField)) {
for (String str : strs) {
sql.SELECT(associationTable + "." + str);
}
}
sql.LEFT_OUTER_JOIN(associationTable + " on " + r.getStr("table_id") + "." + r.getStr("field")
+ " = " + associationTable + "." + r.getStr("store_field"));
}
}
}
return sql.toString();
}
}
}
SQL api http://www.mybatis.org/mybatis-3/zh/statement-builders.html