坚持每天写博文,积累下开发中的点点滴滴
我先写一个公共类用于获得session
public class HibernateUtils {
//类加载的时候就会运行 属性和代码块
private static SessionFactory sessionFactory;
static{
try {
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.out.println("加载配置文件或者映射文件出现错误:"+e.getMessage());
}
}
public static Session getSession(){
if(sessionFactory != null){
return sessionFactory.openSession();
}
return null;
}
}
在这里我用了一个静态代码块来创建SessionFactory,为什么不在方法中进行实例化呢,因为我只需要一个SessionFactory对象,如果放在方法中每次使用都会创建出来一个。
- 增:
private void doSave(){
//实例化对象
User user = new User();
user.setUser_name("user_name");
user.setUser_passWord("user_passWord");
//实例化配置对象
Configuration concfg = new Configuration();
//解析配置文件
concfg.configure();//默认加载hibernate.cfg.xml
/**
* 此方法用于改变默认配置文件
*//*
concfg.configure("改变配置文件名称");*/
//获取sessionFactory对象 过时的方法buildSessionFactory()也可以用
//新的方法从bibernate4.1开始需要传进去一个参数
SessionFactory sessionFactory = concfg.buildSessionFactory();
//获取session对象 两个方法:getCurrentSession()和openSession() 测试都有open
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//保存
session.save(user);
//提交事务
transaction.commit();
//关闭资源
session.close();
sessionFactory.close();
}
增加的方法我并没有使用工具类
- 删:
public void delete(){
User user = new User();
user.setUser_id(3L);
Session session = HibernateUtils.getSession();
session.beginTransaction();
session.delete(user);//参数必须是一个有id值得domain对象
session.getTransaction().commit();
session.close();
}
删除时需要给定一个ID
- 改
public void update(){
User user = new User();
user.setUser_id(2L);//修改需要给定一个ID
user.setUser_name("updateName");
user.setUser_passWord("updatePassWord");
Session session = HibernateUtils.getSession();
//开启事务 获取事务并提交 关闭资源
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
session.close();
}
同样,修改时也需要给一个ID
- 查:
public void select(){
Session session = HibernateUtils.getSession();
User user = (User)session.get(User.class, 2L);
System.out.println(user);
session.close();
}
用session.get()方法需要传入一个domain.class和一个ID,返回一个Object类型
注意增删改必须有事务