阅读之前我们带着几个小问题去阅读下面文中的内容,本文以Hibernate
框架理解ORM
框架映射的实现原理。
ORM
映射框架中的entity
(实体类)名字和表名不一致是如何与数据库表名对应的?entity
(实体类)中的属性采用驼峰命名
,以:userName
,和数据库表中user_Name
是如何对应的?- 为什么
Hibernate
通过entity
(实体类)就能完整的得到SQL
语句?
下面我们完成一个ORM
框架中entity
(实体类) 与表字段不一致,却能生成完整的SQL语句的案例。
在使用Hibernate
框架时,我们会创建实体类,创建字段去对应数据库表以及字段会使用到核心的两个注解,@Table
和@Column
,其他的@Entity
、@Id
等注解我们就先忽略,重点在原理上。
@Table 注解
该注解在使用时让实体类与表名对应,@Table("user_table")
,这个注解其实就相当于起了一个别名的作用,我们可以尝试自定义一个注解模仿还原该注解。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTable {
String value();
}
关于自定义注解,我就不做过多解释了。
@Column 注解
该注解用于实体类字段上,相当于该字段的别名,使其和数据库表中的列(Column
即:列)对应。我们去自定义个和@Column
注解相当的注解。
import java.lang.