Java-ORM数据库框架CDM

7 篇文章 0 订阅
6 篇文章 0 订阅

Cdm Framework

一个使用简单,零配置,容错率高,效率的Java™ ORM 数据库框架

maven链接
github链接

✨ 特性

  • 使用简单 没有第三方依赖,一行代码即可初始化数据库连接,调用接口只需要记住一个引导器(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)

示例

  1. 实体类实现 BasicBean 接口

class User implements BasicBean{
	int id;
		 
	String name;

	@Override
	public String primarykey() {
		return "id";
	}
		 
}
  1. 使用 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);
	});
  1. 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行为

示例

  1. 实体类实现 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";
		}
	}
  1. 使用 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);
	});
	
  1. 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值