Hibernate
Posted xuweiweiwoaini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate相关的知识,希望对你有一定的参考价值。
1 Hibernate简介
1.1 ORM框架
- 对象关系映射(Object Relation Mapping)。
- 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
- Object:对象,Java对象,此处特指JavaBean。
- Relation:关系,二维表,数据库中的表。
- Mapping:映射。
1.2 什么是Hibernate
- Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。
- 它将POJO和数据库表建立映射关系,是一个全自动的ORM框架。
- POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通的JavaBean。
- Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用面向对象编程思维来操纵数据库。
- Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servet/JSP的web应用中使用。
1.3 总结Hibernate
- Hibernate是一个数据持久层的ORM框架,它的主要功能就是将对象映射到表中,操作API,只需要将一个对象存储到数据库,不需要写SQL。
- Hibernate提供了对关系型数据库增删改查操作。
1.4 主流的ORM框架
- JPA:Java Persistence API,JPA通过JDK5.0注解或XML描述对象--关系表的映射关系(只有接口规范)。
- Hibernate:最流行的ORM框架,通过对象--关系映射配置,可以完全脱离底层SQL。
- Mybatis:本来是Apache的一个开源项目iBatis,支持普通的SQL查询,存储过程和高级映射的优秀持久层框架。
- Apache DBUtils。
- Spring JDBC Template。
1.5 Hibernate的优点
- Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性的代码。
- Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度上简化了DAO层编码工作。
- Hibernate使用Java的反射机制。
- Hibernate的性能非常好,因为它是一个轻量级的框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。
2 Hibernate的简单使用
2.1 Hibernate的使用步骤
- ①在项目中加入hibernate的maven坐标:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.4.Final</version> </dependency>
- ②创建数据库和数据库表。
- ③编写核心配置文件hibernate.cfg.xml,这个文件有连接数据库的配置。
- ④编写映射文件*.hbm.xml,声明对象如何关联数据库表字段。
- ⑤调用Hibernate的API。
2.2 创建数据库表
- sql:
CREATE DATABASE hibernate; USE hibernate; CREATE TABLE USER ( id INT PRIMARY KEY auto_increment, username VARCHAR ( 50 ), `password` VARCHAR ( 50 ) );
2.3 导入数据库的驱动
- mysql的驱动的maven坐标:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
2.4 编写JavaBean
- User.java
package com.sunxiaping.hibernateDemo.domain; public class User { private Integer id; private String username; private String password; 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; } }
2.5 编写映射文件
- User.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> <class name="com.sunxiaping.hibernateDemo.domain.User" table="user" schema="hibernate"> <id name="id"> <column name="id" /> <!-- 使用本地生成策略 --> <generator class="native"/> </id> <property name="username"> <column name="username"/> </property> <property name="password"> <column name="password"/> </property> </class> </hibernate-mapping>
2.6 编写核心配置文件
- hibernate.cfg.xml
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--配置数据库连接参数--> <property name="connection.url"> <![CDATA[ jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf-8&useSSL=false ]]> </property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!--是否显示SQL--> <property name="show_sql">true</property> <!--是否格式化SQL--> <property name="format_sql">true</property> <!--是否自动提交事务--> <property name="connection.autocommit">true</property> <!--配置JavaBean和表的映射关系--> <mapping resource="com/sunxiaping/hibernateDemo/domain/User.hbm.xml"/> </session-factory> </hibernate-configuration>
2.7 测试
- 测试
package com.sunxiaping.hibernateDemo; import com.sunxiaping.hibernateDemo.domain.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; public class HibernateTest { @Test public void test() { //加载hibernate.cfg.xml文件 Configuration configuration = new Configuration().configure(); //创建会话创建工厂 SessionFactory sessionFactory = configuration.buildSessionFactory(); //创建会话 Session session = sessionFactory.openSession(); //开启事务 Transaction transaction = session.beginTransaction(); User user = new User(); user.setUsername("张三"); user.setPassword("123456"); session.save(user); //提交事务 transaction.commit(); //关闭会话 session.close(); //关闭会话工厂 sessionFactory.close(); } }
3 API详解
以上是关于Hibernate的主要内容,如果未能解决你的问题,请参考以下文章
使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)
Hibernate CriteriaQuery where - ManyToOne 字段
Hibernate + MySQL:如何为数据库和表设置编码 utf-8
hibernate在使用getCurrentSession时提示no session found for current thread