package com.yiyao.dao.impl;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.yiyao.HibernateSessionFactory;
import com.yiyao.dao.BaseDao;
public class BaseDaoImpl implements BaseDao{
/**
注意:1、 下面getObject时,用load是不行了,会出现错误session 已经close (session.load(clazz,id)),而是要用get.
2、应用HibernateSessionFactory.closeSession();来代替session.close();因为dao中的一个方法直接用session.close()后,
运行dao中的另一个方法时,会出现Not able to obtain connection或session is closed的错误.
*/
// 根据id返回某个持久化类
public Object getObject(Class clazz, Serializable id) {
//注意:下面用load是不行了,会出现错误session 已经close (session.load(clazz,id))
Session session = HibernateSessionFactory.currentSession();
Object obj = session.get(clazz,id);// get直接返回实体类,load返回是代理类
//注意:要用HibernateSessionFactory.closeSession()代替session.close(),不然会出现Not able to obtain connection或session is closed等错误.
HibernateSessionFactory.closeSession();
return obj;
}
//返回全部物品
public List getObjects(Class clazz) {
Session session = HibernateSessionFactory.currentSession();
Criteria criterial = session.createCriteria(clazz);
List list = criterial.list();
HibernateSessionFactory.closeSession();
return list;
}
//删除某个持久化类
public void removeObject(Class clazz, Serializable id) {
Session session = HibernateSessionFactory.currentSession();
Transaction tx = session.beginTransaction();
Object obj = session.load(clazz,id); //这里load和get都可以!
session.delete(obj);
tx.commit();
HibernateSessionFactory.closeSession();
System.out.println("删除成功!");
}
// 保存持久化类
public void savaObject(Object obj) {
Session session = HibernateSessionFactory.currentSession();
Transaction tx = session.beginTransaction();
session.save(obj);
tx.commit();
//注意要用HibernateSessionFactory.closeSession()代替session.close(),不然会出现Not able to obtain connection或session is closed等错误.
HibernateSessionFactory.closeSession();
}
}
下面是另一个具体的类, 上面的类相当于HiberanteDaoSupport类:
package com.yiyao.dao.impl;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import com.yiyao.HibernateSessionFactory;
import com.yiyao.dao.UserDao;
import com.yiyao.model.Userinfo;
public class UserDaoImpl extends BaseDaoImpl implements UserDao{
public void deleteUser(int id) {
this.removeObject(Userinfo.class,id);
}
public void deleteUser(Userinfo user) {
this.removeObject(Userinfo.class,user.getId());
}
public List getAllUsers() {
return getObjects(Userinfo.class);
}
public Userinfo getUser(int id) {
return (Userinfo)getObject(Userinfo.class,id);
}
public void saveUser(Userinfo user) {
savaObject(user);
}
//返回分页记录
public List getUsersList(int pageNo,int pageSize){
Session session = HibernateSessionFactory.currentSession();
Criteria criteria = session.createCriteria(Userinfo.class);
criteria.setMaxResults(pageSize);
//criteria.setFirstResult((pageNo-1)*pageSize+1);//它是从1开始的
criteria.setFirstResult((pageNo-1)*pageSize); //它是从0开始的,所以要减1
List list = criteria.list();
return list;
}
public static void main(String[] arg){
UserDaoImpl userDao = null;
userDao = new UserDaoImpl();
Userinfo user = userDao.getUser(3);
System.out.println(user.getUsername());
System.out.println(user.getUserpwd());
}
}