什么是Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,是一个关系数据库ORM框架。
Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 (来自百度百科)
什么是ORM
ORM是Object Relational Mapping的简写,是一种程序技术,它实现了对象模型和关系模型之间的转换。
从理论效果上来说,它其实创建了一个可在编程语言里使用的“虚拟对象数据库”。
主流的ORM框架
1.JPA(JAVA Persistence API):通过JDK 5.0注解或XML描述对象-关系表的映 射关系(只有接口规范)
2.Hibernate:流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL
3.MyBatis 本是apache的一个开源项目 iBatis,支持普通 SQL查询,存储过程和高级映射的优秀持久层框架
4.Apache DBUtils 、Spring JDBCTemplate
Hibernate优点
1.实现了对JDBC的封装,大大简化了持久层代码繁琐的重复性代码
2.简化了编码的工作
3.使用反射的机制
4.因为是一个轻量级的框架,性能非常好
初体验
准备工作
1.导包
2.编写JavaBean
3.配置*.hbn.xml
4.配置hibernate.cfg.xml
1.导包
核心包 必须包 驱动包
2.编写JavaBean
create database hibernate;
use hibernate;
create table t_user(
id int auto_increment primary key,
username varchar(20),
password varchar(20)
);
public class User {
private int uid;
private String username;
private String password;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
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;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
3.配置*.hbn.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="cn.robin.hibernate.demo01.User" table="tb_user">
<!--
要求实体类有唯一值
要求表中有一个属性有唯一值
-->
<id name="uid" column="uid">
<!--native表示主键自动增长-->
<generator class="native" />
</id>
<!--配置其他属性-->
<property name="username" column="username" />
<property name="password" column="password" />
</class>
</hibernate-mapping>
4.配置核心文件
<?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 元素用于配置Hibernate中的属性
键:值
-->
<!-- hibernate.connection.driver_class : 连接数据库的驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- hibernate.connection.url : 连接数据库的地址,路径 -->
<property name="hibernate.connection.url">jdbc:mysql///hibernate</property>
<!-- hibernate.connection.username : 连接数据库的用户名 -->
<property name="hibernate.connection.username">robin</property>
<!-- hibernate.connection.password : 连接数据库的密码 -->
<property name="hibernate.connection.password">robin</property>
<!--配置hibernate(可选)-->
<!--有SQL语句输出-->
<property name="hibernate.show_sql">true</property>
<!--对语句进行格式化-->
<property name="hibernate.format_sql">true</property>
<!--
hibernate创建表的配置
update:如果不存在表,则创建,如果存在,则更新
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--
配置数据库方言
MySql:limit
Oracle:rownum
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置本地线程绑定session-->
<property name="hibernate.current_session_context_class">thread</property>
<!--把映射文件加载到核心配置文件中-->
<mapping resource="cn/robin/hibernate/demo01/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
<!--
映射配置文件
1.映射配置文件的位置没有任何要求
2.映射配置文件标签中name属性都是实体类的名称 column是表中字段的名称
class中name属性的值是实体类的全路径
3.id和property标签中的column属性可以省略,默认是name属性的值
4.property标签中的type属性,用来设置字段的类型,自动对应类型
-->
<!--
核心配置文件
1.必须写在session-factory标签中
2.名称和位置是固定的
src hibernate.cfg.xml
-->
接下来就是测试了
public void demo() {
// 加载hibernate核心配置文件
Configuration configuration = new Configuration();
configuration.configure();
// 创建SessionFactory封装对象
// 这个关系中,可能会根据映射关系创建表
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 使用SessionFactory创建Session
// 类似Connection
Session session = sessionFactory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction();
// crud
User user = new User();
user.setUsername("robin");
user.setPassword("123");
// 调用session进行添加操作
session.save(user);
// 提交事务
transaction.commit();
// 关闭资源
session.close();
sessionFactory.close();
}
转载于:https://blog.51cto.com/11815805/2164196