Hibernate
1.简介
1.1项目框架中的体系结构
1.2ORM框架
- 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
- n 对象和表字段进行对应
- 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
- n Object:对象,java对象,此处特指JavaBean,Model
- n Relational:关系,二维表,数据库中的表。
- n Mapping:映射
1.3什么是hibernate
- Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装
- DBUtils也是对JDBC的封装
- 它将POJO与数据库表建立映射关系,是一个全自动的orm框架
- POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans
- hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
- Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用
1.4总结hibernate
- Hibernate是一个数据持久化层的ORM框架,它的主要功能就是把对象映射到表中,操作API,只需要将一个对象存储到数据库,不需要写sql语句
- Hibernate提供了对关系型数据库增删改成操作
1.5主流的ORM框架
- Hibernate 最流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL
- MyBatis 本是apache的一个开源项目 iBatis,支持普通 SQL查询,存储过程和高级映射的优秀持久层框架
1.6Hibernate的优点
- Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码
- Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作
- Hibernate使用java的反射机制
- v Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,有一对一到多对多的各种复杂关系映射
2.hibernate的简单使用
2.1hibernate的使用步骤
- 下载hibernate 的jar包,并导入到项目中(http://hibernate.org/orm/)
- 创建数据库和表
- 配置核心配置文件hibernate.cfg.xml【这个文件有连接数据库的配置
- 编写映射文件hibernate mapping(*.hbm.xml),【声明对象如何关联数据库表字段】
- A.调用hibernate的api
2.2数据库建表
create database hibernate;
use hibernate;
create table user_info(
id int auto_increment primary key,
username varchar(50),
password varchar(30),
real_name varchar(100)
);
insert into user_info (id,username,password,real_name) values(null,"张三丰",'123456','张君宝');
insert into user_info (id,username,password,real_name) values(null,"东邪",'1223456','黄药师');
insert into user_info (id,username,password,real_name) values(null,"西毒",'123456','欧阳锋');
insert into user_info (id,username,password,real_name) values(null,"北丐",'123456','洪七公');
2.3hibernate的核心配置文件
- 将hibernate.cfg.xml放入src中
<?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>
<!-- 第一部分 数据库配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">******</property>
<!-- 第二部分 hibernate可选配置 -->
<!-- 是否显示sql语句 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 是否自动提交事务 -->
<property name="hibernate.connection.autocommit">true</property>
<!--当SessionFactory创建时是否根据映射文件自动验证表结构或自动创建、自动更新数据库表结构-->
<property name="hbm2ddl.auto">update</property>
<!-- 第三部分 配置JavaBean与表的映射文件 -->
<mapping resource="com/zyh/entity/UserInfo.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
2.4实体类的创建
package com.zyh.entity;
public class UserInfo {
private Integer id;
private String username;
private String password;
private String realName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
}
2.5配置映射文件
<?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 package="com.zyh.entity">
<!-- package="com.zyh.entity"实体类所在的包 -->
<class name="UserInfo" table="user_info">
<!--
name="UserInfo" 实体类名
table="user_info" 数据库表名
-->
<id name="id" column="id">
<!--
主键,如果属性:name="id"与表字段:column="id"
class="native":主键生成策略————自动增长
-->
<generator class="native"></generator>
</id>
<!-- 用户字段 -->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="realName" column="real_name"></property>
</class>
</hibernate-mapping>
2.6测试类
package com.zyh.test;
import com.zyh.entity.UserInfo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test1 {
public static void main(String[] args) {
UserInfo user = new UserInfo();
user.setUsername("jhpp");
user.setPassword("jhpp");
user.setRealName("金花婆婆");
//1.获取核心 配置文件对象,默认是加载src的hibernate.cfg.xm文件
Configuration configuration = new Configuration().configure();
//2.创建会话工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.创建会话
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//保存
session.save(user);
//提交事务
transaction.commit();
//4.关闭会话
session.close();
//5.关闭工厂,释放资源
sessionFactory.close();
}
}