Hibernate(三)之配置文件详解
2017-04-06 20:26
176 查看
一、核心配置文件(hibernate.cfg.xml)
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEhibernate-configurationPUBLIC "-//Hibernate/HibernateConfigurationDTD3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!--SessionFactory,相当于之前学习连接池配置--> <session-factory> <!--1基本4项--> <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/hi_01</property> <propertyname="hibernate.connection.username">root</property> <propertyname="hibernate.connection.password">1234</property> <!--2与本地线程绑定--> <propertyname="hibernate.current_session_context_class">thread</property> <!--3方言:为不同的数据库,不同的版本,生成sql语句(DQL查询语句)提供依据 *mysql字符串varchar *orcale字符串varchar2 --> <propertyname="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--4sql语句--> <!--显示sql语句--> <propertyname="hibernate.show_sql">true</property> <propertyname="hibernate.format_sql">true</property> <!--5自动创建表(了解),学习中使用,开发不使用的。 *开发中DBA先创建表,之后根据表生产PO类 *取值: update(最常用的取值):如果当前数据库中不存在表结构,那么自动创建表结构. 如果存在表结构,并且表结构与实体一致,那么不做修改 如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列. create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失) create-drop(极少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构. validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构.如果表结构不一致将会抛出异常. --> <propertyname="hibernate.hbm2ddl.auto">create</property> <!--6javaweb6.0存放一个问题 *BeanFactory空指针异常 异常提示:org.hibernate.HibernateException:UnabletogetthedefaultBeanValidationfactory *解决方案:取消bean校验 --> <propertyname="javax.persistence.validation.mode">none</property> <!--添加映射文件 <mapping>添加映射文件 resource设置xml配置文件(addResource(xml)) class配置类(addClass(User.class))配置的是全限定类名 --> <mappingresource="com/jxlg/domain/User.hbm.xml"/> </session-factory>
1.1、四个基本配置
在核心配置文件中,我们首先需要配置的是连接数据库的基本操作,分别为:driver_class、url、username、password
1.2、与本地线程绑定
如果你要使用线程绑定的时候,你必须要在核心文件中配置,才能使用getCurrentSession()
1.3、显示sql语句和格式化sql语句
这个比较简单
1.4、自动创建表
在开发中我们知道,我们做项目的时候一把数据库中的表示首先建立好的,所以在开发中基本用不到,
在key为hbm2ddl.atuo中有四个属性,通常用update
1.5、数据库方言配置
为不同的数据库,不同的版本,生成sql语句(DQL查询语句)提供依据。我们使用哪一个数据库就要去
hibernate.properties文件中去找key为hibernate.dialect对应的value值。在选择方言的时候,就选择最短的那个.
1.6、映射配置
我们需要在核心配置文件中添加映射文件
二、Hibernate中的持久化类(javaBean)
2.1、编写原则提供一个无参数public访问控制符的构造器
提供一个标识属性,映射数据表主键字段
所有属性提供public访问控制符的setget方法(javaBean)
标识属性应尽量使用基本数据类型的包装类型
不要用final修饰实体(将无法生成代理对象进行优化)
2.2、持久化对象的唯一标识OID
Java按地址区分同一个类的不同对象.
关系数据库用主键区分同一条记录
Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系
结论:对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID赋值
2.3、区分自然主键和代理主键
主键需要具备:不为空/不能重复/不能改变
自然主键: 在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.
代理主键: 在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键.
三、映射文件(*.hbm.xml)
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!--ORM元数据表对象关系映射文件 package:配置该配置文件中类所在的包.--> <hibernate-mappingpackage="com.jxlg.domain"> <!--class:配置实体与表的关系 name:填写实体的完整类名 table:与实体对应表的名称 dynamic-insert:动态插入默认值是false true=>如果字段值为null,不参与insert语句 dynamic-update:动态更新默认值"false" true=>没改动过的属性,将不会生成到update语句中 --> <classname="User"table="t_user"> <!--id:配置实体与表中id对应 name:user对象中标识主键的属性名称 column:主键在表中的列名 length:列的数据长度 unsaved-value(不常用):指定主键为什么值时,当做null来处理. access(强烈推荐不要用):field那么在操作属性时,会直接操作对应的字段而不是get/set方法 --> <idname="id"column="id"length="255"> <!--generator:主键生成策略 1.increment数据库自己生成主键.先从数据库中查询最大的ID值,将ID值加1作为新的主键 2.identity依赖于数据的主键自增功能 3.sequence序列,依赖于数据中的序列功能(Oracle). 4.hilo(纯了解,永远用不到):Hibernate自己实现序列的算法,自己生成主键.(hilo算法) 5.native自动根据数据库判断,三选一.identity|sequence|hilo 6.uuid生成32位的不重复随机字符串当做主键 7.assigned自己指定主键值.表的主键是自然主键时使用. --> <generatorclass="uuid"></generator> </id> <!--property:实体中属性与表中列的对应 name:实体中属性名称 column:表中列的名称 length:数据长度 precision:小数点后的精度 scale:有效位数 insert(一般不用):该属性是否加入insert语句. update(一般不用):该属性是否加入update语句. not-null:指定属性的约束是否使用非空 unique:指定属性的约束是否使用唯一 --> <!-- type:表达该属性的类型 可以用三种方式指定属性 java类型数据库类型指定Hibernate类型指定 java.lang.Stringvarcharstring --> <propertyname="name"column="name"update="true"type="string"></property> <propertyname="password"column="password"></property> <propertyname="sal"column="sal"precision="2"scale="3"></property> </class> </hibernate-mapping>
相关文章推荐
- Java Hibernate配置文件详解
- Hibernate配置文件详解和持久化类
- SSH:Hibernate框架(配置文件详解)
- hibernate--5.Hibernate配置文件详解
- hibernate 配置文件详解
- Hibernate配置详解 --POJO映射文件 – 类映射
- Hibernate配置文件元素详解
- Hibernate框架两种配置文件详解
- JAVA框架之Hibernate【配置文件详解】
- Hibernate 主配置文件详解
- Hibernate配置文件详解
- Java程序员从笨鸟到菜鸟之(五十三)细谈Hibernate(四)Hibernate常用配置文件详解
- Java程序员从笨鸟到菜鸟之(五十三)细谈Hibernate(四)Hibernate常用配置文件详解
- Hibernate配置文件中映射元素详解
- [转]Hibernate配置文件详解
- Hibernate配置文件中映射元素详解(1)
- Hibernate配置文件中映射元素详解
- hibernate的配置文件详解
- Hibernate3.3配置日志文件详解
- Hibernate常用配置文件详解