在JavaProject中 , 初次写了三个方法 增删改查 完成对数据库的操作.
第一个方法, 增加的方法,
public void addTest() {
SessionFactory sf = null;
Session session = null;
Transaction tx = null;
try {
Configuration cf = new Configuration().configure();
sf = cf.buildSessionFactory();
session = sf.openSession();
tx = session.beginTransaction();
Person person = new Person();
person.setUserName("joyhouse");
person.setPassword("pig");
session.save(person);
tx.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
其中 session = sf.openSession();
tx = session.beginTransaction();
Person person = new Person();
person.setUserName("joyhouse");
person.setPassword("pig");
session.save(person);
tx.commit();
比较关键 , save() 是session 类中已经写好的, 直接将需要插入的数据,封装成对象,放进去, save() 一下就Ok了, 再带一个 tx.commit() .
删除方法:
public void testDelete(){
Session session = sf.openSession();
Transaction tx = null ;
try {
tx = session.beginTransaction();
Person person = this.get(2);
session.delete(person);
tx.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(tx != null){
tx.rollback();
}
e.printStackTrace();
}finally{
session.close();
}
}
删除方法 首先利用传入的条件, 一个主键ID 调用方法中 已经带有的get() , 查询出来相应的对象 ,之后利用delete() 方法 将这个对象 person对象删除.
更新方法:
public void testUpdate(){
Session session = sf.openSession();
Transaction tx = null ;
try {
tx = session.beginTransaction();
Person person = this.get(1);
person.setUserName("new zero");
session.update(person);
tx.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(tx != null){
tx.rollback();
}
e.printStackTrace();
}finally{
session.close();
}
}
更新方法和上面的雷同, 也是先根据ID 将数据对象 取出来, person.setUserName("new zero"); 将需要修改的数据 person.setUserName("new zero"); 这样处理, 之后 session.update(person) OK了.
查询方法:
public Person get(Integer id){
Session session = sf.openSession();
Person person = (Person)session.get(Person.class, id);
session.close();
return person;
}
public void testLoad(){
Person person = this.get(2);
System.out.println(person.getUserName()+" , "+ person.getPassword());
}
这个代码量很少 一看Ok , 但是四个方法中 唯一有点区别的机试查询方法是不需要使用Transaction 类, 它是不需要事务的 .