java orm初体验


前言

对象关系映射(Object-Relational Mapping)提供了概念性的、易于理解的模型 化数据的方法。

ORM方法论基于三个核心原则:

  • 简单:以最基本的形式建模数据。
  • 传达性:数据库结构被任何人都能理解的语言文档化。
  • 精确性:基于数据模型创建正确标准化 的结构。

典型地,建模者通过收集来自那些熟悉应用程序但不熟练的数据建模者的人的信息开发信息模型。 建模者必须能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯。建模者也必须能以简单的单元分析信息,对样本数据进行处理。 ORM 专门被设计为改进这种联系。

本人是一名java初学者,最近在使用jdbc时感觉重复代码过多,于是参考python中的Django框架,封装了一个简易版, 在封装过程中明显感受到语言自身特性的限制,以及本人对java的理解不够深入,不足之处还望理解。

  • 软件架构图

img


功能演示

  • 建表
CREATE TABLE `person`  (
  `id` varchar(10) PRIMARY KEY,
  `name` varchar(32) NOT NULL,
  `age` int(11) NOT NULL
);
  • 定义模型子类
package models;
 
import utils.Model;          //模型超类
import utils.Manager;        //模型管理器
import utils.DBField;        //字段注解
import utils.FormException;  //表单验证异常
 
 
public class Person extends Model {
	public static Manager objects;  //模型管理器对象
	//public static String table = "XXX";   表名,不设置则默认使用类名的小写,即:person
	
	@DBField(pk=true)
	private String id;	  //编号
	
	@DBField
	private String name;  //姓名
	
	@DBField
	private int age;	  //年龄
	
    public Person() {}
 
	public String getId() {
		return id;
	}
 
	public void setId(String id) {
		this.id = id;
	}
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public int getAge() {
		return age;
	}
 
	public void setAge(int age) {
		if(age < 0) {
			throw new FormException("年龄不能小于0");
		}
		this.age = age;
	}
}
  • 增删改查测试
package test;
 
import java.util.Map;
import java.util.Set;
import models.Person;
 
public class Test {
 
	public static void main(String[] args) {
		//查询所有数据
		Set<Person> objs = Person.objects.all();
		
		for(Person obj: objs) {
			System.out.println("编号:" + obj.getId());
			System.out.println("姓名:" + obj.getName());
			System.out.println("年龄:" + obj.getAge());
			System.out.println("----------");
		}
		
		//添加一条数据
		int row = Person.objects.create(Map.of("id", "1", "name", "张三", "age", 18));
		if(row == 1) {
			System.out.println("添加成功");
		}else {
			System.out.println("添加失败");
		}
		
		//修改一条数据
		row = Person.objects.update("1", Map.of("age", 19));
		if(row == 1) {
			System.out.println("修改成功");
		}else {
			System.out.println("修改失败");
		}
		
		//删除一条数据
		row = Person.objects.delete("1");
		if(row == 1) {
			System.out.println("删除成功");
		}else {
			System.out.println("删除失败");
		}
	}
}