# JFinal-Sql-xml **Repository Path**: jeffnono/JFinal-Sql-xml ## Basic Information - **Project Name**: JFinal-Sql-xml - **Description**: 这是一个基于JFinal ActiveRecord的插件,目标是成为半个Mybatis一样好用的sql工具,提供简单的sql拼接功能。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2016-04-03 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #JFinal-Sql-Xml 这是一个基于JFinal ActiveRecord的插件,目标是成为半个Mybatis一样好用的sql工具,提供简单的sql拼接功能。 ## 快速上手 与Mybatis一样,使用JFinal-Sql-Xml插件,一个接口对应一个XMl文档。 在JFinal-Sql-Xml插件的Xml文档中,你可以方便的在根节点使用 *xsd* 说明。这样你的ide编辑器就会稍微智能的提示输入。请注意,务必使用 *Mapper* 标签作为根节点,因为在插件启动的时候,会过滤掉非 *Mapper* 根节点的xml。 ```xml ``` 在每一个Mapper文档中,必须包含 *for-class* 标签,并在for-class标签中填上当前xml对应的接口的名称。 ```xml com.jfinal.plugin.sqlxml.test.dao.UserSqlDao ``` 我们来看下,UserSqlDao里面写了什么东西。 ```java public interface UserSqlDao { public User validPassword(String name, String email, String password); public List getUserByNameLike(String name); public Page getUserByNameLikeWithPage(String name,int pageNumber,int pageSize); public boolean updateUserPassword(Integer id, String oldPassword, String newPassword); } ``` 一个标准的java接口,里面定义了四个函数,分别是验证密码,根据用户名查找用户,根据用户名查找用户并分页,和更新指定id的用户密码。 直接看对应的xml文件: ```xml com.jfinal.plugin.sqlxml.test.dao.UserSqlDao update user set password=${newPassword} where id=${id} and oldPassword=MD5(CONCAT(${newPassword},salt)) ``` ### select 标签与 update 标签 在Mapper节点下面,除了for-class标签,还存在两个重要的标签,分别是 **select** 标签与 **update** 标签。select标签代表该方法执行的是查询语句,update则代表更新、删除、插入语句。 select标签与update标签中,需要两个属性,分别是 **action** 与 **paras** 。 **action** 表示此标签对应的方法名, **paras** 则一一对应方法的参数名,paras里,属性名用 **,** 隔开。 在select、update标签内直接出现的文本会被最终处理成sql语句片段。 和Mybatis一样,sql中支持简单的${para} 与#{para}。 1. ${para}的属性会当成sql最终执行的参数传入,其出现的位置会被?代替。 2. 而#{para}则简单粗暴的将para的值和sql文本连在一起( **会有sql注入危险!** )。 ### Sql中支持的标签:if 、 use-page、 exception - **if标签**: 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异常。