hibernate配置

<hibernate-configuration>
<!-- 用来描述数据库的链接 -->
<session-factory>
<!-- 驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate0909
</property>
<!-- username -->
<property name="connection.username">root</property>
<!-- password -->
<property name="connection.password">123456</property>
<!-- 
hibernate针对建表的操作
update:如果有表,检查表的结构,如果没有则创建
create人-drop 启动hibernate创建表,结束hibernate删除表
create  每次启动都重新创建表
validate 每次启动都检查表的结构
-->
<property name="hbm2ddl.auto">update</property>
<!-- 在控制台显示sql语句 -->
<property name="show_sql">true</property>
<mapping resource="cn/itcast/hibernate0909/idgenerator/increment/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>



设置主键:

<class name="cn.itcast.hibernate0909.idgenerator.identity.Person" table="person">
<id name="pid" type="java.lang.Long" length="5">
<column name="pid"></column>
<!-- 
主�I产生器
 -->
<generator class="identity"></generator>
</id>
<property name="pname" type="java.lang.String" length="20"></property>
<property name="psex" type="java.lang.String" length="5"></property>
</class>

主键产生器 class="increment" (主键类型为java.lang.Long  length="5")

 Hibernate: select max(pid) from person

Hibernate: insert into person (pname, psex, pid) values (?, ?, ?)

  increment

    hibernate 内部回去查询该表中的主键的最大值

主键产生器 class="identity"(主键类型为java.lang.Long  length="5"),这时需要手动设置数据库的id为自增长

Hibernate: insert into person (pname, psex) values (?, ?)

  因为没有发出select max语句,所以identity得效率比increment要高

  缺点:主键不连贯

主键产生器 class="assigned"(主键类型为java.lang.Long  length="5")

                在映射文件中,该对象的主键生成机制是assigned,在程序中需要赋值

主键产生器 class="uuid"(主键类型为java.lang.String)javabean中设置id为String



主键的生成机制

    *increment

        效率比较低的,但是主键的值是连续的

    *indentity

        根据底层的数据库的自增生成,效率比较高,但是主键的值不连续

    *assigned

        手动赋值

    *uuid

        

    *sequence(oracle)


你可能感兴趣的:(Hibernate,主键生成)