# yfSql
**Repository Path**: caomaolufei1999/yfSql
## Basic Information
- **Project Name**: yfSql
- **Description**: java database orm framework
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-09-27
- **Last Updated**: 2022-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# yfSql
> 一个独立的JDBC框架
> Author: Yufeng
### 一、安装
##### 使用maven方式安装
```xml
io.github.yfblock
yfSql
1.0.6
```
##### 使用gradle方式安装
```groovy
implementation 'io.github.yfblock:yfSql:1.0.6'
annotationProcessor 'io.github.yfblock:yfSql:1.0.6'
```
### 二、添加数据库
此数据库操作库仅仅提供操作接口 需要再添加数据库依赖,内置支持mysql和sqlite
### 三、设置数据库
##### xml方式
首先需要在数据库操作Wrapper类中设置注解
```java
@DataRunner(useProperty = true)
public class UserWrapper {
}
```
然后再application.properties中添加
```properties
yf.mysql.host=localhost // 数据库连接地址
yf.mysql.port=3306 // 端口
yf.mysql.username=root // 用户名
yf.mysql.password=root // 密码
yf.mysql.database=java-orm-test // 数据库名称
yfSql.mysql.driver=com.mysql.cj.jdbc.Driver // jdbc驱动,为支持5和8 缺省为com.mysql.cj.jdbc.Driver 可选
```
##### 注解方式
```java
// mysql
// 默认情况下 hostname为localhost port为3306 username为root password为root 若系统配置相同 则可以使用默认设置
@DataRunner(database = "java-orm-test", hostname = "localhost", port = "3306", username = "root", password = "root")
public class UserWrapper {
}
//sqlite
@DataRunner(runner = SqliteRunner.class, path = "test.db")
public class UserWrapper {
}
```
使用时设置`runner`,如果使用其他数据库则可以实现`SqlRunner`接口来定制支持其他数据库
##### 四、使用wrapper
实体类User.java eg: 使用时尽量使用引用类型
```java
package Test;
import lombok.Data;
@Data
public class User {
private Integer id;
private String username;
private String password;
private String qq;
private String phone;
}
```
UserWrapper.java
```java
@DataRunner(runner = SqliteRunner.class, path = "test.db")
public class UserWrapper {
@Select("select * from user")
public ArrayList getUsers() {return null;}
@Select("select * from user where username={0} and password={1}")
public User login(String username, String password) {return null;}
@Insert("insert into user (username, password) VALUES ({0}, {1})")
public Integer register(String username, String password) { return 0;}
@Update("update user set qq={0} where id={1}")
public void updateQQById(String qq, int id){}
@Delete("delete from user where id={0}")
public void deleteUserById(int id){}
@Select("select * from user where balance > {0}")
public User getUserByBalance(int balance) {return null;}
}
```
上述为增删改查结构样例,使用注解方式定义Sql,编译时根据Sql生成函数主体代码,函数主体可缺省,但是推荐添加return null;等空语句,便于编辑器查找语法错误。
调用
```java
UserWrapper userWrapper = new UserWrapper();
System.out.println(userWrapper.getUserByBalance(1200));
// 增
userWrapper.register("admins", "123");
// 删
userWrapper.deleteUserById(25);
// 改
userWrapper.updateQQById("321", 10);
// 查
User user = userWrapper.login("admin", "21232f297a57a5a743894a0e4a801fc3");
if(user!=null) System.out.println(user.getId());
ArrayList users = userWrapper.getUsers();
```
##### 五、链式操作方式
> 链式操作时仅可同时操作单个数据表
CartView.java
```java
@Data
public class CartView {
private Integer id; // 购物车记录编号
private Integer goodId; // 商品编号
private Integer userId; // 用户编号
private Integer number; // 购买数量
private String cover; // 商品封面
private String name; // 商品名称
private Double price; // 商品单价
}
```
调用
```java
MysqlRunner mysqlRunner = new MysqlRunner("root", "root", "java-orm-test");
DataTableWrapper cartViewDataTable = new DataTableWrapper<>(CartView.class, mysqlRunner);
// * select example
ArrayList cartViews = cartViewDataTable.select();
for(CartView cartView : cartViews) {
System.out.println(cartView.getName());
}
// * add example
CartView cartView = new CartView();
cartView.setName("Hello");
cartView.setNumber(12);
cartView.setPrice(30.0);
cartViewDataTable.add(cartView);
// * find and update example
cartView = cartViewDataTable.where("name", "Hello").find();
cartView.setPrice(20.0);
cartViewDataTable.where("name", "Hello").update(cartView);
// * count example
int count = cartViewDataTable.count();
System.out.println("Count: " + count);
// * delete example
cartViewDataTable.where("name", "Hello").delete();
// * custom select example
cartViews =
DataTableWrapper.executeQuery("select * from cart_view", CartView.class, mysqlRunner);
```
### 六、开发计划
- 计划支持字段校验功能,执行前检测参数是否符合正则
- 支持多数据库,多表联合查询(暂未有很好的思路,有兴趣可以在issus中提出)