手写 Hibernate ORM 框架-01-注解定义、常量定义

时间:2025-03-27 09:06:32

目录

  • 目录
  • 本节内容
  • 注解定义
    • @Entity
    • @Column
    • @Id
    • @GenerateValue
  • 常量定义
  • 目录导航

本节内容

进行 Hibernate 的注解定义,常量定义

注解定义

直接模拟 Hibernate 定义几个最常见的注解。

@Entity

package ;

import ;
import ;
import ;
import ;
import ;

/**
 * 实体-注解
 * Created by houbinbin on 16/6/5.
 */
@Retention()
@Target()
@Documented
public @interface Entity {
    /**
     * 表名称
     * @return 表名称
     */
    String value() default "";
}

@Column

package ;

import ;
import ;
import ;
import ;
import ;

/**
 * 列-注解
 * Created by houbinbin on 16/6/5.
 */
@Retention()
@Target()
@Documented
public @interface Column {

    /**
     * 列名
     * @return 列名
     */
    String value() default "";

    /**
     * 是否可以为空
     * @return {@code true} 可以
     */
    boolean nullable() default true;

    /**
     * 字段的长度
     * @return 字段的长度
     */
    int length() default 255;

}

@Id

package ;

import ;
import ;
import ;
import ;
import ;

/**
 * 主键标识
 * Created by houbinbin on 16/6/5.
 */
@Retention()
@Target({})
@Documented
public @interface Id {
}

@GenerateValue

package ;

import ;
import ;
import ;
import ;
import ;

/**
 * 自增长的值-注解
 * Created by houbinbin on 16/6/5.
 */
@Retention()
@Target()
@Documented
public @interface GenerateValue {
}

常量定义

用于后面编程开发提供便利,全局定义,便于统一修改维护。

用于实体列生成

package ;

/**
 *
 * hibernate 常量
 * @author houbinbin
 * @date 16/6/5
 */
public class HibernateConstant {

    /**
     * 默认的字符串大小 {@value}
     */
    public static final int DEFAULT_STRING_SIZE = 255;

}

用于 bean 和数据库列字段类型映射

package ;

import ;
import ;

/**
 * 存放类型 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("", "VARCHAR");
        TYPE_MAP.put("char", "CHAR");
        TYPE_MAP.put("", "CHAR");
        TYPE_MAP.put("boolean", "BIT");
        TYPE_MAP.put("", "BIT");
        TYPE_MAP.put("byte", "TINYINT");
        TYPE_MAP.put("short", "SMALLINT");
        TYPE_MAP.put("", "SMALLINT");
        TYPE_MAP.put("int", "INTEGER");
        TYPE_MAP.put("", "INTEGER");
        TYPE_MAP.put("long", "BIGINT");
        TYPE_MAP.put("", "BIGINT");
        TYPE_MAP.put("float", "FLOAT");
        TYPE_MAP.put("", "FLOAT");
        TYPE_MAP.put("double", "DOUBLE");
        TYPE_MAP.put("", "DOUBLE");
        TYPE_MAP.put("", "DATETIME");
    }

    /**
     * 获取 map 列表
     * @return map
     */
    public static Map<String, String> getTypeMap() {
        return TYPE_MAP;
    }
}

目录导航

目录导航