标签:更新 value int 名称 null style 访问 assigned 基本
-必须提供无参数的默认构造方法。因为程序运行时,Hibernate会运用java的反射机制,创建实体类的实例。
-所有属性必须提供public访问控制符的set get方法
-属性应尽量使用基本数据类型的包装类型(如Integer)
基本数据类型无法表达null值,所有基本数据类型的默认值都不是null,这样就有很大的缺陷。
例如有一个score属性,表示学生分数,如果为0,那么是表示该学生未参加考试还是说该学生成绩为0呢?
这时候如果用包装类型,就可以使用null来表示空值,学生未参加考试等等。
-不要用final修饰实体(将无法生成代理对象进行优化
在关系数据库中,通过主键来识别记录并保证记录的唯一性。
主键的要求:不允许为null,不能重复,不能改变
自然主键:在业务中,某个属性符合主键的三个要求,那么该属性可以作为主键。比如人的身份证就可以当作主键
代理主键:增加一个不具备任何意义的字段,通常为ID,来作为主键
在java中,按照内存地址不同区分不同的对象。
在Hibernate中通过对象标识符(OID)来维持java对象和数据库表中对应的记录。
与表的代理主键对应,OID也是整数类型,为了保证OID的唯一性和不可变性,通常由Hibernate或者底层数据库库给OID赋值。
Hiernate采用XML格式的文件来指定对象和关系数据之间的映射。Hibernate通过这个文件来生成各种sql语句。 命名规则为 实体类名.hbm.xml 应该和实体类放在同一目录下。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--根元素,有一常用属性为package,当指定了package时,后面的类名字就可以简短,例如 package="com.cad.domain",后面class标签的name只用写User即可-->
<hibernate-mapping>
<!--class标签指定类和表的对应关系,name为类名,table为表名
class标签的属性 dynamic-insert属性,默认是false,当我们执行插入语句时,会动态生成sql语句,如果我们只为某个字段赋值,其他字段为null,但是生成的sql语句还是包含其他字段,例如user有两个属性,我们只为name赋值,生成的sql语句还是 insert into user(name,password)values (?,?),而当我们将该值设置为true时,生成的sql语句会仅包含不为null的字段,生成的sql语句就是insert into user(name) values (?)
class标签的属性 dynamic-update属性,默认是false,当我们执行更新语句时,会动态生成sql语句,如果我们只为某个字段更新,其他字段不变,生成的sql语句还是包含其他字段。而当我们将该值设置为true时,生成的sql语句仅包含需要更新的字段
使用上面的两个属性可以提高运行性能,但是Hibernate动态生成sql语句需要的性能很小,所以可以省略-->
<class name="com.cad.domain.User" table="user">
<!--id标签用来设定持久化类中的OID和表的主键的映射,name为持久化类中的属性,column是数据表中的主键列名
id标签的属性:length 指定列的数据长度
id标签的属性:unsaved-value 指定当主键为某个值时,当做null来处理
id标签的属性:access 也可用在<property>标签上 默认值为property,即通过相应的get set方法来访问持久化类的属性,当值为field时,表明使用反射机制直接访问类的属性,不推荐使用,破坏封装性-->
<id name="id" column="id">
<!--
generator标签用来设定主键生成策略,hibernate内置的几种主键生成策略
1.increment 适用于代理主键。由Hibernate自动以递增的方式生成主键,每次增量为1 ,会执行两个sql语句,先从表中查找出最大的id,然后加一,插入当前数据
2.identity 适用于代理主键。由底层数据库生成主键,依赖数据库的主键自增功能
3.sequence 适用于代理主键。由底层数据库的序列来生成主键,前提是数据库支持序列。(mysql不支持,oracle支持)
4.hilo 适用于代理主键。Hibernate根据hilo算法来自己生成主键。
5.native 适用于代理主键。根据底层数据库对自动生成主键的支持能力选择 identity|sequence|hilo
6.uuid 适用于代理主键。采用UUID算法生成主键。
7.assigned 适用于自然主键。由我们自己指定主键值。例如指定身份证号为主键值
-->
<generator class="native"></generator>
</id>
<!--
property标签属性 name指定持久化类的属性名称
column 与类属性映射的字段名,如果没有设置,默认用类属性名作为字段名
not-null 指定属性的约束是否为非空,默认false
unique 指定属性的约束是否唯一
type 指定Hibernate映射类型。例如java类型为string,数据库类型为text,那么应该把Hibernate类型设置为Text。有一张对应的表可以查看。如果没有指定映射类型,Hibernate会使用反射机制识别属性的java类型,然后自动使用与之对应的Hibernate映射类型
-->
<property name="name" column="name"></property>
<property name="password" column="password"></property>
</class>
</hibernate-mapping>
标签:更新 value int 名称 null style 访问 assigned 基本
原文地址:https://www.cnblogs.com/yuexiaoyun/p/9451877.html