使用Hibernate
一、hibernate是什么?
Hibernate 是对jdbc进行轻量级封装的orm框架,充当项目的持久层。
(把对象持久化:把对象的信息保存到数据库或者是文件;hibernate的基础是java的反射机制)
二、ORM
对象关系映射(Object Relation Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数
据从一种形式转换到另外一种形式。
三、Hibernate的好处?
①引入hibernate可以使工作人员角色细化,让程序员更关心业务流
程。让数据库人员关注数据库相关的各种操作。
②分层更清晰,耦合性更小。
③通用性强:可以更轻松的从一个数据库平台转移到别的平台。
④对象化:把关系数据库变成了Java的对象,更加方便操作。
⑤性能保证:hibernate可能按不同的数据库,处理不同的操作是用
最优化的SQL语句,不用我们去想,对于分等算法,在hibernate中会显
得更简单,可靠。
⑥增加了程序的鲁棒性!
四、hibernate基本原理。
五、快速入门(手动配置)
1.创建一个项目
2.画出一个简单项目框架示意图
3.引入hibernate开发包。
核心包:hibernate3.jar
依赖的包如下:
再引入数据库驱动包,如:sqljdbc.jar
4.建立数据库,domain对象,对象关系映射文件。
有3种开发方法:
1)由Domain object -> mapping->db。(官方推荐)
2)由DB开始,用工具生成mapping和Domain object。(使用较多**)
3)由映射文件开始。
建数据库表employee(字段:id,name,email,hiredate)
Employee.java
package com.itime.domain; import java.io.Serializable; public class Employee implements Serializable { 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; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public java.util.Date getHiredate() { return hiredate; } public void setHiredate(java.util.Date hiredate) { this.hiredate = hiredate; } private static final long serialVersionUID = 1L; private int id; private String name; private String email; private java.util.Date hiredate; }
Employee.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 package="com.itime.domain"> <!-- name : 表示类名 table 表示 该类和哪个表映射 --> <class name="Employee" table="employee"> <!-- id元素专门用于指定主键是如何生成,hibernate设计者认为,我们每一个表都应该有一个主键 --> <!-- name:表示类的哪个属性是主键 --> <id name="id" type="java.lang.Integer"> <!-- 指定主键生成策略 --> <generator class="identity"/> </id> <property name="name" type="java.lang.String"> <column name="name" not-null="true"/> </property> <property name="email" type="java.lang.String"> <column name="email" not-null="true"/> </property> <property name="hiredate" type="date"> <column name="hiredate" not-null="true"/> </property> </class> </hibernate-mapping>
5.手动配置hibernate.cfg.xml文件。该文件由于配置:连接数据库的类型,driver,用户名,密码,url......;同时管理对象关系映射文件,该文件的名称一般不修改。
hibernate.cfg.xml
<!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <!-- <property name="hibernate.hbm2ddl.auto">update</property>--> <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.username">sa</property> <property name="connection.password">123456</property> <property name="connection.url">jdbc:sqlserver://127.0.0.1:1433;databaseName=testDB</property> <property name="show_sql">true</property> <property <resource="com/itime/domain/Employee.hbm.xml" /> </session-factory> </hibernate-configuration>
6.测试文件TestMain.java(增、删、改、查load)
TestMain.java
package com.itime.view; import com.itime.utils.*; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.*; import com.itime.domain.Employee; public class TestMain { /** * @param args */ public static void main(String[] args) { //查询[load]->hql语句(hibernate query language) System.out.println("主函数"); addEmployee(); delEmp(); //updateEmp(); System.out.println("你好!"); } public static void delEmp() { //删除 //获取一个session Session session=MySessionFactory.getSessionFactory().openSession(); Transaction ts=session.beginTransaction(); //删除1.先获取该雇员,然后删除 Employee emp=(Employee) session.load(Employee.class, 4); session.delete(emp); ts.commit(); session.close(); } public static void updateEmp() { // TODO Auto-generated method stub //修改用户 //获取一个会话 Session session=MySessionFactory.getSessionFactory().openSession(); Transaction ts=session.beginTransaction(); //修改用户1. 获取要修改的用户,2.修改 //load是通过主键属性,获取该对象实例.<--->表的记录对应 Employee emp=(Employee) session.load(Employee.class, 3); emp.setName("杨23");//update... emp.setEmail("abc@sohu.com"); ts.commit(); session.close(); } public static void addEmployee() { //我们使用hibernate完成crud操作[这里我们只见对象,不见表] //现在我们不是用service ,直接测试. //1。创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化 Configuration configuration=new Configuration().configure(); //2.创建SessoinFactory[这是一个会话工厂,是一个重量级的对象] SessionFactory sessionFactory=configuration.buildSessionFactory(); //3.创建Sessoin 相当于jdbc Connection[ servelt HttpSession ,也不是 jsp session] Session session=sessionFactory.openSession(); //4.对hiberate而言,要求程序员,在进行 增加,删除,修改的时候使用事务提交, Transaction transaction = session.beginTransaction(); //添加一个雇员 Employee employee=new Employee(); employee.setName("likeqiang"); employee.setEmail("xz@sina.cn"); employee.setHiredate(new Date()); //insert ............. //保存 session.save(employee);//save employee就是持久化该对象 (把对象保存到了数据库中称为一条记录) //==>insert into ....[被hiberante封装] //提交 // transaction.commit(); transaction.commit(); session.close(); System.out.println("插入完毕!"); } } //MySessionFactory.java抽象的一个工具类,用工具可以自己生成,就不贴出