初次使用JFinal的SQL管理,感觉非常棒

直接上代码吧

先看下我的目录结构

image.png

all.sql内容如下

image.png

user.sql内容如下

image.png

设置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);
}
下图是运行结果

image.png

如果参数很多的话 , 建议用map

注:补充一点 , 在#sql("alluser")与#end之间可以加上 #if(username) and username=#para(username) #end

这里的具体代码可以参考另一个童鞋的分享 http://www.jfinal.com/share/574

效果出来了,说的有点啰嗦 嘿嘿 !

有什么问题欢迎留言 , 如果说错了还请大家批评指正

感谢波哥@JFinal

评论区

JFinal

2017-12-23 16:08

进步神速,从刚入手这么快就有分享出来了。感谢你的分享

此外,建议去掉下面这行代码:
arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());

改成下面这行:
arp.getEngine().setSourceFactory(new ClassPathSourceFactory());

改成上面这行的好处是,即便你的模板打包到 jar 包都可以读到

JFinal

2017-12-23 16:15

再补充一句: #namespace 中的 #inclue 前面的一个跳格字符可以去掉,这样生成出来的 sql 在最前方就会少一个跳格字符,更加美观

jfinal 手册只是为了排版美观,才添加了这个跳格字符,实际代码中建议去掉

JJfinal

2017-12-23 17:12

@JFinal 哇哦 已记录 , 今天收获满满 , 感谢波哥

JJfinal

2017-12-23 17:31

@JFinal 波哥 user.sql的语法支持if else 吗

JFinal

2017-12-23 18:21

@JJfinal jfinal enjoy 模板引擎中的所有用法全支持在 sql 管理模块中使用

JJfinal

2017-12-23 22:57

@JFinal 好的,继续学习

小洛

2017-12-24 21:16

可以可以

JJfinal

2017-12-24 22:16

@小洛 赶紧试试

ddjfinal

2017-12-27 14:24

@JFinal 这个比较好啊!

JJfinal

2018-01-18 19:21

@ddjfinal 非常方便好用

刘进洪

2018-01-23 10:36

请问以下,我新增了一个模块,但是我的sql.xml文件就是加载不进来,把它放在其他的目录下又能成功的加载进来,这是为什么啊

JJfinal

2018-01-31 18:53

@刘进洪 貌似没有xml文件,引入sql文件也是在all.sql内 怎么会有sql.xml

zhongyf

2019-07-05 17:25

请问一下我怎么根据数据库里的 用户名字段 查出一个 User(Model)对象

JJfinal

2019-07-09 15:39

@zhongyf 要看是否用户名是否是主键 , 如果没有自动生成就自己写一个方法 , 传入用户名 方法可以参考上面

热门分享

扫码入社