Cdm Framework
一个使用简单,零配置,容错率高,效率的Java™ ORM 数据库框架
✨ 特性
- 使用简单 没有第三方依赖,一行代码即可初始化数据库连接,调用接口只需要记住一个引导器(Bootstrap),一个工厂(BootstrapFactory),)两个接口(BasicBean,Behavior)即可。
- 零配置 设计原则遵循习惯大于约定,如有配置必要,使用注解替代XML,JSON等配置文件
- 容错率高 非致命错误,自动采取默认方案替代
- 效率 节省时间,虽然支持编写sql但大部分情况没有这样做的必要
public class SqlLite {
@Table("user") // Set table name (by default table name class name)
@BootStrapID("defaultBootstrap") // Identifies the bootstrap id
public static class User implements BasicBean{
@NoInsert
int id;
String name;
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
@Override
public String primarykey() {
return "id";
}
}
public static void main(String[] args) {
Bootstrap bootstrap = BootstrapFactoty.load("defaultBootstrap",obstract -> {
obstract.setDriver(Driven.SQLITE);
obstract.setUrl("jdbc:sqlite:test.sqlite");
});
bootstrap.query(user).create(); //create table
bootstrap.query(user).insert(); // insert entity
user = bootstrap.query(User.class,1).find(); // find by pk(id)
System.out.println("The user where id=1 ? === "+user+" ===");
bootstrap.query(User.class, 1).delete(); // delete by pk(id)
}
}
支持常用数据库 Mysql,Sqlite,Oracle,SqlServer,更改Driven,url即可
? 与Mybatis比较
- 与Mybatis相比,无配置文件,少数需要配置的参数通过注解加以实现
- 小巧,使用简单,只需看看示例你就能够学会使用
- 大部分情况下通过组合函数来替代sql(支持复杂条件查询,limit,排序等),数据库移植性好
? 与Hibernate比较
- 不会因为配置复杂带来众多bug
- 支持批量修改,删除
- 内置缓存让执行效率更高
- 虽然是orm框架,但还是建议复杂问题sql解决,类似Hibernate的一对多关系相较于sql,会把问题变的复杂和难以维护
? 文档
Please refer to the Wiki for continuous updates
? 安装
导入maven依赖
Maven
<dependency>
<groupId>online.sanen</groupId>
<artifactId>cdm-core</artifactId>
<version>最新版本</version>
</dependency>
Gradle
compile group: 'online.sanen', name: 'cdm-core', version: '最新版本'
? 接口
BasicBean.java
实体类须实现的基础接口,实现后就可以通过bootstrap调用,例如:
bootstrap.query(User.class)
bootstrap.query(“user”).addEntry(User.class)
示例
- 实体类实现 BasicBean 接口
class User implements BasicBean{
int id;
String name;
@Override
public String primarykey() {
return "id";
}
}
- 使用 BootStrapFactoty 创建 BootStrap 实例
//url & username & password modify according to your current environment
Bootstrap bootstrap = Bootstraps.load( configuration-> {
configuration.setDriver(Driven.MYSQL);
configuration.setUrl("jdbc:mysql://127.0.0.1:3306/test?useSSL=false");
configuration.setUsername("root");
configuration.setPassword("root");
configuration.setFormat(true);
});
- CRUD 操作
bootstrap.query(user).insert();
bootstrap.query(user).delete();
bootstrap.query(user).update();
//主键/列表查询
bootstrap.query(User.class,2).find();
bootstrap.query(User.class).addEntry(User.class).list();
//条件查询
Condition condition = C.buid("name").eq("zhang san"); // 创建条件
bootstrap.query("user").addEntry(User.class).addCondition(condition).sort(Sorts.DESC, "id").limit(0,10).list();
Behavior.java
充血模式(DDD),实体类实现后自身即可具备CRUD行为
示例:
- 实体类实现 Behavior 接口
@Table("user") // Set the table name to the class name by default
@BootStrapID("defaultBootstrap") // Identifies the bootstrap id
public static class User implements Behavior<User>{
@NoInsert
int id;
String name;
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
@Override
public String primarykey() {
return "id";
}
}
- 使用 Bootstraps 创建 BootStrap 实例
//url & username & password modify according to your current environment
Bootstrap bootstrap = Bootstraps.load( obstract -> {
obstract.setDriver(Driven.MYSQL);
obstract.setUrl("jdbc:mysql://127.0.0.1:3306/test?useSSL=false");
obstract.setUsername("root");
obstract.setPassword("root");
obstract.setFormat(true);
});
- CRUD操作
User user = new User();
user.name = "zhangsan";
user.createTable();
int id = user.insert();
List<User> list = Behavior.specify(User.class).list();
System.out.println(list);
user = new User(id).findByPk().get();
user.name = "Li si";
user.update();
Condition condition = C.buid("name").eq("Li si");
list = Behavior.specify(User.class).addCondition(condition).limit(0,10).list();
System.out.println(list);
user.delete();
? 可前往Github cdm-core提交问题/建议 ISSUES