1、dynamic-insert =“false” 动态插入:默认没有给值的字段也会出现在sql语句中;改为true就不会出现了。
2、dynamic-update=“false”动态修改:默认没修改的字段也会出现在sql语句中。
3、unsave-value=“0”:告诉数据库当id的值是0时不保存,当成null处理。当主键需要自己给定值的时候
4、access=“field”:直接操作对象的属性,不通过get,set方法;违背了java的封装性。(不建议使用)
二、主键在数据库表中的生成策略
<id name="id" column="id">
<generator class=“increment”>
1、increment:由数据库生成,怎么生成?从数据库中查询出主键字段上的最大值再加1,执行select语句,作为新记录的id,主键不会自动增长
<generator class=“identity”>
2、identity:由数据库生成自动增长的主键。执行insert语句
<generator class=“sequence”>
3、sequence:序列,数据库使用序列生成主键的值,mysql不支持
<generator class=“hilo”>
4、hilo:算法,既没有序列,也没有自动增长,使用hilo算法生成主键的值
<generator class=“native">
5、identity、sequence、hilo三选一(其实就是identity)
<generator class=“uuid">
6、id改成String类型;生成32位唯一的字符串
<generator class=“assigned">
7、assigned:自己生成指定id,自然主键
三、映射普通字段和实体类中的属性
type:三种类型的哪一种都可以
java中的类型:java.lang.String
数据库的类型:varchar
hibernate中的类型:string
java中的类型:java.lang.String
数据库的类型:varchar
hibernate中的类型:string
<property name="name" column="name" not-null="true"></property>
<property name="password" column="password" type="string"></property>
四、使用持久态的好处
hibernate会自动同步持久态对象的变化到数据库表。处于持久态的,hibernate不允许修改id
不用调用update,hibernate会自动把对象的变化同步到数据库表中