# fastquery
**Repository Path**: wxtech/fastquery
## Basic Information
- **Project Name**: fastquery
- **Description**: Fast Query 基于Java语言. 他的使命是:简化Java操作数据层.做为一个开发者,仅仅只需要设计编写DAO接口即可,其内部采用ASM动态生成实现,执行快. 因此,代码简洁而优雅.从而,大幅度提升开发效率.
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 67
- **Created**: 2016-05-12
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#FastQuery 快速操作数据层框架
FastQuery 基于Java语言.他的使命是:简化Java操作数据层.做为一个开发者, **仅仅只需要设计DAO接口即可**,其内部采用ASM动态生成实现,执行快. 因此,代码简洁而优雅.从而,大幅度提升开发效率.
##FastQuery 主要特性如下:
1. 设计优雅,配置简单,极易上手.
2. 采用ASM动态生成字节码,因此支持编译前预处理,可最大限度减少运行期的错误.显著提升程序的强壮性.
3. 支持安全查询,防止SQL注入.
4. 支持与主流数据库连接池框架集成,如集成c3p0,dbcp等等
5. 支持 `@Query` 查询,使用 `@Condition`,可实现动态 `where` 条件查询.
6. 支持查询结果集以JSON类型返回
7. 支持`AOP`,注入拦截器只需标识几个简单的注解,如: `@Before` , `@After`
##运行环境要求
jdk1.8+
##配置文件
###jdbc-config.xml
用来配置支持jdbc. **注意**:如果采用连接池,该配置文件可以不要.
```xml
com.mysql.jdbc.Driver
jdbc:mysql://192.168.1.1:3306/xk?user=xk&password=abc123
com.mysql.jdbc.Driver
dbname
username
userpasswd
3306
192.168.1.1
```
###c3p0-config.xml
支持c3p0配置,详情配置请参照c3p0官网的说明: http://www.mchange.com/projects/c3p0/.
```xml
com.mysql.jdbc.Driver
jdbc:mysql://192.168.1.1:3306/xk
xk
abc123
50
100
50
1000
0
5
```
### fastquery.json
配置数据源的作用范围
```js
// @author xixifeng (fastquery@126.com)
// 配置必须遵循标准的json语法.
[
// config目前支持的可选值有"jdbc","c3p0"
{
"config": "c3p0", // 表示由c3p0负责提供数据源
"dataSourceName": "xk-c3p0", // 数据源的名称
"basePackages": [ // 该数据源的作用范围
"org.fastquery.example.StudentDBService"
// 在这可以配置多个DB接口,以","号隔开
]
},
/*
再配置一个数据源作用域
*/
{
"config" : "jdbc", // 表示由jdbc驱动负责提供数据源
"dataSourceName": "shtest_db",
"basePackages": [ // 该数据源的作用范围
"org.fastquery.example.DataAcquireDbService"
// 在这可以配置多个DB接口,以","号隔开
]
}
]
```
##一个完整的入门例子
- 准备一个实体
```java
public class Student
{
private String no;
private String name;
private String sex;
private Integer age;
private String dept;
// getter /setter 省略...
}
```
- DAO接口
```java
public interface StudentDBService extends QueryRepository {
@Query("select * from student")
JSONArray findAll();
@Query("select * from student")
Student[] find();
}
```
- 使用DAO接口.
**注意**:不用去实现StudentDBService接口.
```java
// get porxy impl
StudentDBService studentDBService = FQuery.getRepository(StudentDBService.class);
// call findAll
JSONArray jsonArray = studentDBService.findAll();
// call find
Student[] students = studentDBService.find();
```
##带条件查询
```java
// sql中的?1 表示当前方法的第一个参数
// sql中的?2 表示当前方法的第二个参数
// ?N 表示当前方法的第N个参数
// 查询返回数组格式
@Query("select no as no,name,sex,age,dept from student s where s.sex=?2 and s.age > ?1")
Student[] find(Integer age,String sex);
// 查询返回JSON格式
@Query("select * from student s where s.sex=?1 and s.age > ?2")
JSONArray find(String sex,Integer age);
// 查询返回List Map
@Query("select * from student s where s.sex=?1 and s.age > ?2")
List