JFinal sql管理与动态学习笔记

JFinal利用自带的Template Engine实现了Sql管理功能。可以使用的指令包括#sql 、#para、#namespace,以及jfinal template engine的所有指令和功能。

一、基本配置如下

		ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
		arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());
		arp.addSqlTemplate("sql/learing.sql");

1、setBaseSqlTemplatePath加载sql模板时的基础路径,该基础路径与arp.addSqlTemplate("sql/learing.sql")方法传入的路径组合成最终的的sql模板路径。

2、PathKit.getRootClassPath()表示classpath的根,编译器会将maven项目下的resources的文件自动编译至classpath下。

3、addSqlTemplate可以添加任意多个外部sql文件,这样有利于多数据源下对sql进行模块化管理。

4、开发是想要对修改的sql文件实现热加载,可以配置arp.setDevMode(true)或者arp.getEngine().setDevMode(true);,不配置默认用configConstant中的配置。

二、sql指令

1、(1)通过#sql指令可以定义sql语句,如在命名空间sys下定义一个key值为findByUserName的sql语句:

#namespace("sys")
    ### 根据用户名获取用户
	#sql("findByUserName")
		select * from sys_user where user_name = ?
	#end
#end

(2)在java中获取方式如下:

	public User findByUserName(String userName) {
		String sql = User.getSql("sys.findByUserName");
		User user = User.findFirst(sql, userName);
		return user;
	}

User.getSql和Db.getSql功能基本一样,唯一不同的是User.getSql在自身所对应的ActiveRecordPlugin的sql模板中去取sql,sql,Db.getSql在主ActiveRecordPlugin的sql模板中去取sql,可通过Db.use(...).getSql(...)实现Model.getSql()相同功能。

三、para指令

1、#para指令用于生成sql中的问号占位符以及占位符所 对应的参数,两者分别生成了在SqlPara对象的sql和paraList对象之中。通过SqlPara.getSql()和SqlPara.getPara()可分别获取到他们。

2、#para的两种用法

(1)传入int型常量参数,如定义一个key值为findUser的sql,查询指点年龄段的用户

	###传入int型常量参数
	#sql("findUserByAge")
	   select * from sys_user where age > #para(0)
	#end

在java中获取方式如下:

SqlPara sqlPara = Db.getSqlPara("findUserByAge",18,50);
Db.find(sqlPara);

(2)传入除了int型常量意外的任意类型参数,如:

	###传入int型常量参数
	#sql("findUser")
	   select * from sys_user where age > #para(age)
	#end

在java中获取方式如下:

Kv cond = Kv.by("age",18)
SqlPara sqlPara = Db.getSqlPara("findUserByAge",cond);
Db.find(sqlPara);

以上两种方法的区别是前者传入的是Object...paras参数,后者是Map data参数。

3、sql语句的like子句用法

	#sql("findUser")
	   select * from sys_user where username like concat('%',#para(username),'%')
	#end

四、namespace指令

.# namespace指令为sql语句指定命名空间,不同的命名空间可以让#sql指令使用相同的key值去定义sql,有利于模块化管理。

五、分页用法

与普通查询完全一样,如:

SqlPara sqlPara = Db.getSqlPara("findUserByAge",18,50);
Db.paginate(1,10,sqlPara);

六、高级用法

1、(1)定义sql模板

	#sql("find")
       select * from girl
         #for(x:cond)
           #(for.index==0?"where":"and")
            #(x.key)  #para(x.value)
         #end
    #end

(2)java获取如下:

Kv cond = Kv.by("age>",16).set("age<",23).set("sex=","female");
SqlPara sp = Db.getSqlPara("find",Kv.by("cond",cond));
Db.find(sp);

2、可以用jfinal模板引擎的#define指令将常用的sql定义成通用的模板函数,以便消除重复性sql代码,下面是利用id数组删除数据的示例:


    ###定义模板函数deleteByIdList
    #define deleteByIdList(table,idList)
      delete from #(table) where id in (
       #for(id:idList)
         #(for.index>0?",":"") #id
       #end
      )
    #end
 
    ###调用上面定义的模板函数
    #sql(deleteUser)
     #@deleteByIdList("user",idList)
    #end

转载于:https://my.oschina.net/u/2427561/blog/1525804

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值