实体类编写规则
1,提供无参的构造方法
2,提供一个标识属性 映射数据表主键字段 提供id
3,所有属性提供public访问控制符的set get方法
4,标识属性应尽量使用基本数据类型包装类型
基本数据类型和包装类对应的hibernate的映射类型相同
基本数据类型无法表达null 数字类型默认为0
包装类默认值null 当对于默认值有业务意义的时候需要使用包装类
![](https://i-blog.csdnimg.cn/blog_migrate/9e53b1552b946041bda6fe508bbddb19.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2470bd4bfe690cbdf7738ada3400f2d0.png)
package org.ccit.com.domain;
/**
* @program: Hibernate_01
* @description
* @author: LIANG
* @create: 2021-02-06 12:22
**/
public class User {
private int uid;
private String username;
private String password;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
持久化对象的唯一标识
java 按地址区分同一个类的不同对象
关系数据库用主键区分同一条记录
Hibernate使用OID来建立内存中的对象和数据中记录的对应的关系结论:对象的OID和数据库的表的主键对应
为保证OID的唯一性 应该让Hibernate来为OID赋值
<hibernate-mapping>
<!-- name: 模型全名称
table: 对应表名-->
<class name="org.ccit.com.domain.User" table="t_user">
<!-- name:模型类属性名 column:表中的字段名-->
<id name="uid" column="id">
<!-- generator:id的生成策略 native:如果是mysql数据库 id会自动增长-->
<generator class="native"></generator>
</id>
</class>
</hibernate-mapping>
自然主键和代理主键
主键要求:不为空 不重复 不改变
自然主键:在业务中,某个属性符合主键的三个要求,那么该属性可以作为主键列
代理主键:在业务中,不存在符合以上三个条件的属性,那么就增加一个没有意义的列,作为主键