手寫 Hibernate ORM 框架 01-註解常量定義

老马啸西风發表於2024-07-30

手寫 Hibernate 系列

手寫 Hibernate ORM 框架 00-hibernate 簡介

手寫 Hibernate ORM 框架 00-環境準備

手寫 Hibernate ORM 框架 01-註解常量定義

手寫 Hibernate ORM 框架 02-實體 Bean 定義,建表語句自動生成

手寫 Hibernate ORM 框架 03-配置檔案讀取, 資料庫連線構建

手寫 Hibernate ORM 框架 04-持久化實現

手寫 Hibernate ORM 框架 05-整體效果測試驗證

從零手寫元件系列

java 從零手寫 spring ioc 控制反轉

java 從零手寫 spring mvc

java 從零手寫 jdbc-pool 資料庫連線池

java 從零手寫 mybatis

java 從零手寫 hibernate

java 從零手寫 rpc 遠端呼叫

java 從零手寫 mq 訊息元件

java 從零手寫 cache 快取

java 從零手寫 nginx4j

java 從零手寫 tomcat

本節內容

進行 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;
    }
}

相關文章