查看“Hibernate笔记 2:配置文件详解”的源代码
←
Hibernate笔记 2:配置文件详解
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Hibernate]] == 关于 == 配置文件是 Hibernate 中相当重要的部分,对于 Hibernate、数据库、orm 等内容的都依赖于配置文件。 1、配置文件可以是: '''.xml文件'''、'''.properties文件'''(属性文件); 2、配置文件中均需要引入 '''dtd''' 约束; - (xml 的约束格式包括:dtd、schema,而 Hibernate 的配置文件中均使用 dtd) == “映射关系”配置文件 == “映射关系”,即:实体类和数据库表一一对应的关系。 关于“''映射关系''配置文件”: 1、''文件名称'' 和 ''位置'' 没有固定要求; - 建议:在实体类所在包里面创建,名称为“<实体类名称>.hbm.xml”; === 格式 === : <syntaxhighlight lang="xml" highlight=""> <?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"> <hibernate-mapping> <!-- class 标签:建立“类”和“表”的映射 * name 属性 :类中的全路径 * table 属性 :表名(如果类名和表名一致,则该属性可以省略) * catalog 属性:数据库名称,可以省略 --> <class name="XXX.XXX.XXX" table="ZZZ"> <!-- id 标签:建立“类中的唯一性属性”与“表中的主键”的映射 * name 属性 :类中的属性名 * column 属性:表中的字段名(如果“类的属性名”和“表中的字段名”一致,则可省略) * length 属性:字段的长度 * type 属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型 --> <id name="xxx" column="zzz"> <!-- 主键生成策略 --> <generator class="???"/> </id> <!-- id 标签: 建立“类中的普通属性”与“表中的字段”的映射 * name 属性 :类中的属性名 * column 属性:表中的字段名(如果“类的属性名”和“表中的字段名”一致,则可省略) * length 属性:字段的长度 * type 属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型 --> <property name="xxx" column="zzz" type="???"/> <property name="xxx" column="zzz" type="???"/> <property name="xxx" column="zzz"/> <property name="xxx" column="zzz"/> </class> </hibernate-mapping> </syntaxhighlight> # <code>'''<class>'''</code> 用于配置“实体类”与“表”的对应; #* “name”属性值为“实体类的全路径”; # <code>'''<id>'''</code> 用于配置“(具有唯一性的)实体类的属性”与“(具有唯一性的)表的字段”的对应; #* “column”属性可以省略(与“name”一致); #* <code>'''<generator>'''</code> 用于配置主键的“增长方式”; #*# '''uuid'''; #*# '''native'''(自增); # <code>'''<property>'''</code> 用于配置“实体类的属性”与“表的字段”的对应; #* “column”属性可以省略(与“name”一致); #* “type”属性用于设置生成表字段的类型(自动对应类型); === 示例 === : “Customer.hbm.xml”: : <syntaxhighlight lang="xml" highlight=""> <?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"> <hibernate-mapping> <class name="cn.itcast.domain.Customer" table="customer"> <id name="cust_id" column="id"> <generator class="native"/> </id> <property name="cust_name" column="name"/> <property name="cust_source" column="source"/> <property name="cust_industry" column="industry"/> <property name= "cust_level" column= "level"/> <property name="cust_phone" column="phone"/> <property name="cust_mobile" column="mobile"/> </class> </hibernate-mapping> </syntaxhighlight> == 核心配置文件 == Hibernate 核心配置文件,其名称与位置均是固定的。 关于“Hibernate 核心配置文件”: 1、'''文件名称和位置固定''': - 位置:必须位于 src 下。 - 名称:必须为“<span style="color: blue; font-size: 120%">'''hibernate.cfg.xml'''</span>”(或“<span style="color: blue; font-size: 120%">'''hibernate.properties'''</span>”)。 2、hibernate 操作过程中,只会加载核心配置文件,其他配置文件不会加载。 - “映射关系配置文件”需要配置到“核心配置文件”中,才会被加载。 === 格式 === : <syntaxhighlight lang="xml" highlight=""> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 第一部分 数据库信息 --> ... <!-- 第二部分 hibernate信息 --> ... <!-- 第三部分 映射文件 --> <mapping resource="..."/> <session-factory> </hibernate-configuration> </syntaxhighlight> # 配置数据库信息: #* 使用不同的数据库驱动(不同版本驱动)时,配置信息可能有差别。【可以从类似“mysql-connector”的包里去找相应内容】 #: 示例: ## 使用“mysql-connector-java-5.0.4-bin.jar”时: ##: <syntaxhighlight lang="xml" highlight=""> <property name="hibernate.connection.driver.class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">admin</property> </syntaxhighlight> ## 使用“mysql-connector-java-8.0.11.jar”时: ##: <syntaxhighlight lang="xml" highlight=""> <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day02?useSSL=false&serverTimezone=UTC</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">admin</property> </syntaxhighlight> # 配置 Hibernate 信息: #: <syntaxhighlight lang="xml" highlight=""> <!-- 控制台输出 sql 语句 --> <property name="hibernate.show_sql">true</property> <!-- 格式化输出的 sql 语句 --> <property name="hibernate.format_sql">true</property> <!-- hibernate 的 DDL 规则(update:无则创建,有则更新) --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置数据库方言(让 hibernate 框架识别不同数据库特有的方言) --> <property name="hibernate.dialect">org.hibernate.dialect.MySqlDialect</property> </syntaxhighlight> # 配置“映射关系配置文件”: #* 需要定位到(需要加载的)“映射关系配置文件”所在包的位置。 #: 示例: #: <syntaxhighlight lang="xml" highlight=""> <mapping resource = "cn/itcast/entity/User.hbm.xml"/> </syntaxhighlight> === 常用配置 === :{| class="wikitable" ! 名称 !! 用途 |- | hibernate.dialect || 操作数据库方言 |- | hibernate.connection.driver_class || 连接数据库驱动程序 |- | hibernate.connection.url || 连接数据库 URL |- | hibernate.connection.username || 数据库用户名 |- | hibernate.connection.password || 数据库密码 |- | hibernate.show_sql || 在控制台上输出 SQL 语句 |- | hibernate.format_sql || 格式化控制台输出的 SQL 语句 |- | hibernate.hbm2ddl.auto || 当 SessionFactory 创建时是否根据映射文件自动验证表结构或自动创建、自动更新数据库表结构。 * 该参数的取值为: none、 validate、 update、 create 和 create-drop。 |- | hibernate.connection.autocommit || 事务是否自动提交 |} : hibernate.hbm2ddl.auto 的取值:(DDL,即“数据库定义语言”,如:create drop alter 等) :* <span style="color: blue">none</span>:不用 Hibernate 自动生成表; :* <span style="color: blue">create</span>:每次都会创建新的表;【用于测试】 :* <span style="color: blue">create-drop</span>:每次都会创建新的表,执行程序结束后删除表;【用于测试】 :* <span style="color: blue">'''update'''</span>:如果数据库中有表则直接使用,否则创建新表,且可以更新表结构; :* <span style="color: blue">validate</span>:只会使用原有的表,对映射关系进行校验; === 连接池配置 === SessionFactory 内部还维护了一个连接池,如果需要使用第三方连接池(如:C3PO),则需要手动进行配置。 步骤: # 引入 C3PO 相关 JAR 包: #* c3p0-0.9.2.1.jar #* hibernate-c3p0-5.0.7.Final.jar #* mchange-commons-java-0.2.3.4.jar # 配置 C3PO 连接池(hibernate.cfg.xml 中): #: <syntaxhighlight lang="xml" highlight=""> <!-- 配置C3PO连接池 --> <property name= "connection.provider_c1ass">org.hibernate.connection.C3POConnectionProvider</property> <!-- 连接池中可用数据库连接的最少数目 --> <property name= "c3p0.min_size">5</property> <!-- 连接池中所有数据库连接的最大数目 --> <property name= "c3p0.max_size">20</property> <!-- 数据库连接的过期时间(单位:秒): 如果池中某个连接处于空闲状态的时间超过了 timeout 时间,就会从连接池中消除 --> <property name= "c3p0.timeout">120</property> <!-- 检查连接池中的空闲连接的时间间隔(单位:秒)--> <property name= "c3p0.idle_test_period ">3000</property> </syntaxhighlight> === 标题文本 ===
返回至“
Hibernate笔记 2:配置文件详解
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息