一、hibernate框架介绍如下
1.框架=模板
2.Hibernate是对象模型与关系数据库模型之间的桥梁
3.hibernate持久化概念
什么是ORM
ORM是对象关系映射,是一种数据持久化操作(增删改查),
它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过javabean对象去操作数据库中数据.
4.hiberante概念
hibernate就是采用orm对象关系映射技术的持久化开发框架.
5.hibernate优缺点及使用场合
1.优点
hibernate很强大,减少了传统jdbc链接数据库的代码,提供了持久化代码的开发速度,降低了维护成本.
hibernate支持很多面向对象的特性.如组合,继承,多态等.使得开发人员必须在面向业务领域的对象模型和面向数据库的关系数据库模型之间来回切换,方便开发人员进行面向对象的设计和开发.
可移植性好.系统不会绑定在某个特定的关系型数据上,对于系统更换数据库,通常只需要修改hibernate配置文件即可正常运行
hibernate框架是开源免费的,可以在需要时研究源代码,改写源代码,进行功能定制,具有可扩展性.
2.缺点
不适合以数据为中心大量使用存储过程的应用.
大规模的批量插入,修改和删除不适用于hibernate
3.适用场合
hibernate适用于大中型项目
hibernate不适用于小型项目,
hibernate不适合用于关系模型设计不合理,不规范的系统
6.hibernate框架搭建步骤:
1.下载需要的jar包
(1)slf4j-log4j12-1.5.8.jar
hibernate日志记录文件,在控制台打印系统内部完成操作的一些结果,比如hiberante给你拼装的sql,和hibernate启动信息
(2)antlr-2.7.6.jar
语法分析器
(3)commons-collections-3.1.jar
各种集合类和集合工具类的封装
(4) commons-dbcp.jar
(5)commons-dbcp-1.2.1.jar
(6) commons-lang-1.0.1.jar
(7)commons-logging-1.0.4.jar
(8)commons-pool-1.2.jar
数据池
(9)dom4j-1.6.1.jar
XML的读写
(10)hibernate3.jar
hiberante核心文件封装了hibernate使用的接口和类
(11)javassist-3.9.0.GA.jar
分析,编辑和创建java字节码的类库
(12)jta.jar
java事务API
(13)log4j-1.2.8.jar
日志操作
(14)slf4j-api-1.5.8.jar
2.将上述jar文件和oracle的jar文件加载到web项目中
3.在src下创建hibernate主配置文件hiberante.cfg.xml
该配置文件主要用于配置数据库链接和hibernate运行时所需要的各种特性.
该文件要在web项目的src根目录下创建
步骤:
选中src
new
xml(Basic Template)
输入名字:hibernate.cfg.xml
选择 create xml file from a DTD file
选择Select XML Catalog entry
在XML Catalog列表框中找到 "-//Hibernate/Hibernate Configuration DTD 3.0 // EN"
常用参数说明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<!-- session会话工厂配置数据源 -->
<session-factory>
<!-- 1.链接数据库的driver -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 2.链接数据库的url -->
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<!-- 3.链接数据库的用户名 -->
<property name="connection.username">scott</property>
<!-- 4.链接数据库的密码 -->
<property name="connection.password">tiger</property>
<!-- 5.配置数据库的方言 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 6.配置是否在控制台显示hibernate封装的sql -->
<property name="show_sql">true</property>
<!-- 7.sql语句格式化 -->
<property name="format_sql">true</property>
</session-factory>
</hibernate-configuration>
二、使用hibernate实现全套正删改查
2.1 创建项目Hibernate_Part1并在项目的WebRoot下的WEB-INF下的lib文件下加入如下jar文件:
slf4j-log4j12-1.5.8.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
commons-dbcp.jar
commons-dbcp-1.2.1.jar
commons-lang-1.0.1.jar
commons-logging-1.0.4.jar
commons-pool-1.2.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta.jar
log4j-1.2.8.jar
slf4j-api-1.5.8.jar
hibernate框架所需要的jar
2.2 在项目的src下创建hibernate.cfg.xml主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<!-- oracle驱动 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 连接 数据库url-->
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<!-- 连接数据库用户名 -->
<property name="connection.username">scott</property>
<!-- 连接数据库密码 -->
<property name="connection.password">tiger</property>
<!-- 数据库 方言-->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- sql语句格式化 -->
<property name="format_sql">true</property> <!--注册映射文件 -->
<mapping resource="com/entity/Dept.hbm.xml"/>
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml
2.3 在src下的com.entity包下创建Dept.java文件
package com.entity; public class Dept{ private Integer deptno;
private String deptname;
private String loc; public Dept() {
} public Dept(Integer deptno, String deptname, String loc) {
this.deptno = deptno;
this.deptname = deptname;
this.loc = loc;
} public Integer getDeptno() {
return deptno;
} public void setDeptno(Integer deptno) {
this.deptno = deptno;
} public String getDeptname() {
return deptname;
} public void setDeptname(String deptname) {
this.deptname = deptname;
} public String getLoc() {
return loc;
} public void setLoc(String loc) {
this.loc = loc;
} @Override
public String toString() {
return "Dept [deptname=" + deptname + ", deptno=" + deptno + ", loc=" + loc
+ "]";
} }
Dept.java
2.4 在src下的com.entity包下创建Dept.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.entity.Dept" table="DEPT">
<id name="deptno" type="java.lang.Integer" column="DEPTNO">
<generator class="assigned"/>
</id>
<property name="deptname" type="java.lang.String" column="DNAME"/>
<property name="loc" type="java.lang.String" column="LOC"/>
</class>
</hibernate-mapping>
Dept.hbm.xml
2.5 在src下的com.dao包下创建DeptDao.java文件
package com.dao;
import java.io.Serializable; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; import com.entity.Dept; public class DeptDao implements Serializable{
/**
*
*/
private static final long serialVersionUID = 7318695909579058942L; /**
* 1.get方法查询当查不到返回null
* 关闭session能读取到
* @param id
*/
public static void getDept(Integer id){
//1.读取配置文件
Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); //2.创建Session工厂
SessionFactory sessionFactory=configuration.buildSessionFactory(); //3.打开Session
Session session=sessionFactory.openSession(); //4.开启事务(查询不需要)
Transaction tx=session.beginTransaction(); //5.执行操作
Dept dept=(Dept) session.get(Dept.class, id);
if(dept!=null){
System.out.println("查到了");
System.out.println(dept); }else{
System.out.println("没查到");
} //6.提交事务(查询不需要)
tx.commit(); //7.关闭session
session.close(); } /**
* 2.load方法查询当查不到报出异常
* 关闭session读取不到,报出异常
* @param id
*/
public static void loadDept(Integer id){
//1.读取配置文件
Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); //2.创建Session工厂
SessionFactory sessionFactory=configuration.buildSessionFactory(); //3.打开Session
Session session=sessionFactory.openSession(); //4.开启事务(查询不需要)
Transaction tx=session.beginTransaction(); //5.执行操作
Dept dept=(Dept) session.load(Dept.class, id); //6.提交事务(查询不需要)
tx.commit(); System.out.println(dept); //7.关闭session
session.close(); } /**
* 添加
* @param dept
*/
public static void saveDept(Dept dept){
//1.读取配置文件
Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); //2.创建Session工厂
SessionFactory sessionFactory=configuration.buildSessionFactory(); //3.打开Session
Session session=sessionFactory.openSession(); //4.开启事务
Transaction tx=session.beginTransaction(); //5.执行操作
session.save(dept); //6.提交事务
tx.commit(); System.out.println("插入成功"); //7.关闭session
session.close();
} /**
* 修改1
* 先查询单条再次修改
* @param dept
*/
public static void updateDept(Integer id){
//1.读取配置文件
Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); //2.创建Session工厂
SessionFactory sessionFactory=configuration.buildSessionFactory(); //3.打开Session
Session session=sessionFactory.openSession(); //4.开启事务
Transaction tx=session.beginTransaction(); //5.执行操作
//查询
Dept dept=(Dept) session.get(Dept.class, id); //修改
dept.setDeptname("不知道");
//6.提交事务
tx.commit(); System.out.println("修改成功"); //7.关闭session
session.close();
} /**
* 删除对象
* 先查询单条再删除
* @param dept
*/
public static void deleteDept(Integer id){
//1.读取配置文件
Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); //2.创建Session工厂
SessionFactory sessionFactory=configuration.buildSessionFactory(); //3.打开Session
Session session=sessionFactory.openSession(); //4.开启事务
Transaction tx=session.beginTransaction(); //5.执行操作
//查询
Dept dept=(Dept) session.get(Dept.class, id); //删除对象
session.delete(dept); //6.提交事务
tx.commit(); System.out.println("删除成功"); //7.关闭session
session.close();
} public static void main(String[] args) {
// getDept(10);
// loadDept(10);
// Dept dept=new Dept(1, "TB07", "青鸟学社");
// saveDept(dept);
// updateDept(1);
// getDept(1);
deleteDept(1);
getDept(1);
} }
DeptDao.java
2.6 运行结果自己试试看就知道了
三、使用hibernate的工具类实现全套正删改查
2.1 创建项目Hibernate_Part1并在项目的WebRoot下的WEB-INF下的lib文件下加入如下jar文件:
2.2 在项目的src下创建hibernate.cfg.xml主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="connection.username">holly</property>
<property name="connection.password">sys</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property> <mapping resource="com/entity/Teacher.hbm.xml"/>
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml
2.3 在src下的com.entity包下创建Teacher.java文件
package com.entity; public class Teacher {
private int id;
private String name; public Teacher() {
} public Teacher( String name) {
this.name = name;
}
public Teacher(int id, String name) {
this.id = id;
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
} }
Teacher.java
2.4 在src下的com.entity包下创建Teacher.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.entity.Teacher" table="TEACHER">
<id name="id" type="java.lang.Integer" column="ID">
<generator class="sequence">
<param name="sequence">seq_teacher</param>
</generator>
</id> <property name="name" type="java.lang.String" column="NAME"/>
</class>
</hibernate-mapping>
Teacher.hbm.xml
2.5 在src下的com.util包下创建HibernateUtil.java文件
package com.util; import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static ThreadLocal<Session> thread=new ThreadLocal<Session>();
private static Configuration config=null;
private static SessionFactory factory=null; static{
try {
config=new Configuration().configure("/hibernate.cfg.xml");
factory=config.buildSessionFactory();
} catch (HibernateException e) {
System.out.println("读取配置文件失败");
e.printStackTrace();
}
} public static Session getSession(){
Session session=thread.get();
if(session==null){
session=factory.openSession();
thread.set(session);
}
return session; } public static void closeSession(){
Session session=thread.get();
thread.set(null);
session.close();
}
}
HibernateUtil.java
2.6 在src下的com.dao包下创建TeacherDao.java文件
package com.dao; import org.hibernate.Session;
import org.hibernate.Transaction; import com.entity.Teacher;
import com.util.HibernateUtil; public class TeacherDao {
public static void main(String[] args) {
Teacher teacher=new Teacher(2,"死猪投资2");
//insertTeacher(teacher);
updateTeacher(teacher);
getTeacher(2); } private static void updateTeacher(Teacher teacher) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
session.merge(teacher);
tx.commit();
System.out.println("修改成功");
HibernateUtil.closeSession(); } private static void getTeacher(int id) {
Session session=HibernateUtil.getSession();
Teacher teacher=(Teacher) session.get(Teacher.class, id);
System.out.println(teacher);
HibernateUtil.closeSession();
} private static void insertTeacher(Teacher teacher) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
session.save(teacher);
tx.commit();
System.out.println("保存成功");
HibernateUtil.closeSession();
} }
TeacherDao.java
2.7 运行结果自己试试看就知道了