一、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"
常用参数说明
1 2 34 5 6 7 21oracle.jdbc.driver.OracleDriver 8 9jdbc:oracle:thin:@127.0.0.1:1521:orcl 10 11scott 12 13tiger 14 15org.hibernate.dialect.Oracle10gDialect 16 17true 18 19true 20
二、使用hibernate实现全套正删改查
2.1 创建项目Hibernate_Part1并在项目的WebRoot下的WEB-INF下的lib文件下加入如下jar文件:
1 slf4j-log4j12-1.5.8.jar 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.jar10 hibernate3.jar11 javassist-3.9.0.GA.jar12 jta.jar13 log4j-1.2.8.jar14 slf4j-api-1.5.8.jar
2.2 在项目的src下创建hibernate.cfg.xml主配置文件
1 2 34 5 6 23oracle.jdbc.driver.OracleDriver 7 8jdbc:oracle:thin:@127.0.0.1:1521:orcl 9 10scott 11 12tiger 13 14org.hibernate.dialect.Oracle10gDialect 15 16true 17 18true 19 20 2122
2.3 在src下的com.entity包下创建Dept.java文件
1 package com.entity; 2 3 4 public class Dept{ 5 6 private Integer deptno; 7 private String deptname; 8 private String loc; 9 10 public Dept() {11 }12 13 public Dept(Integer deptno, String deptname, String loc) {14 this.deptno = deptno;15 this.deptname = deptname;16 this.loc = loc;17 }18 19 public Integer getDeptno() {20 return deptno;21 }22 23 public void setDeptno(Integer deptno) {24 this.deptno = deptno;25 }26 27 public String getDeptname() {28 return deptname;29 }30 31 public void setDeptname(String deptname) {32 this.deptname = deptname;33 }34 35 public String getLoc() {36 return loc;37 }38 39 public void setLoc(String loc) {40 this.loc = loc;41 }42 43 @Override44 public String toString() {45 return "Dept [deptname=" + deptname + ", deptno=" + deptno + ", loc=" + loc46 + "]";47 }48 49 50 }
2.4 在src下的com.entity包下创建Dept.hbm.xml文件
1 2 34 5 116 87 9 10
2.5 在src下的com.dao包下创建DeptDao.java文件
1 package com.dao; 2 import java.io.Serializable; 3 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.Transaction; 7 import org.hibernate.cfg.Configuration; 8 9 import com.entity.Dept; 10 11 public class DeptDao implements Serializable{ 12 /** 13 * 14 */ 15 private static final long serialVersionUID = 7318695909579058942L; 16 17 18 /** 19 * 1.get方法查询当查不到返回null 20 * 关闭session能读取到 21 * @param id 22 */ 23 public static void getDept(Integer id){ 24 //1.读取配置文件 25 Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); 26 27 //2.创建Session工厂 28 SessionFactory sessionFactory=configuration.buildSessionFactory(); 29 30 //3.打开Session 31 Session session=sessionFactory.openSession(); 32 33 //4.开启事务(查询不需要) 34 Transaction tx=session.beginTransaction(); 35 36 //5.执行操作 37 Dept dept=(Dept) session.get(Dept.class, id); 38 if(dept!=null){ 39 System.out.println("查到了"); 40 System.out.println(dept); 41 42 }else{ 43 System.out.println("没查到"); 44 } 45 46 //6.提交事务(查询不需要) 47 tx.commit(); 48 49 50 //7.关闭session 51 session.close(); 52 53 54 55 56 } 57 58 /** 59 * 2.load方法查询当查不到报出异常 60 * 关闭session读取不到,报出异常 61 * @param id 62 */ 63 public static void loadDept(Integer id){ 64 //1.读取配置文件 65 Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); 66 67 //2.创建Session工厂 68 SessionFactory sessionFactory=configuration.buildSessionFactory(); 69 70 //3.打开Session 71 Session session=sessionFactory.openSession(); 72 73 //4.开启事务(查询不需要) 74 Transaction tx=session.beginTransaction(); 75 76 //5.执行操作 77 Dept dept=(Dept) session.load(Dept.class, id); 78 79 //6.提交事务(查询不需要) 80 tx.commit(); 81 82 System.out.println(dept); 83 84 //7.关闭session 85 session.close(); 86 87 } 88 89 /** 90 * 添加 91 * @param dept 92 */ 93 public static void saveDept(Dept dept){ 94 //1.读取配置文件 95 Configuration configuration=new Configuration().configure("/hibernate.cfg.xml"); 96 97 //2.创建Session工厂 98 SessionFactory sessionFactory=configuration.buildSessionFactory(); 99 100 //3.打开Session101 Session session=sessionFactory.openSession();102 103 //4.开启事务104 Transaction tx=session.beginTransaction();105 106 //5.执行操作107 session.save(dept);108 109 110 //6.提交事务111 tx.commit();112 113 System.out.println("插入成功");114 115 //7.关闭session116 session.close();117 }118 119 /**120 * 修改1121 * 先查询单条再次修改122 * @param dept123 */124 public static void updateDept(Integer id){125 //1.读取配置文件126 Configuration configuration=new Configuration().configure("/hibernate.cfg.xml");127 128 //2.创建Session工厂129 SessionFactory sessionFactory=configuration.buildSessionFactory();130 131 //3.打开Session132 Session session=sessionFactory.openSession();133 134 //4.开启事务135 Transaction tx=session.beginTransaction();136 137 //5.执行操作138 //查询139 Dept dept=(Dept) session.get(Dept.class, id);140 141 //修改142 dept.setDeptname("不知道");143 //6.提交事务144 tx.commit();145 146 System.out.println("修改成功");147 148 //7.关闭session149 session.close();150 }151 152 153 /**154 * 删除对象155 * 先查询单条再删除156 * @param dept157 */158 public static void deleteDept(Integer id){159 //1.读取配置文件160 Configuration configuration=new Configuration().configure("/hibernate.cfg.xml");161 162 //2.创建Session工厂163 SessionFactory sessionFactory=configuration.buildSessionFactory();164 165 //3.打开Session166 Session session=sessionFactory.openSession();167 168 //4.开启事务169 Transaction tx=session.beginTransaction();170 171 //5.执行操作172 //查询173 Dept dept=(Dept) session.get(Dept.class, id);174 175 //删除对象176 session.delete(dept);177 178 //6.提交事务179 tx.commit();180 181 System.out.println("删除成功");182 183 //7.关闭session184 session.close();185 }186 187 public static void main(String[] args) {188 // getDept(10);189 // loadDept(10);190 // Dept dept=new Dept(1, "TB07", "青鸟学社");191 // saveDept(dept);192 // updateDept(1);193 // getDept(1);194 deleteDept(1);195 getDept(1);196 }197 198 199 }
2.6 运行结果自己试试看就知道了
三、使用hibernate的工具类实现全套正删改查
2.1 创建项目Hibernate_Part1并在项目的WebRoot下的WEB-INF下的lib文件下加入如下jar文件:
hibernate框架所需要的jar
2.2 在项目的src下创建hibernate.cfg.xml主配置文件
1 2 34 5 15oracle.jdbc.driver.OracleDriver 6jdbc:oracle:thin:@127.0.0.1:1521:orcl 7holly 8sys 9org.hibernate.dialect.Oracle10gDialect 10true 11true 12 1314
2.3 在src下的com.entity包下创建Teacher.java文件
1 package com.entity; 2 3 public class Teacher { 4 private int id; 5 private String name; 6 7 public Teacher() { 8 } 9 10 public Teacher( String name) {11 this.name = name;12 }13 public Teacher(int id, String name) {14 this.id = id;15 this.name = name;16 }17 18 public int getId() {19 return id;20 }21 22 public void setId(int id) {23 this.id = id;24 }25 26 public String getName() {27 return name;28 }29 30 public void setName(String name) {31 this.name = name;32 }33 34 @Override35 public String toString() {36 return "Teacher [id=" + id + ", name=" + name + "]";37 }38 39 40 41 42 }
2.4 在src下的com.entity包下创建Teacher.hbm.xml文件
1 2 34 5 136 10 117 seq_teacher 8 912
2.5 在src下的com.util包下创建HibernateUtil.java文件
1 package com.util; 2 3 import org.hibernate.HibernateException; 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.cfg.Configuration; 7 8 public class HibernateUtil { 9 private static ThreadLocalthread=new ThreadLocal ();10 private static Configuration config=null;11 private static SessionFactory factory=null;12 13 static{14 try {15 config=new Configuration().configure("/hibernate.cfg.xml");16 factory=config.buildSessionFactory();17 } catch (HibernateException e) {18 System.out.println("读取配置文件失败");19 e.printStackTrace();20 }21 }22 23 public static Session getSession(){24 Session session=thread.get();25 if(session==null){26 session=factory.openSession();27 thread.set(session);28 }29 return session;30 31 }32 33 public static void closeSession(){34 Session session=thread.get();35 thread.set(null);36 session.close();37 }38 }
2.6 在src下的com.dao包下创建TeacherDao.java文件
1 package com.dao; 2 3 import org.hibernate.Session; 4 import org.hibernate.Transaction; 5 6 import com.entity.Teacher; 7 import com.util.HibernateUtil; 8 9 public class TeacherDao {10 public static void main(String[] args) {11 Teacher teacher=new Teacher(2,"死猪投资2");12 //insertTeacher(teacher);13 updateTeacher(teacher);14 getTeacher(2);15 16 }17 18 private static void updateTeacher(Teacher teacher) {19 Session session=HibernateUtil.getSession();20 Transaction tx=session.beginTransaction();21 session.merge(teacher);22 tx.commit();23 System.out.println("修改成功");24 HibernateUtil.closeSession();25 26 }27 28 private static void getTeacher(int id) {29 Session session=HibernateUtil.getSession();30 Teacher teacher=(Teacher) session.get(Teacher.class, id);31 System.out.println(teacher);32 HibernateUtil.closeSession();33 }34 35 private static void insertTeacher(Teacher teacher) {36 Session session=HibernateUtil.getSession();37 Transaction tx=session.beginTransaction();38 session.save(teacher);39 tx.commit();40 System.out.println("保存成功");41 HibernateUtil.closeSession();42 }43 44 45 46 }
2.7 运行结果自己试试看就知道了