把对象持久化: 把对象的信息保存到数据库或者是文件.
总结: hibernate 是对jdbc进行轻量级封装的 orm 框架,充当项目的持久层.
快如入门案例:
hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中)
struts是web框架,所以用在 web项目
我们使用手动配置hibernate方式开发一个hibernate 项目,完成crud操作 。
开发流程
我们使用第二种开发项目
create table employee(
id number primary key,
name varchar2(64) not null,
email varchar2(64) not null,
hiredate date not null)
package com.domain;
import java.util.Date;
public class Employee {
//成员变量的名字最好与数据库中表的字段相同
private int id;
private String name;
private String email;
private java.util.Date hiredata;
private double salary;
private String pwd;
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
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 getHiredata() {
return hiredata;
}
public void setHiredata(java.util.Date hiredata) {
this.hiredata = hiredata;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
对象关系映射文件: 作用是用于指定 domain对象和表的映射关系. ,该文件的取名有规范:
domain对象.hbm.xml,一般我们放在 和domain对象同一个文件夹下(包下)
我们的Employee.hbml.xml配置文件 :
emp_seq
该文件用于配置 连接的数据库的类型,driver,,用户名,密码 ,url ....同时管理 对象关系映射文件 ,该文件的名称,我们一般不修改.
hibernate.cfg.xml配置文件
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/user
root
admin
org.hibernate.dialect.MySQLDialect
true
package com.test;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.*;
import com.domain.Employee;
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建Configuration,读取配置文件
Configuration cf=new Configuration().configure("hibernate.cfg.xml");
//2.创建SessionFactory,会话工厂
SessionFactory sf=cf.buildSessionFactory();
//创建会话session(与数据库交互)
Session session=sf.openSession();
//要求用事物提交
Transaction transaction =session.beginTransaction();
/*Employee emp=new Employee();
emp.setId(2);
emp.setName("樊梦真");
emp.setEmail("[email protected]");
emp.setHiredata(new Date());
session.save(emp);*/
String hql="from Employee";
Query query=session.createQuery(hql);
List list=query.list();
for(int i=0;i
先前定义映射关系的Employee.hbm.xml文件还是保留。但是配置数据源的文件可以在applicationContext中接管。下面是spring中的applicationContext的配置文件
com/domain/Employee.hbm.xml
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.cache.use_second_level_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.generate_statistics=true
可以看到在配置文件中配置了会化工厂sessionFactory接管。所以在具体的使用时,就不用再去创建Configuiration去读取,也无需再声明新的sessionFactory。
package com.test;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.domain.Employee;
public class TestHibernate {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
SessionFactory sf=(SessionFactory) ac.getBean("sessionFactory");
Session s=sf.openSession();
Transaction transaction =s.beginTransaction();
String hql="from Employee";
Query query=s.createQuery(hql);
List list=query.list();
for(int i=0;i
补充:在使用hbm查询时的用法(SSH)
public Employee chechEmployee(Employee emp) {
// TODO Auto-generated method stub
String hql="FROM Employee WHERE id=? AND pwd=?";
Session s=sessionFactory.openSession();
Transaction transaction =s.beginTransaction();
ListempList = s.createQuery(hql).setString(0, emp.getId()+"").setString(1, emp.getPwd()).list();
transaction.commit();
s.close();
if(empList.size()==1) {
return empList.get(0);
}else {
return null;
}
}