您的位置:首页 > 其它

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>


  

  


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: