# 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异常。