hibernate的实体类entity(model)的编写规则

  • 我们在使用Hibernate时,书写了一个User类,这个类我们称为JavaBean
  • JavaBean可以简单的理解成提供私有属性,并提供私有属性的get/set方法
  • POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans
  • 我们也称为模型,在Hibernate中,又称这种类为实体因为是与表关联的

编写规则

  • 提供一个无参数 public访问控制符的构造器
  • 提供一个标识属性,映射数据表主键字段,提供id
  • 所有属性提供public访问控制符的 set  get 方法(javaBean)
  • 标识属性应尽量使用基本数据类型的包装类型
  • 不要用final修饰实体 (将无法生成代理对象进行优化)

使用包装类型的话则没有默认值,不赋值的话为空 那么数据库中存的信息就为null,如果是基本类型  比如Int默认就为0

持久化对象的唯一标识 OID

  1. Java按地址区分同一个类的不同对象.l
  2. 关系数据库用主键区分同一条记录l
  3. Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系结论: 对象的OID和数据库的表的主键对应。
  4. 为保证OID的唯一性,应该让Hibernate来为OID赋值

区分自然主键和代理主键

  1. 主键需要具备: 不为空/不能重复/不能改变
  2. 自然主键: 在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.【登录名可以是自然主键
  3. 代理主键: 在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键.  比如所有属性都不满足条件 那么我们创建一个属性ID来作为代理主键

 

基本数据与包装类型l

  1. 基本数据类型和包装类型对应hibernate的映射类型相同l
  2. 基本类型无法表达null、数字类型的默认值为0。
  3. 包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。

主键的生成策略【重要】

<id name="uid" column="id">
   <!-- generator:id的生成策略
      increment:也会自动增长id,但是它的这种增长是自己Hibernate实现
                 执行select max(id) 查询,这种会有线程并发问题
      sequence:一般在oracle数据库才用
      hilo:hibernate自己实现的id规则【不用,不用学】
      native:【经常常用】
          如果是mysql数据库,id会自动增长
          如果是oracle数据库,会自动增长,sequence
      uuid:【经常常用】一个长字符串,需要把模型的id改成字符串
             保存的时候,不用自己设置ID,hibernate会设置id
      assigned:【经常常用】要手动设置id属性
    -->
   <generator class="assigned"></generator>
</id>

 

   increment就是每次存储之前  Hibernate都去数据库中查一下最大的ID 然后再设置ID存进去 ,有并发问题

  将属性设置为UUID之后并且将属性设置为String之后 , 结果显示为为这样。 

手动设置ID属性 

 修改属性之后然后就要求我们每次手动存储ID  这段代码表示 我们生成一段代码并且去掉-

映射文件的配置

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.gyf.hibernate.domain.User" table="t_user">
		<!-- 1、主键,如果属性与表字段不一至,要指定column -->
		<id name="uid" column="id">
			<!-- 主键生成策略  -->
			<generator class="native"></generator>
		</id>
		<!-- 2、用户字段 -->
		<property name="username"></property>
		<property name="password"></property>
	</class>
</hibernate-mapping>

猜你喜欢

转载自blog.csdn.net/weixin_41298572/article/details/88186991