\hibernate核心配置和映射文件

核心的配置文件:

1: 文件命名:
src: 类路径(**一定要遵循命名规范)
文件的名称固定: hibernate.cfg.xml

2:核心:
xml声明部分: 引入了一个dtd文件:

配置的内容:  
 必须参数: 连接数据的四大参数:
  driver_class
  url
  username
  password 
  dialect : 方言: 

可选参数:
show_sql : 运行的时候, 在控制台上打印sql 语句:
format_sql : 打印sql 的时候, 带有格式:
hbm2ddl.auto : Hibernate是否生成ddl语句:

引入映射文件 :

resource =“Customer.hbm.xml” // 引入文件存在的位置:
案例: user/com/mrzhang/domain/Customer.hbm.xml
整个xml代码如下:

<?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>
    <!-- sessionFactory:  -->
	<session-factory>
		<!-- 连接数据库的 四个参数: 必须要进行配置的四个参数:-->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/Hibernate001</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
	    <!-- 配置要连接的数据库: 从核心包的dialect当中找到:   -->
	    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
		<!-- 可选参数:
		    hibernate.show_sql: 打印sql语句:
		    hibernate.format:打印的sql 语句具备格式: 
		-->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		  <!-- 
		  是否使用Hibernate生成数据库的ddl语句 : create drop alter 
		  none: 表示  Hibernate不管理ddl 语句: 
		  create: 删除底层数据表, 创建新的表。 
		  create-drop: 运行完成之后, 将底层数据库的表删除: 
		   update: 数据库当中没表, 自动创建: 
		       数据库当中有表, 使用原有的表。
		       使用原来的表: 如果表结构发生了变化, 能够自动更新表结构。 
		   -->
		<property name="hibernate.hbm2ddl.auto">create</property>
		
		<!-- Hibernate 内部有自己的数据源: 但是也可以引入外部的这些优秀的数据源
		     c3p0 :  
		     
		 -->
		<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!--在连接池中可用的数据库连接的最少数目 -->
		<property name="c3p0.min_size">5</property>
		<!--在连接池中所有数据库连接的最大数目  -->
		<property name="c3p0.max_size">20</property>
		<!--设定数据库连接的过期时间,以秒为单位,
		如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
		<property name="c3p0.timeout">120</property>
		 <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
		<property name="c3p0.idle_test_period">3000</property>
		
		<!-- 引入实体的映射文件:  -->
		<mapping  resource="com/yidongxueyuan/domain/Customer.hbm.xml"/>
	
		
	</session-factory>
</hibernate-configuration>

映射文件的详解:

就是上面代码中的这个部分:在这里插入图片描述

<xml dtd 部分> (直接复制即可)

<hibernate-mappding name》(csdnbug,尖括号会报错打不出来): 实体类的全路径名称:
table: 对应数据库当中的表: 如果table 和 表名和 实体类的名称相同, table 可以省略。
catalog ="" 指定了数据库的名称: 可以省略:

name: 类当中属性的名称:
column: 数据库当中的主键字段: 如果属性的名称和字段相对应, 就省略
length:指定了数据库当中列的长度。 可以不指定。 默认情况是255:
type: 指定数据当中的类型: 使用默认值:
type的值有三种表示形式:
可以使用java当中的类型: java.lang.String
可以指定数据库当中的类型: varchar
可以使用Hibernate自带类型: string

管理主键字段: 主键的生成策略:

name:
column:
length:
type: 以上四个字段和id的一致:
not-null: 字段是否为空: false true
unique: 设置值是否为一: false true :

<?xml version="1.0"?>
<!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 : 实体bean的全路径名称: 
        table: 实体类对应的底层数据库表:  当实体类的名称和表的名称一致的情况下, 可以省略的。 
        catalog: 对应数据库的名称: 可以省略 
     -->
	<class name="com.yidongxueyuan.domain.Customer" table="cst_customer" >
		<!-- 配置主键字段: 
		   单独的标签: id :  
		   name: 实体当中的属性: 
		   column: 对应表当中的字段。 
		       制定主键的生成策略:  
		 -->
		<id name="cust_id" column="cust_id" length="21"  >
		    <!-- 主键的生成策略 -->
			<generator class="native"/>
		</id>
		<!-- 普通的字段: 
		property:表示这是普通的字段: 
		name: 实体bean的属性。 
		column: 表的字段;
		 -->
		<property name="cust_name" column="cust_name" length="21" type="string" not-null="true" unique="false"/>
		<property name="cust_source" column="cust_source"/>
		<property name="cust_industry" column="cust_industry"/>
		<property name="cust_level" column="cust_level"/>
		<property name="cust_phone" column="cust_phone"/>
		<property name="cust_mobile" column="cust_mobile"/>
		
	</class>
	
</hibernate-mapping>        

API详解:

1: Configuration对象:
Configuration : 配置对象, Hibernate工作通过该对象, 读取配置文件。
configure() ;只能直接读取src 下的 hibernate.cfg.xml 文件, 名称固定
configure(String path); 可以读取指定位置的配置文件。
addResource(“String path”);如果Hibernate的核心配置文件, 是一个Properties文件, 不能自动加载映射。 需要手动加载。
buildSessionFactory();获得一个会话工厂:

2: SessionFactory : 工厂类:
1:作用: a: 获得session: openSession();
b: 不是轻量级的对象, 一个项目只需要一个工厂。 线程安全的对象。
c: SessionFactory 是一个缓存对象, 负责Hibernate当中的二级缓存。
二级缓存, 不能直接使用, 如果需要使用, 需要配置。 在实际的开发过程当中, 已经被Redis数据库取代。
d: 内部维护了一个连接池:
使用步骤:
(1)引入外部数据源的jar包:
(2)Hibernate.cfg.xml当中进行配置:
整个文件代码:

<?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>
    <!-- sessionFactory:  -->
	<session-factory>
		<!-- 连接数据库的 四个参数: 必须要进行配置的四个参数:-->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/Hibernate001</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
	    <!-- 配置要连接的数据库: 从核心包的dialect当中找到:   -->
	    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
		<!-- 可选参数:
		    hibernate.show_sql: 打印sql语句:
		    hibernate.format:打印的sql 语句具备格式: 
		-->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		  <!-- 
		  是否使用Hibernate生成数据库的ddl语句 : create drop alter 
		  none: 表示  Hibernate不管理ddl 语句: 
		  create: 删除底层数据表, 创建新的表。 
		  create-drop: 运行完成之后, 将底层数据库的表删除: 
		   update: 数据库当中没表, 自动创建: 
		       数据库当中有表, 使用原有的表。
		       使用原来的表: 如果表结构发生了变化, 能够自动更新表结构。 
		   -->
		<property name="hibernate.hbm2ddl.auto">create</property>
		
		<!-- Hibernate 内部有自己的数据源: 但是也可以引入外部的这些优秀的数据源
		     c3p0 :  
		     
		 -->
		<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!--在连接池中可用的数据库连接的最少数目 -->
		<property name="c3p0.min_size">5</property>
		<!--在连接池中所有数据库连接的最大数目  -->
		<property name="c3p0.max_size">20</property>
		<!--设定数据库连接的过期时间,以秒为单位,
		如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
		<property name="c3p0.timeout">120</property>
		 <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
		<property name="c3p0.idle_test_period">3000</property>
		
		<!-- 引入实体的映射文件:  -->
		<mapping  resource="com/yidongxueyuan/domain/Customer.hbm.xml"/>
	
		
	</session-factory>
</hibernate-configuration>

(3)通过控制台的初始化信息可以查询

例子如下:

package com.yidongxueyuan.test;

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.yidongxueyuan.domain.Customer;

public class HibernateTest01 {
	
	
	@Test
	public void testAdd() throws Exception {
		/*
		 * 1: 第一步: 读取Hibernate的核心配置文件: 
		 * 2:第三步:  获得一个会话工厂: 
		 * 3: 使用工厂获得一个session对象:  
		 */
		
		
		//创建一个对象, 用来读取核心的配置文件: 
		/*
		 * 对象: 创建配置对象, 并且调用方法的时候, 并没有直接指定读取的配置文件。 默认读取的是类路径下的
		 *  名称为:hibernate.cfg.xml 的配置文件: 
		 */
		Configuration config = new Configuration().configure();
		
		//获得一个会话工厂: 
		SessionFactory factory = config.buildSessionFactory();
		
		//3:使用工厂获得一个session对象:  类似之前的connnection : 
		Session session = factory.openSession();
		
		// 4: 开启事务:
		Transaction tx = session.beginTransaction();
		//====================中间进行增删改查操作: 
		
		//操作实体bean: 
		Customer cust = new Customer(); 
		cust.setCust_name("军哥");
		cust.setCust_phone("18811307278");
	
		
		Serializable id = session.save(cust);//主键字段: 
		
		// 事务的提交: 
		tx.commit(); 
		//关闭session: 
		session.close();// close : session对象换回到池子当中。 
		
		//关闭SessionFactory: 
		factory.close();//显示关闭sessionFactory 。
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值