0.Hibernate简介
Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装。
是基于JDBC技术基础上衍生而来,并在此基础上使得由原来直接操纵数据库变成直接操作映射数据表后生成的Java类,从而实现对象编程思维来操纵数据库。
ORM是Object Relational Mapping的简称,是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象持久化到关系数据库中。
hibernate是一个基于ORM的持久化框架。
从图可以知道hibernate的六大核心接口,两个主要配置文件,以及他们的直接关系。
1、Configuration接口 : 负责配置并启动hibernate
2、SessionFactory接口 : 负责初始化hibernate
3、Session接口 : 负责持久化对象的CRUD操作
4、Transaction接口 : 负责事务
5、Query接口和Criteria接口 : 负责执行各种数据库查询
Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃。
Hibernate工作原理:
1、解析hibernate.cfg.xml配置文件
通过Configuration config = new Configuration().configure();
读取并解析hiberante.cfg.xml配置文件
2、读取并解析映射信息
hibernate.cfg.xml中的<mapping resource="com/User.hbm.xml"/>映射文件
3、创建SessionFactory对象
SessionFactory sf = config.buildSessionFactory();
4、打开Session
Session session = sf.openSession();
5、创建并启动事务
Transaction tx = session.beginTransaction();
6、CRUD持久化操作
7、提交事务
tx.commit();
8、关闭session
9、关闭SessionFactory
1. Hibernate配置文件和映射文件
从官网上下载的lib文件下的jar包
配置文件与映射文件
2. POJO持久化对象
Student
package com.zhaoyuan.pojos;
public class Student {
private String id;
private String name;
private int score;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
User
package com.zhaoyuan.pojos;
import java.io.Serializable;
public class User implements Serializable{
private Integer id;
private String userName;
private String userPwd;
private Integer role;
public User() {
super();
}
public User(String userName, String userPwd, Integer role) {
super();
this.userName = userName;
this.userPwd = userPwd;
this.role = role;
}
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 getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public Integer getRole() {
return role;
}
public void setRole(Integer role) {
this.role = role;
}
}
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>
<session-factory>
<!-- 配置访问Oracle数据库参数信息 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/hbm
</property>
<property name="connection.username">root</property>
<property name="connection.password">mysql</property>
<!-- 在控制台显示SQL语句 -->
<property name="show_sql">true</property>
<!--根据需要自动生成、更新数据表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 注册所有ORM映射文件 -->
<mapping resource="com/zhaoyuan/pojos/Student.hbm.xml" />
<mapping resource="com/zhaoyuan/pojos/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zhaoyuan.pojos.Student" table="STUDENTS">
<!-- 主键 -->
<id name="id" column="ID">
<generator class="uuid.hex"/>
</id>
<!-- 姓名 -->
<property name="name" column="NAME" type="string" not-null="true"/>
<!-- 分数 -->
<property name="score" column="SCORE" type="java.lang.Integer" not-null="true"/>
</class>
</hibernate-mapping>
User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zhaoyuan.pojos.User" table="tbUsers">
<!-- 主键 -->
<id name="id" column="ID">
<!-- 自增 -->
<generator class="native" />
</id>
<!-- 用户名 -->
<property name="userName" column="USERNAME" type="string"
not-null="true" />
<!-- 密码 -->
<property name="userPwd" column="USERPWD" type="string"
not-null="true" />
<!-- 权限 -->
<property name="role" column="ROLE" type="java.lang.Integer" not-null="true" />
</class>
</hibernate-mapping>
3. Demo
StudentDemo
package com.zhaoyuan.demo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.internal.StandardSessionFactoryServiceInitiators;
import com.zhaoyuan.pojos.Student;
/**
* (创建)数据库插入一条数据
*/
public class StudentDemo {
public static void main(String[] args) {
//创建Student对象
Student stu = new Student();
stu.setName("李四");
stu.setScore(99);
//实例化configuration对象
Configuration configuration = new Configuration();
//加载hibernate.cfg.xml文件
configuration.configure("/hibernate.cfg.xml");
//创建SessionFactory
//Hibernate4.3创建SessionFactory的方式
StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();
standardServiceRegistryBuilder.applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration.buildSessionFactory(standardServiceRegistryBuilder.build());
//打开session
Session session = sessionFactory.openSession();
//开启事务
Transaction tratransaction = session.beginTransaction();
//持久化操作
session.save(stu);
//提交事务
tratransaction.commit();
//关闭session
session.close();
}
}
UserDemo
package com.zhaoyuan.demo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.zhaoyuan.pojos.User;
/**
* (创建)数据库插入一条数据
*/
public class UserDemo {
public static void main(String[] args) {
//创建user
User user = new User("张三","123",1);
// 实例化Configuration
Configuration configuration = new Configuration();
// 加载hibernate.cfg.xml文件
configuration.configure("/hibernate.cfg.xml");
// 创建SessionFactory
// Hibernate4.3创建SessionFactory的方式
StandardServiceRegistryBuilder standardServiceRegistryBuilder
= new StandardServiceRegistryBuilder();
standardServiceRegistryBuilder.applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
.buildSessionFactory(standardServiceRegistryBuilder.build());
// 打开Session
Session session = sessionFactory.openSession();
// 开始一个事务
Transaction trans = session.beginTransaction();
// 持久化操作
session.save(user);
// 提交事务
trans.commit();
// 关闭Session
session.close();
}
}
UserHQLDemo
package com.zhaoyuan.demo;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.zhaoyuan.pojos.User;
/**
* 使用Query进行HSQL查询
*
*/
public class UserHQLDemo {
public static void main(String[] args) {
// 实例化Configuration
Configuration configuration = new Configuration();
// 加载hibernate.cfg.xml文件
configuration.configure("/hibernate.cfg.xml");
// 创建SessionFactory
// Hibernate4.3创建SessionFactory的方式
StandardServiceRegistryBuilder standardServiceRegistryBuilder
= new StandardServiceRegistryBuilder();
standardServiceRegistryBuilder.applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
.buildSessionFactory(standardServiceRegistryBuilder.build());
// 打开Session
Session session = sessionFactory.openSession();
// 开始一个事务
Transaction trans = session.beginTransaction();
// 查询Customer表
Query query = session.createQuery("from User");
// 执行查询
List<User> list = query.list();
// 遍历输出
for (User u : list) {
System.out.println(u.getId()+ "\t" + u.getUserName() + "\t"
+ u.getUserPwd() + "\t" + u.getRole());
}
// 提交事务
trans.commit();
// 关闭Session
session.close();
}
}
StudentCriteriaDemo
package com.zhaoyuan.demo;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.zhaoyuan.pojos.Student;
/**
* 使用Criteria进行条件查询
*/
public class StudentCriteriaDemo {
public static void main(String[] args) {
//实例化configuration对象
Configuration configuration = new Configuration();
//加载hibernate.cfg.xml文件
configuration.configure("/hibernate.cfg.xml");
//创建SessionFactory
//Hibernate4.3创建SessionFactory的方式
StandardServiceRegistryBuilder standardServiceRegistryBuilder
= new StandardServiceRegistryBuilder();
standardServiceRegistryBuilder.applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
.buildSessionFactory(standardServiceRegistryBuilder.build());
//打开session
Session session = sessionFactory.openSession();
//开启事务
Transaction tratransaction = session.beginTransaction();
// 创建一个Criteria查询对象,查询Student类的所有对象
Criteria criteria = session.createCriteria(Student.class);
// 执行查询
List<Student> list = criteria.list();
// 遍历输出
for (Student stu : list) {
System.out.println(stu.getId() + "\t" + stu.getName() + "\t"+stu.getScore());
}
//提交事务
tratransaction.commit();
//关闭session
session.close();
}
}
/*
Hibernate: select this_.ID as ID1_0_0_, this_.NAME as NAME2_0_0_, this_.SCORE as SCORE3_0_0_ from STUDENTS this_
8a9296ec628516640162851668b00000 李四 99
*/