手写 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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)