手写 Hibernate 系列
手写 Hibernate ORM 框架 00-hibernate 简介
手写 Hibernate ORM 框架 02-实体 Bean 定义,建表语句自动生成
手写 Hibernate ORM 框架 03-配置文件读取, 数据库连接构建
手写 Hibernate ORM 框架 05-整体效果测试验证
从零手写组件系列
本节内容
进行 Hibernate 的注解定义,常量定义
注解定义
直接模拟 Hibernate 定义几个最常见的注解。
@Entity
package com.ryo.hibernate.simulator.hibernate.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 实体-注解
* Created by houbinbin on 16/6/5.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface Entity {
/**
* 表名称
* @return 表名称
*/
String value() default "";
}
@Column
package com.ryo.hibernate.simulator.hibernate.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 列-注解
* Created by houbinbin on 16/6/5.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface Column {
/**
* 列名
* @return 列名
*/
String value() default "";
/**
* 是否可以为空
* @return {@code true} 可以
*/
boolean nullable() default true;
/**
* 字段的长度
* @return 字段的长度
*/
int length() default 255;
}
@Id
package com.ryo.hibernate.simulator.hibernate.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 主键标识
* Created by houbinbin on 16/6/5.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface Id {
}
@GenerateValue
package com.ryo.hibernate.simulator.hibernate.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自增长的值-注解
* Created by houbinbin on 16/6/5.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface GenerateValue {
}
常量定义
用于后面编程开发提供便利,全局定义,便于统一修改维护。
HibernateConstant.java
用于实体列生成
package com.ryo.hibernate.simulator.hibernate.constants;
/**
*
* hibernate 常量
* @author houbinbin
* @date 16/6/5
*/
public class HibernateConstant {
/**
* 默认的字符串大小 {@value}
*/
public static final int DEFAULT_STRING_SIZE = 255;
}
TypeMap.java
用于 bean 和数据库列字段类型映射
package com.ryo.hibernate.simulator.hibernate.constants;
import java.util.HashMap;
import java.util.Map;
/**
* 存放类型 map
* Created by houbinbin on 16/6/5.
* @author houbinbin
*/
public class TypeMap {
private static final Map<String, String> TYPE_MAP = new HashMap<>();
static {
TYPE_MAP.put("java.lang.String", "VARCHAR");
TYPE_MAP.put("char", "CHAR");
TYPE_MAP.put("java.lang.Character", "CHAR");
TYPE_MAP.put("boolean", "BIT");
TYPE_MAP.put("java.lang.Boolean", "BIT");
TYPE_MAP.put("byte", "TINYINT");
TYPE_MAP.put("short", "SMALLINT");
TYPE_MAP.put("java.lang.Byte", "SMALLINT");
TYPE_MAP.put("int", "INTEGER");
TYPE_MAP.put("java.lang.Integer", "INTEGER");
TYPE_MAP.put("long", "BIGINT");
TYPE_MAP.put("java.lang.Long", "BIGINT");
TYPE_MAP.put("float", "FLOAT");
TYPE_MAP.put("java.lang.Float", "FLOAT");
TYPE_MAP.put("double", "DOUBLE");
TYPE_MAP.put("java.lang.Double", "DOUBLE");
TYPE_MAP.put("java.util.Date", "DATETIME");
}
/**
* 获取 map 列表
* @return map
*/
public static Map<String, String> getTypeMap() {
return TYPE_MAP;
}
}