Hibernate配置文件属性和常见映射元素
核心配置文件常见配置属性
属性 | 描述 |
---|---|
hibernate.connection.driver_class | 指定数据库的驱动类 |
hibernate.connection.url | 指定数据库的URL |
hibernate.connection.username | 指定数据库的用户名 |
hibernate.connection.password | 指定数据库的密码 |
hibernate.dialect | 指定数据库的方言类 |
hibernate.show_sql | 设置为true,程序运行时在控制台输出SQL语句 |
hibern.connection.datasource | 指定数据源的JNDI名字 |
映射文件常见元素
<hibernate-mapping>元素
<hibernate-mapping
schema="schemaName"
default-cascade="cascade_style"
default-access="field|property|ClassName"
default-laze="true|false"
auto-import="true|false"
package="package.name"
/>
schema(可选):数据库schema的名称,表名会加上所指定的schema名字扩展为表的全限定名。
default-cascade(可选,默认为none):默认的级联风格。指定了未明确注明cascade属性的Java属性和集合类,Hibernate会采取对应的默认级联风格。
default-access(可选,默认为property):Hibernate用来访问属性的策略,可以通过实现PropertyAccessor接口自定义。
默认property实际上就是通过属性的set和get方法来访问和设置属性。
default-lazy(可选,默认为true):延迟加载,指定了未明确注明lazy属性的Java属性和集合类,Hibernate会采取对应的默认加载风格
延迟加载,例如我们加载一个对象,查询数据表再封装成对象时,我们先仅仅加载数据表的OID到内存,而其他的属性还是在数据库里,只有当我们要获得其他属性时(例如调用get方法)我们再去加载这些信息到内存中。
auto-import(可选,默认为true):指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
package(可选):指定一个包前缀
指定后面class pojo类包名前缀,如果不指定前缀,我们需要指定全限定的类名
<class>元素
<class
name="ClassName"
table="tableName"
discriminator-value="discriminator_value"
mutable="true|false"
schema="owner"
proxy="ProxyInterface"
dynamic-update="true|false"
dynamic-insert="true|false"
select-before-update="true|false"
polymorphism="implicit|explicit"
where="arbitrary sql where condition"
persister="PersisterClass"
batch-size="N"
optimistic-lock="none|version|dirty|all"
lazy="true|false"
/>
name(可选): 持久化类(或者接口)的Java全限定名。若指明的持久化类实际上是一个接口,也可以被完美地接受。其后你可以用<subclass>来指定该接口的实际实现类名。
table: 对应的数据库表名。
discriminator-value(辨别值) (可选 - 默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。可以接受的值包括null和not null
mutable(可变) (可选, 默认值为 true): 表明该类的实例可变(不可变)。
schema (可选): 覆盖在根<hibernate-mapping>元素中指定的schema名字。
proxy (可选): 指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。
dynamic-update(动态更新) (可选,默认为false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
dynamic-insert(动态插入) (可选, 默认为false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
select-before-update (可选,默认值为false): 指定Hibernate除非确定对象的确被修改了,不会执行SQL UPDATE操作。在特定场合(实际上,只会发生在一个临时对象关联到一个新的session中去,执行update()的时候),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该进行UPDATE。
polymorphism(多形,多态) (可选, 默认值为 implicit (隐式)): 界定是隐式还是显式的使用查询多态。
where (可选) 指定一个附加的SQLWHERE 条件,在抓取这个类的对象时会一直增加这个条件。
persister (可选): 指定一个定制的ClassPersister。
batch-size (可选,默认是1) 指定一个用于根据标识符抓取实例时使用的”batch size”(批次抓取数量)。
optimistic-lock(乐观锁定) (可选,默认是version): 决定乐观锁定的策略。
lazy(延迟) (可选): 假若设置 lazy=”true”,就是设置这个类自己的名字作为proxy接口的一种等价快捷形式。
Hibernate映射类型
在对象/关系映射文件中,Hibernate采用映射类型作为Java类型和SQL类型的桥梁。Hibernate映射类型分为2种:内置映射类型和自定义映射类型。
内置映射类型
Hibernate对所有的Java原生类型、常用的Java类型如String、Date等都定义了内置的映射类型。下列表列出了Hibernate映射类型、对应的Java类型以及对应的标准SQL类型。
注意大小写!!!
Hibernate映射类型 | Java类型 | 标准SQL类型 | 大小 |
integer/int | java.lang.Integer/int | INTEGER | 4字节 |
long | java.lang.Long/long | BIGINT | 8字节 |
short | java.lang.Short/short | SMALLINT | 2字节 |
byte | java.lang.Byte/byte | TINYINT | 1字节 |
float | java.lang.Float/float | FLOAT | 4字节 |
double | java.lang.Double/double | DOUBLE | 8字节 |
big_decimal | java.math.BigDecimal | NUMERIC | |
character | java.lang.Character/java.lang.String/char | CHAR(1) | 定长字符 |
string | java.lang.String | VARCHAR | 变长字符 |
boolean/ yes_no/true_false | java.lang.Boolean/Boolean | BIT | 布尔类型 |
date | java.util.Date/java.sql.Date | DATE | 日期 |
timestamp | java.util.Date/java.util.Timestamp | TIMESTAMP | 日期 |
calendar | java.util.Calendar | TIMESTAMP | 日期 |
calendar_date | java.util.Calendar | DATE | 日期 |
binary | byte[] | BLOB | BLOB |
text | java.lang.String | TEXT | CLOB |
serializable | 实现java.io.Serializablej接口的任意Java类 | BLOB | BLOB |
clob | java.sql.Clob | CLOB | CLOB |
blob | java.sql.Blob | BLOB | BLOB |
class | java.lang.Class | VARCHAR | 定长字符 |
locale | java.util.Locale | VARCHAR | 定长字符 |
timezone | java.util.TimeZone | VARCHAR | 定长字符 |
currency | java.util.Currency | VARCHAR | 定长字符 |