01.Hibernate入门

@hibernate

01.Hibernate入门

1、什么是Hibernate

概念: 一个运行在持久层的ORM框架

	持久化操作,早期指的是永久的保存数据,现在指对数据库的所有直接操作
	ORM:Object Relational Mapping(对象关系映射)
		类		-	表
		对象	-	一行数据记录
		属性	-	一个字段,一个列
	元数据
		描述数据的数据
		对象-关系映射的细节。使用XML文件进行描述。
底层使用JDBC完成数据库的操作

2、Hibernate能干什么

能简单的,配置化的数据库操作

3、下载与安装

架包下载: Hibernate官网

插件下载:HibernateTools

4、创建Hibernate应用程序

4-1:创建工程

4-2:导入jar包
Hibernate-Required(必须文件)

JAR包名称 描 述
hibernate3.jar Hibernate 的核心包
antlr-2.7.6.jar 语言转换工具,Hibernate 利用它实现 HQL 到 SQL 的转换
commons-collections-3.1.jar collections Apache 的工具集,用于增强 Java 对集合的处理能力
dom4j-l.6.1.jar dom4j XML解析器
javassist-3.12.0.GA.jar 代码生成工具,Hibernate 利用它在运行时扩展 Java 类
jta-1.1.jar 标准的 JAVA 事务(跨数据库)处理接口
slf4j-api-l.6.1.jar 只是一个接口,用于整合 log4j
hibernate-jpa-2.0-api-1.0.1.Final.jar JPA 接口开发包
log4j-l.2.17.jar Log4j 日志文件核心 JAR
slf4j-log4jl2-l.7.12.jar Hibernate 使用的一个日志系统

4-3:对Hibernate进行全局的配置(cfg.xml)

​ 数据库连接信息等… …

4-4:创建一个Mapper映射文件(hbm.xml)

​ 类与表,对象与列,属性与字段之间的对应关系… …

5、访问数据库

//配置信息对象
Configuration config = new Configuration();
//加载全局配置文件
config = config.configure("hibernate.cfg.xml");
//创建Session工厂(Hibernate5以后)
SessionFactory sessionFactory = config.buildSessionFactory();
//创建数据库访问对象(建立与数据库的会话)
Session session = sessionFactory.openSession();
//获取事务对象(开启事务)
Transaction t = session.beginTransaction();
//数据库操作 get/save

//释放资源
t.commit();
session.close();
sessionFactory.close();

案例:创建第一个Hibernate

1.创建工程

2.导入jar包

Hibernate-Required
mysql-connector

01.Hibernate入门

3.对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>
	<!-- 配置Hibernate的环境信息 -->
    <session-factory>
    	<!-- 
    		数据库连接基础信息
    			hibernate.connection.
    	 -->
    	<!-- 驱动类 -->
    	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    	<!-- 连接数据库URL -->
    	<property name="hibernate.connection.url">jdbc:mysql:///user_db?characterEncoding=UTF-8</property>
    	  <!-- 连接数据库的用户名 -->
    	<property name="hibernate.connection.username">root</property>
    	<!-- 数据库的密码 -->
    	<property name="hibernate.connection.password">123456</property>
    	
    	<!-- 
    		Hibernate配置
    			hibernate-release-5.4.22.Final\hibernate-release-5.4.22.Final\project\etc\hibernate.properties
    	 -->
    	<!-- 指定数据库方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		 <!-- 显示sql语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化sql语句 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 
			表生成策略
				none:不使用表生成策略
				create:每次执行之前都会先删除该表,创建一张新的表
				create-drop:创建表并删除表
				update:
					当表不存在的时候,则Hibernate会自动创建表
					当表存在时
						表结构没有改变,则不会创建或者更新包
						表结构发生改变,则会去更新表结构(如果是删除列,则不会执行)
				validate:验证表
		 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 引入映射文件 -->
		<mapping resource="user-mapper.hbm.xml"/>		
    </session-factory>
</hibernate-configuration>

4.编写实体类(持久化类)

持久化类是应用程序中的业务实体类,符合基本的 JavaBean 编码规范。Hibernate 操作的持久化类基本上都是普通的 Java 对象(Plain Ordinary Java Object,POJO),这些普通 Java 对象中包含的是与数据库表相对应的各个属性,并且这些属性可以通过 getter 和 setter 方法访问。
创建一个Mapper映射文件(hbm.xml)

package com.zb.entity;
//实体类
import java.util.Date;

public class UserInfo {
	private Integer userId;
	private String userName;
	private Integer userAge;
	private String userSex;
	private String userAddress;
	private String phoneNumber;
	private Date birth;
	
	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public Integer getUserAge() {
		return userAge;
	}

	public void setUserAge(Integer userAge) {
		this.userAge = userAge;
	}

	public String getUserSex() {
		return userSex;
	}

	public void setUserSex(String userSex) {
		this.userSex = userSex;
	}

	public String getUserAddress() {
		return userAddress;
	}

	public void setUserAddress(String userAddress) {
		this.userAddress = userAddress;
	}

	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}

	public UserInfo() {
		super();
	}

	public UserInfo(Integer userId, String userName, Integer userAge, String userSex, String userAddress,
			String phoneNumber, Date birth) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.userAge = userAge;
		this.userSex = userSex;
		this.userAddress = userAddress;
		this.phoneNumber = phoneNumber;
		this.birth = birth;
	}

	@Override
	public String toString() {
		return "UserInfo [userId=" + userId + ", userName=" + userName + ", userAge=" + userAge + ", userSex=" + userSex
				+ ", userAddress=" + userAddress + ", phoneNumber=" + phoneNumber + "]";
	}
}

5、配置Mapper映射文件(hbm.xml)

<?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>
	<!-- 
		类与表的映射关系
		name代表的是类名,table代表的是表名
	 -->
	 <class name="com.zb.entity.UserInfo" table="user_info">
	 	<!-- 属性与字段的映射关系 -->
	 	 <!-- name代表的是UserInfo类中的id属性,column代表的是UserInfo表中的主键id -->
	 	<!-- 配置标识列 -->
	 	<id name="userId" column="user_id">
	 		<!-- 
	 			
	 			主键生成策略:指定自增长列的生成器
	 				native:让Hibernte根据数据底层的厂商标识自动选择生成规则
	 		 -->
	 		<generator class="native"></generator>
	 	</id>
	 	<!-- 其他普通属性使用property标签映射 -->
	 	<property name="userName" column="user_name"/>
	 	<property name="userAge" column="user_age"/>
	 	<property name="userSex" column="user_sex"/>
	 	<property name="userAddress" column="user_address"/>
	 	<property name="phoneNumber" column="phone_number"/>
	 </class>
</hibernate-mapping>

6、访问数据库

package com.zb.test;

import java.util.Date;

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

import com.zb.entity.UserInfo;

public class TestMain {
	public static void main(String[] args) {
		//配置信息对象
		Configuration config = new Configuration();
		//加载全局配置文件
		config = config.configure("hibernate.cfg.xml");
		//创建Session工厂(Hibernate5以后)
		SessionFactory sessionFactory = config.buildSessionFactory();
		//创建数据库访问对象(建立与数据库的会话)
		Session session = sessionFactory.openSession();
		//获取事务对象(开启事务)
		Transaction t = session.beginTransaction();
		//创建对象
		UserInfo ui = new UserInfo(null, "鸭保国", 69, "男", "高老庄", "6543211",new Date());
        //向数据库中添加一条数据
		session.save(ui);
		//对数据库进行查询操作
		//UserInfo userInfo = session.get(UserInfo.class, 2);
		//System.out.println(userInfo);
		
		t.commit();
		session.close();
		sessionFactory.close();
	}
}
上一篇:容器-TreeMap容器类(十九)


下一篇:react 16 性能提升 总结