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
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();
}
}