# jfinal动态sql插件 **Repository Path**: yzlxz/jfinaldongtaisqlchajian ## Basic Information - **Project Name**: jfinal动态sql插件 - **Description**: 类似于mybaits动态拼装sql含有if、choose、foreach、include、set、trim、where等标签主要也是依赖于ognl表达式 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2017-06-13 - **Last Updated**: 2024-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Jfinal动态sql简介 =================== 类似于mybaits动态拼装sql含有if、choose、foreach、include、set、trim、where等标签, 思想主要是和mybaits动态sql的思想差不多, 主要也是依赖于ognl表达式需要引入ognl包,采用jdk自带dom解析器对xml文件进行解析并将sql节点存储到Map内存中,还可以监控生成的最终带条的sql。 ---------- 开始使用 ------------- opensymphony ognl 2.6.11 ---------- 1、先在Jfinal插件添加SqlMapPlugin public void configPlugin(Plugins me) { me.add(new SqlMapPlugin("com/acxy/cms/mapper")); //当第二个参数为true,开启定时检查xml重新生成sql防止改变sql xml需要重启 //me.add(new SqlMapPlugin("com/acxy/cms/mapper", true)); } 2、SqlKit的使用 定义xml必须含有namespace 取Map内存中的动态sql //无参数 SqlKit.getSql("demo.select"); //有参数params是Object对象 SqlKit.getSql("demo.select", params); //结合jfinal Db.findFirst(SqlKit.getSql("demo.select", params)); xml里面的条件判断原理 //sql xml片段 and s.fk_spec = #{spec} //注释:dom先解析出test属性里面的值,在根据ognl里面的Ognl.getValue(key, params) //key是test里面的ognl表达式,params是传递数据对象,来判断条件是真还是假,所以test里面完全支持ognl表达式 //并且#{value}里面取值也是符合ognl表达式, value可以书写任意ognl表达式 3、如下使用例子 if 标签、choose 标签、foreach 标签、include 标签、set 标签、trim 标签、where 标签 s.id as id, s.fk_year as year, s.fk_dept as dept, s.fk_classes as classes, s.fk_spec as spec, s.code as code, s.name as name, s.gender as gender, date_format(s.brithday, '%Y-%m-%d') as brithday, s.phone as phone, s.email as email, s.pic as pic, s.status as status, s.appid as appid, s.openid as openid, s.version as version SELECT FROM dgsx_student s SELECT FROM dgsx_student s s.fk_year = #{year} s.fk_dept = #{dept} select count(0) as count from dgsx_student code = #{code} and id <> #{id} select from dgsx_student s where s.id = #{id} insert into dgsx_student id, fk_year, fk_dept, fk_classes, fk_spec, code, name, gender, brithday, phone, email, pic, status, appid, openid, version, #{id}, #{year}, #{dept}, #{classes}, #{spec}, #{code}, #{name}, #{gender}, #{brithday}, #{phone}, #{email}, #{pic}, #{status}, #{appid}, #{openid}, #{version}, update dgsx_student fk_year = #{year}, fk_dept = #{dept}, fk_classes = #{classes}, fk_spec = #{spec}, code = #{code}, name = #{name}, gender = #{gender}, brithday = #{brithday}, phone = #{phone}, email = #{email}, pic = #{pic}, status = #{status}, appid = #{appid}, openid = #{openid}, version=version+1 where id = #{id} and version = #{version} select * from userinfo where department=#{department} where position=#{position} where gender=#{gender} SELECT * FROM BPM_DEF_USER where RIGHT_TYPE=#{name} and OWNER_ID in 我只是测试输出 #{id} 测试代码 public static void main(String[] args) { SqlMapPlugin sqlMapPlugin = new SqlMapPlugin("com/acxy/test/mapper"); sqlMapPlugin.start(); System.out.println("==== 开始测试include 标签 ===="); System.out.println(SqlKit.getSql("StudentMapper.testInclude")); System.out.println("==== 开始测试if 标签 ===="); Map ifMap = new HashMap<>(); ifMap.put("year", "2014"); System.out.println(SqlKit.getSql("StudentMapper.testIf", ifMap)); System.out.println("==== 开始测试choose 标签 ===="); Map chooseMap = new HashMap<>(); chooseMap.put("gender", 1); System.out.println(SqlKit.getSql("StudentMapper.testChoose")); System.out.println(SqlKit.getSql("StudentMapper.testChoose", chooseMap)); System.out.println("==== 开始测试foreach 标签 ===="); Map foreachMap = new HashMap<>(); List list = new ArrayList<>(); list.add("Mr zhang"); list.add("Mr li"); list.add("Mr wang"); foreachMap.put("name", "Mr liu"); foreachMap.put("cx", list); System.out.println(SqlKit.getSql("StudentMapper.testForeach")); System.out.println(SqlKit.getSql("StudentMapper.testForeach", foreachMap)); System.out.println("==== 开始测试set 标签 ===="); Map setMap = new HashMap<>(); setMap.put("code", "12345678"); setMap.put("name", "Mr liu"); setMap.put("id", 2); setMap.put("version", "v1.0"); System.out.println(SqlKit.getSql("StudentMapper.testSet")); System.out.println(SqlKit.getSql("StudentMapper.testSet", setMap)); System.out.println("==== 开始测试trim 标签 ===="); Map trimMap = new HashMap<>(); trimMap.put("code", "12345678"); trimMap.put("name", "Mr liu"); trimMap.put("id", 2); System.out.println(SqlKit.getSql("StudentMapper.testTrim")); System.out.println(SqlKit.getSql("StudentMapper.testTrim", trimMap)); System.out.println("==== 开始测试where 标签 ===="); Map whereMap = new HashMap<>(); whereMap.put("code", "12345678"); whereMap.put("id", 2); System.out.println(SqlKit.getSql("StudentMapper.testWhere")); System.out.println(SqlKit.getSql("StudentMapper.testWhere", whereMap)); } 效果图 ![enter image description here](1.png)