一 SessionFactory的封装
1 SessionFactory应用场景
2 代码
package com.cakin.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
//在使用hibernate开发项目时,请一定保证只有一个SessionFactory
//一个数据库对应一个SessionFactory
final public class MySessionFactory {
private static SessionFactory sessionFactory=null;
private MySessionFactory(){
}
static{
sessionFactory=new Configuration().configure().buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
二 测试代码优化
1 代码和数据库对照图
2 代码
package com.cakin.view;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.cakin.domain.Employee;
import com.cakin.util.MySessionFactory;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//查询【load】->hql语法(hibernate query language)
delEmp();
}
private static void delEmp() {
//删除
Session session=MySessionFactory.getSessionFactory().openSession();
Transaction transaction=session.beginTransaction();
//先获取该雇员
Employee employee =(Employee)session.load(Employee.class, 1);//select语句
session.delete(employee);
transaction.commit();
session.close();
}
private static void updateEmp() {
//修改用户
//获取一个会话
Session session=MySessionFactory.getSessionFactory().openSession();
Transaction transaction=session.beginTransaction();
//修改用户
//1、获取要修改的用户
//load是通过主键属性,获取对象实例<-------->表的记录对应
Employee employee =(Employee)session.load(Employee.class, 1);//select语句
//2、修改
employee.setName("xiaoming");//update
employee.setEmail("abc@22.com");
transaction.commit();
session.close();
}
private static void addEmployee() {
//我们使用对hibernate完成crud操作,只里只见对象,不见表
// 现在我们不用service,直接测试
//1、创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化
Configuration configuration = new Configuration().configure();
//2、创建SessionFactory,这是一个会话工厂,是一个重量级的对象
SessionFactory sessionFactory=configuration.buildSessionFactory();
//3、创建Session,向当于jdbc的Connection
Session session = sessionFactory.openSession();
//4、要求程序员在进行增删改的时候使用事务提交,否则不生效
Transaction transaction=session.beginTransaction();
//添加一个雇员
Employee employee = new Employee();
employee.setName("cakin");
employee.setEmail("cakin@qq.com");
employee.setHiredate(new Date());
//保存
session.save(employee); //inert into ...[被hibernate封装]
transaction.commit();
session.close();
}
}
三 domain类增加序列化
package com.cakin.domain;
/*
* 建议我们的domain对象的名称就是对应表的首字母大写
* domain、javabean、pojo【plain old/ordinary java object 简单的java对象】
* 该pojo按照规范应该序列化,目的是可以唯一的标识该对象,同时可以在网络和文件传输
*/
public class Employee implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String email;
private java.util.Date hiredate;
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
}