Hibernate单表映射配置

版权声明:1、本BLOG介绍。   此BLOG为个人BLOG,内容均来自原创及互连网转载。最终目的为记录自己需要的内容或自己的学习感悟,不涉及商业用途。 2、本BLOG有关原创文章的版权   本BLOG上原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。 3、本BLOG有关本站侵权   本BLOG所转载的内容,均是本人未发现有对文章版权声明的文章且无来自传 https://blog.csdn.net/qq_34159859/article/details/80949088

在上一篇博客中已经配置好了Hibernate的开发环境,今天直接基于上一篇的开发环境操作。ibernate 是一个开放源代码的 ORM 框架,它对 JDBC 进行了轻量级的对象封装,使得 Java 开发人员可以使用面向对象的编程思想来操作数据库

创建数据库和实体类

持久化类是应用程序中的业务实体类,这里的持久化是指类的对象能够被持久化保存到数据库中。Hibernate 使用普通 Java 对象(Plain Old Java Object),即 POJO 的编程模式来进行持久化。POJO类中包含的是与数据库表相对应的各个属性,这些属性通过 getter 和 setter 方法来访问,对外部隐藏了内部的实现细节。下面就来编写 Customer 持久化类。

在项目 src 目录下,创建 com.gaowei.entity 包,并在包中创建实体类 Customer(对应数据库表tab_customer),Customer 类包含与 table_customer 数据表字段对应的属性,以及相应的 getXxx ()和setXxx ()方法。

/*创建客户表*/
CREATE TABLE `tab_customer` (
`cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
`cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
`cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
`cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
`cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
`cust_address` varchar(128) DEFAULT NULL COMMENT '客户联系地址',
`cust_phone` varchar(64) DEFAULT NULL COMMENT '客户联系电话',
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
package com.gaowei.entity;

import java.io.Serializable;

/**
 * 客户实体类
 * @author gaoweiFu
 *	
 */
public class Customer implements Serializable {
	private Long custId; //编号
	private String cudtName;//姓名
	private String custSource;//来源
	private String custIndustry;//行业
	private String custLevel;//级别
	private String custAddress;//地址
	private String custPhone;//手机号码
	public Long getCustId() {
		return custId;
	}
	public void setCustId(Long custId) {
		this.custId = custId;
	}
	public String getCudtName() {
		return cudtName;
	}
	public void setCudtName(String cudtName) {
		this.cudtName = cudtName;
	}
	public String getCustSource() {
		return custSource;
	}
	public void setCustSource(String custSource) {
		this.custSource = custSource;
	}
	public String getCustIndustry() {
		return custIndustry;
	}
	public void setCustIndustry(String custIndustry) {
		this.custIndustry = custIndustry;
	}
	public String getCustLevel() {
		return custLevel;
	}
	public void setCustLevel(String custLevel) {
		this.custLevel = custLevel;
	}
	public String getCustAddress() {
		return custAddress;
	}
	public void setCustAddress(String custAddress) {
		this.custAddress = custAddress;
	}
	public String getCustPhone() {
		return custPhone;
	}
	public void setCustPhone(String custPhone) {
		this.custPhone = custPhone;
	}
	@Override
	public String toString() {
		return "Customer [custId=" + custId + ", cudtName=" + cudtName + ", custSource=" + custSource
				+ ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress
				+ ", custPhone=" + custPhone + "]";
	}
	
}

编写映射文件(*.hbm.xml)

实体类Customer 目前还不具备持久化操作的能力,而 Hibernate 需要知道实体类 Customer 映射到数据库 Hibernate 中的哪个表,以及类中的哪个属性对应数据库表中的哪个字段,这些都需要在映射文件中配置。在实体类Customer所在的包中,创建一个名称为Customer.hbm.xml的映射文件,在该文件中定义了实体类 Customer 的属性是如何映射到 tab_customer 表的列上的。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 导入约束:dtd约束
	位置:在 Hibernate 的核心 jar 包中名称为 hibernate-mapping-3.0.dtd
	Hibernate-core-5.0.7Final.jar下的org.hibernate下的hibernate-mapping-3.0.dtd文件中
	明确该文件中的内容:
			1:实体类和表的对应关系
			2:实体类中属性和表的字段的对应关系
 -->
 <!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:指定数据库表的名称
     -->
    	<class name="com.gaowei.entity.Customer" table="tab_customer">
    	        <!-- id 标签
				作用:用于映射主键
				属性:
				name:指定的是属性名称。也就是 get/set 方法后面的部分,并且首字母要转小写。
				column:指定的是数据库表的字段名称
		-->
    		<id name="custId" column="cust_id">
    			<!-- generator 标签:
						作用:配置主键的生成策略。
						属性:
						class:指定生成方式的取值。
						取值之一:native。使用本地数据库的自动增长能力。
						mysql 数据库的自动增长能力是让某一列自动+1。但是不是所有数据库都支持这种方
						式。
			-->
    			<generator class="native"></generator>
    		</id>
    		<!-- property 标签:
				作用:映射其他字段
				属性:
				name:指定属性的名称。和 id 标签的 name 属性含义一致
				column:指定数据库表的字段名称
		-->
                <property name="custName" column="cust_name"></property>
		<property name="custLevel" column="cust_level"></property>
		<property name="custSource" column="cust_source"></property>
		<property name="custIndustry" column="cust_industry"></property>
		<property name="custAddress" column="cust_address"></property>
		<property name="custPhone" column="cust_phone"></property>
    	</class>
    
    </hibernate-mapping>

编写Hibernate主配置文件

Hibernate 的映射文件反映了持久化类和数据库表的映射信息,而 Hibernate 的配置文件则主要用来配置数据库连接以及 Hibernate 运行时所需要的各个属性的值。在项目的 src 下创建一个名称为hibernate.cfg.xml 的文件.

?xml version="1.0" encoding="UTF-8"?>
<!-- 导入约束:去核心包中找:/org/hibernate/hibernate-configuration-3.0.dtd  -->
<!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工厂就是为了创建Session的
	
	1、链接数据库的信息
	2、Hibernate的基本配置信息
	3、映射文件的位置
	
	这三部分信息都能在这个文件中找到:xxx\hibernate-release-5.0.7.Final\project\etc\hibernate.properties
	这个文件:是key和value的结构,只是用的是空格分隔
	-->
	<session-factory>
		<!-- 1、数据库的链接信息 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day01</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">passw0rd</property>
		<!-- 方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 2、Hibernate的基本配置 -->
		<!-- 显示sql语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化sql语句 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 配置Hibernate的DDL语句:让hibernate帮我们自动维护表结构:
				只需要知道update就可以了,其他的可以看讲义
				有表就维护表
				没有表就创建表
		 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- 3、映射文件的位置 -->
		<mapping resource="com/gaowei/entity/Customer.hbm.xml"/>
		
		
	</session-factory>
</hibernate-configuration>

测试

在项目中新建一个名称为 com.gaowei.test 的包,然后在包中建立一个名为 HibernateDemo1.java 的文件,该文件是用来测试的类文件。

/**
* hibernate 的入门案例:
* 需求:把一个客户保存到数据库中
* @author gaoweiFu
*
*/

public class HibernateDemo1 {
/**
* 步骤分析:
* 1、加载主配置文件
* 2、根据主配置文件中的配置构建 SessionFactory
* 3、使用工厂生产一个 Session 对象
* 4、使用 Session 对象开启事务
* 5、执行保存客户操作
* 6、提交事务
* 7、释放资源
*/
    @Test
    public void test1(){
        Customer c = new Customer();
        c.setCustName("纯情电脑公司");
        //1.加载主配置文件
        Configuration cfg = new Configuration();
        cfg.configure();
        //2.构建 SessionFactory
        SessionFactory factory = cfg.buildSessionFactory();
        //3.使用 SessionFactory 生产一个 Session
        Session session = factory.openSession();//打开一个新的 Session
        //4.开启事务
        Transaction tx = session.beginTransaction();
        //5.保存客户
        session.save(c);//根据映射配置文件,生成 SQL 语句,实现保存。
        //6.提交事务
        tx.commit();
        //7.释放资源
        session.close();
        factory.close();
    }
}

Hibernate执行流程

首先创建 Configuration 类的实例,并通过它来读取并解析配置文件 hibernate.cfg.xml。然后创建SessionFactory 读取解析映射文件信息,并将 Configuration 对象中的所有配置信息拷贝到SessionFactory 内存中。接下来,打开 Session,让 SessionFactory 提供连接,并开启一个事务,之后创建对象,向对象中添加数据,通过 session.save()方法完成向数据库中保存数据的操作。最后提交事务,并关闭资源。

猜你喜欢

转载自blog.csdn.net/qq_34159859/article/details/80949088