jfinal enjoy模板&enjoy sql 完整入门
用途
用于渲染需要多次重复的sql以及程序代码,相比较于mybatis组装模块,这种方式更灵活,可以用于组件其他的数据库、脚本语言脚本。
入门示例
取自文件
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import java.util.HashMap;
import java.util.Map;
public class EnjoyTemplateDemo {
public static void main(String[] args) {
// 创建模板引擎实例
Engine engine = Engine.create("myEngine");
// 设置模板文件加载的基础路径(这里假设模板文件放在resources目录)
engine.setBaseTemplatePath("src/main/resources");
// 准备数据
Map<String, Object> data = new HashMap<>();
data.put("users", new String[]{"Alice", "Bob", "Charlie", "David"});
// 获取模板对象
Template template = engine.getTemplate("template.html");
// 渲染模板
String output = template.renderToString(data);
System.out.println(output);
}
}
template.html是Enjoy模板文件,应该放在src/main/resources目录下:
#(for user in users)
<p>用户名称: #(user)</p>
#(end)
取自字符串
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import java.util.HashMap;
import java.util.Map;
public class EnjoyTemplateFromStringDemo {
public static void main(String[] args) {
// 创建模板引擎实例
Engine engine = Engine.use();
// 准备模板内容
String templateContent = "#(for user in users)\n 用户名称: #(user)\n#(end)";
// 准备数据
Map<String, Object> data = new HashMap<>();
data.put("users", new String[]{"Alice", "Bob", "Charlie", "David"});
// 使用模板内容创建模板对象
Template template = engine.getTemplateByString(templateContent);
// 渲染模板并输出结果
String output = template.renderToString(data);
System.out.println(output);
}
}
进阶用途
-
基于sql各种元素不确定的组装场景
-
sql模板
#sql("aggregate_dim_custom_goods_insert") insert into t_material_prepare select #(selectColumns) from #(fromClause) where #(whereCondition) group by #(groupBy) #end -
sql模板初始化
@Configuration @Slf4j public class JFinalConfig { private final DataSource dataSource; public JFinalConfig(DataSource dataSource) { this.dataSource = dataSource; } @Bean public ActiveRecordPlugin activeRecordPlugin() throws SQLException { ActiveRecordPlugin arp = new ActiveRecordPlugin(dataSource); // arp.setShowSql(true); // 打印当前数据库的连接配置 String dbURL = dataSource.getConnection().getMetaData().getURL(); log.info("Database configuration: {}", dbURL); arp.setDialect(new MysqlDialect()); // 根据使用的数据库调整方言 arp.addSqlTemplate("sql/preview.sql"); arp.start(); return arp; } -
java渲染
String groupByField = nReturnField + COMMA + aggregateField; String nSelectField = StrUtil.join(COMMA_BLANK, materialId, nReturnField, EMPTY_STR, nReturnFieldStr, N, aggregateField); Kv nParams = Kv.by("selectColumns", nSelectField) .set("fromClause", "t_goods_dim") .set("whereCondition", nCondition) .set("groupBy", groupByField); SqlPara aggregateDimCustomGoodsInsert = Db.getSqlPara("aggregate_dim_custom_goods_insert", nParams); int updateCnt = Db.update(aggregateDimCustomGoodsInsert); info("Insert Rows: {}", updateCnt);
-
-
基于sql条件不确定类似于sql占位符的场景
-
sql模板
#sql("hit_goods_cnt") select count(detail_data) as hit_cnt from t_material_prepare where material_id = #para(materialId) #end -
java 渲染
String materialId=""; Kv conf = Kv.by("materialId",materialId); SqlPara hitGoodsCnt = Db.getSqlPara("hit_goods_cnt", conf); Record first = Db.findFirst(hitGoodsCnt); Long hitCnt = first.getLong("hit_cnt");
-
总结: 大的区别在于你的使用场景,是用于条件值的传入还是sql语句关键元素的拼接,如果是前者则使用的是Enjoysql的使用标准(#para(0)或者#para(col)),而后者则是enjoy模板的场景#(col)。

浙公网安备 33010602011771号