<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>
<!--
主�产生器
-->
<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)