发表于: 2020-08-17 22:28:26

1 1395


今天完成的事情

1. 做了一下 hibernate整合spring

没跑起来,xml 配置着实有点难搞。用了一段时间的 Spring Boot 突然不适应 xml 了。


收获

1. Entity 与 Table 的区别

@Entity说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名。

如果想改变这种默认的orm规则,就要使用@Table来改变class名与数据库中表名的映射规则,@Column来改变class中字段名与db中表的字段名的映射规则。

如果不需要更改实体与数据库的映射的话是不需要使用 @Table 注解的。


2. 实体类与数据库字段的映射规则

如过在实体类中全是小写的话,那么创建的数据表字段名与类中的是一样的。

如果实体类中有大写,那么创建的字段名以下划线区分。

如实体字段:userName

创建的表字段:user_name


3. 两种映射方式

实体类注解:

@Entity
@Table(name="users")
public class Users {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  @Column(name="user_id")
  private Integer user_id;

@Column(name="user_name")
  private String user_name;

@Column(name="email")
  private String email;

public Integer getUser_id() {
     return user_id;
}
  public void setUser_id(Integer user_id) {
     this.user_id = user_id;
}
  public String getUser_name() {
     return user_name;
}
  public void setUser_name(String user_name) {
     this.user_name = user_name;
}
  public String getEmail() {
     return email;
}
  public void setEmail(String email) {
     this.email = email;
}
 
}

xml 配置

user.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC
       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

   <!-- 建立类与表的映射 -->
   <!-- class标签:用于映射类与表的关系 name :类的全路径  table:表名称 -->
   <class name="org.example.learn.jpa.model.Users" table="users">
       <!-- 建立类中属性与表中的字段映射 -->
       <!-- 唯一标识 -->
       <!-- 使用id的标签 配置唯一属性 -->
       <!-- <id>标签中配置一个主键的生成策略. -->

       <id name="user_id" column="user_id">
           <generator class="native"/>
       </id>

       <!-- 普通属性 -->
       <!-- property标签:映射类中的普通属性 name:类中的属性名称, column:表中字段名称 -->
       <!--如果不写 column 属性,则默认使用 name 值作为数据库字段名-->
       <!--
       type:三种写法
       * Java类型:java.lang.String
       * Hibernate类型:string
       * SQL类型:不能直接使用type属性,需要子标签<column>
       * <column name="name" sql-type="varchar(20)"/>
        -->

       <property name="user_name" column="user_name" type="string"/>

       <property name="email" column="email" type="string"/>

   </class>

</hibernate-mapping>


今天还做了一下数据表的级联操作,它会自动生成外键。级联也有好几种设置模式,我还没弄明白,就先不说了。


遇到的问题

1. 学习曲线比较陡

一开始用的 Mybatis 的话所有的 SQL 我都是可以控制的,如果我想做连表的话要自己去写 SQL。

但是 JPA 最大的变化就是自动生成 SQL,如果不用点连表的复杂查询总觉得没必要学这个框架了,所以我现在还得补上不少的知识,无论是数据表的级联还是 Hibernate 的运行机制都得好好补补


明天的计划

1. 继续学习 Hibernate


返回列表 返回列表
评论

    分享到