开源软件名称:JFinal-Sql-xml
开源软件地址:https://gitee.com/vmo/JFinal-Sql-xml
开源软件介绍:
#JFinal-Sql-Xml这是一个基于JFinal ActiveRecord的插件,目标是成为半个Mybatis一样好用的sql工具,提供简单的sql拼接功能。 快速上手与Mybatis一样,使用JFinal-Sql-Xml插件,一个接口对应一个XMl文档。 在JFinal-Sql-Xml插件的Xml文档中,你可以方便的在根节点使用 xsd 说明。这样你的ide编辑器就会稍微智能的提示输入。请注意,务必使用 Mapper 标签作为根节点,因为在插件启动的时候,会过滤掉非 Mapper 根节点的xml。 <?xml version="1.0" encoding="UTF-8"?><Mapper xmlns="www.jfinal.com/sqlxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.jfinal.com/sqlxml http://git.oschina.net/vmo/JFinal-Sql-xml/raw/master/src/main/java/sqlxml.xsd" ></Mapper> 在每一个Mapper文档中,必须包含 for-class 标签,并在for-class标签中填上当前xml对应的接口的名称。 <?xml version="1.0" encoding="UTF-8"?><Mapper xmlns="www.jfinal.com/sqlxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.jfinal.com/sqlxml http://git.oschina.net/vmo/JFinal-Sql-xml/raw/master/src/main/java/sqlxml.xsd" > <for-class>com.jfinal.plugin.sqlxml.test.dao.UserSqlDao</for-class></Mapper> 我们来看下,UserSqlDao里面写了什么东西。 public interface UserSqlDao { public User validPassword(String name, String email, String password); public List<User> getUserByNameLike(String name); public Page<User> getUserByNameLikeWithPage(String name,int pageNumber,int pageSize); public boolean updateUserPassword(Integer id, String oldPassword, String newPassword);} 一个标准的java接口,里面定义了四个函数,分别是验证密码,根据用户名查找用户,根据用户名查找用户并分页,和更新指定id的用户密码。 直接看对应的xml文件: <?xml version="1.0" encoding="UTF-8"?><Mapper xmlns="www.jfinal.com/sqlxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.jfinal.com/sqlxml http://git.oschina.net/vmo/JFinal-Sql-xml/raw/master/src/main/java/sqlxml.xsd" > <for-class>com.jfinal.plugin.sqlxml.test.dao.UserSqlDao</for-class> <select action="validPassword" paras="name,email,password"> select * from user where <if condition="name!=null">name=${name} and password=MD5(CONCAT(${password},salt))</if> <if condition="email!=null">email=${email} and password=MD5(CONCAT(${password},salt))</if> <if condition="email==null && name==null"> <exception>不能这么坑哦!</exception> </if> </select> <select action="getUserByNameLike" paras="name"> select id,name from user where name like ${name} </select> <select action="getUserByNameLikeWithPage" paras="name"> select id,name <use-page/> from user where name like ${name} </select> <update action="updateUserPassword" paras="id,oldPassword,newPassword"> update user set password=${newPassword} where id=${id} and oldPassword=MD5(CONCAT(${newPassword},salt)) </update></Mapper> select 标签与 update 标签在Mapper节点下面,除了for-class标签,还存在两个重要的标签,分别是 select 标签与 update 标签。select标签代表该方法执行的是查询语句,update则代表更新、删除、插入语句。 select标签与update标签中,需要两个属性,分别是 action 与 paras 。 action 表示此标签对应的方法名, paras 则一一对应方法的参数名,paras里,属性名用 , 隔开。 在select、update标签内直接出现的文本会被最终处理成sql语句片段。 和Mybatis一样,sql中支持简单的${para} 与#{para}。 - ${para}的属性会当成sql最终执行的参数传入,其出现的位置会被?代替。
- 而#{para}则简单粗暴的将para的值和sql文本连在一起( 会有sql注入危险! )。
Sql中支持的标签:if 、 use-page、 exceptionif标签: if标签必须定义condition属性,condition属性的内容是标准的java代码片段,要求必须是boolean值(原因是直接使用javassist生成的类,而不是解释执行),如果condition内的值为true,则执行if标签内的内容(if标签暂不支持嵌套)。 use-page标签: 当返回值为Page类型时,插件会认为这是一个有分页需求的方法,在方法的参数列表内,必须含有名为pageNumber,pageSize的参数名,且对应参数类型为int。在sql中,也必须使用use-page标签,use-page之前与之后的内容,作为JFinal分页方法的两个参数传入。 exception: 与if配合使用,标签内的内容会抛出SqlXmlException异常。 |
请发表评论