直接上代码吧
先看下我的目录结构
all.sql内容如下
user.sql内容如下
设置AppConfig
public void configPlugin(Plugins me) { // 配置 druid 数据库连接池插件 DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("connurl"), PropKit.get("username"), PropKit.get("password").trim()); me.add(druidPlugin); // 配置ActiveRecord插件 ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin); System.out.println(PathKit.getRootClassPath()); arp.setBaseSqlTemplatePath(PathKit.getRootClassPath()); arp.addSqlTemplate("all.sql"); // 所有映射在 MappingKit 中自动化搞定 arp.setShowSql(true); _MappingKit.mapping(arp); me.add(arp); }
解释一下第八第九行:
第八行:设置了 sql 文件存放的基础路径,注意上例代 码将基础路径设置为了 classpath 的根,可以将 sql 文件放在 maven 项目下的 resources 之下, 编译器会自动将其编译至 classpath 之下,该路径可按喜好自由设置。
第九行:
添加外部 sql 模板文件,可以通过多次调用 addSqlTemplate 来添加任意多个外部 sql 文件,并且对于不同的 ActiveRecordPlugin 对象都是彼 此独立配置的,有利于多数据源下对 sql 进行模块化管理。
使用
System.out.println(Db.getSql("user.alluser")); System.out.println(Db.getSqlPara("user.findbyuserid", 1)); Map<String, Object> para = new HashMap<String, Object>(); para.put("phone", "158"); System.out.println(Db.getSqlPara("user.likephone", para)); List<Record> list = Db.find(Db.getSqlPara("user.likephone", para)); for (Record r : list) { System.out.println(r); } 下图是运行结果
如果参数很多的话 , 建议用map
注:补充一点 , 在#sql("alluser")与#end之间可以加上 #if(username) and username=#para(username) #end
这里的具体代码可以参考另一个童鞋的分享 http://www.jfinal.com/share/574
效果出来了,说的有点啰嗦 嘿嘿 !
有什么问题欢迎留言 , 如果说错了还请大家批评指正
感谢波哥@JFinal
此外,建议去掉下面这行代码:
arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());
改成下面这行:
arp.getEngine().setSourceFactory(new ClassPathSourceFactory());
改成上面这行的好处是,即便你的模板打包到 jar 包都可以读到