文章目录
微型 ORM 框架
要求
使用反射和注解实现一个微型的 ORM 框架,不用操作数据库,只需要将代码中的实体类映射为数据库建表语句即可(也就是通过代码生成 SQL 语句)。
思路
-
类注解 → CREATE TABLE USER
-
字段注解:
username 、password 、createtime → username 、password 、createtime。
-
属性注解
int → INT(4)
String → VARCHAR(32)
Date → TIMESTAMP
-
使用 JavaToSQL ,运行后将映射完成。
-
JavaToSQL 中,使用反射技术获取类的注解,在哪种注解下就执行哪种映射转换。
解答
直接上代码
package com.xxm.advanced_camp.great_mission2_orc;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author xxm
* 表头注解
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String tableName() default "";
}
package com.xxm.advanced_camp.great_mission2_orc;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author xxm
* 表格注解
*/
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableColumn {
String name() default "空";
//表格内容的类型
ColumnType columnType() default @ColumnType;
//表格内容的文字
ColumnName columnName() default @ColumnName;
//表格内转化成SQL语句后的长度
ColumnSize columnSize() default @ColumnSize;
//是否可以为 NULL
NotNull nullAllowed() default @NotNull;
//是否自增
AutoIncrement autoIncrement() default @AutoIncrement;
//是否为主键
PrimaryKey primaryKey() default @PrimaryKey;
//是否有其它注释
OtherNotes otherNotes() default @OtherNotes;
}
package com.xxm.advanced_camp.great_mission2_orc;
import java.util.Date;
public enum Type {
INTEGER,STRING,DATE;
}
package com.xxm.advanced_camp.great_mission2_orc;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention