# 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));
}
效果图
