JFinal sql管理與動態學習筆記

JFinal利用自帶的Template Engine實現了Sql管理功能。可使用的指令包括#sql 、#para、#namespace,以及jfinal template engine的全部指令和功能。java

1、基本配置以下

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

一、setBaseSqlTemplatePath加載sql模板時的基礎路徑,該基礎路徑與arp.addSqlTemplate("sql/learing.sql")方法傳入的路徑組合成最終的的sql模板路徑。sql

二、PathKit.getRootClassPath()表示classpath的根,編譯器會將maven項目下的resources的文件自動編譯至classpath下。數組

三、addSqlTemplate能夠添加任意多個外部sql文件,這樣有利於多數據源下對sql進行模塊化管理。maven

四、開發是想要對修改的sql文件實現熱加載,能夠配置arp.setDevMode(true)或者arp.getEngine().setDevMode(true);,不配置默認用configConstant中的配置。模塊化

2、sql指令

一、(1)經過#sql指令能夠定義sql語句,如在命名空間sys下定義一個key值爲findByUserName的sql語句:函數

#namespace("sys")
    ### 根據用戶名獲取用戶
	#sql("findByUserName")
		select * from sys_user where user_name = ?
	#end
#end

(2)在java中獲取方式以下:ui

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()相同功能。spa

3、para指令

一、#para指令用於生成sql中的問號佔位符以及佔位符所 對應的參數,二者分別生成了在SqlPara對象的sql和paraList對象之中。經過SqlPara.getSql()和SqlPara.getPara()可分別獲取到他們。code

二、#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參數。

三、sql語句的like子句用法

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

4、namespace指令

.# namespace指令爲sql語句指定命名空間,不一樣的命名空間可讓#sql指令使用相同的key值去定義sql,有利於模塊化管理。

5、分頁用法

與普通查詢徹底同樣,如:

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

6、高級用法

一、(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);

二、能夠用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
相關文章
相關標籤/搜索