承蒙CSDN里各位大哥大姐的照顾和指导,小弟学习Hibernate有一段时间了,以前都是用Hibernate的自动生成工具,生成Hibernate的配置文件和映射文件,甚至实体类,但我觉得初学阶段不应该使用这种工具,再说初学的项目一般都比较简单,用手一个个敲出来问题不大我想,所以我想问一个问题,Hibernate里的HibernateSessionFactory和BaseHibernateDao怎么用手敲出来,HibernateSessionFactory是不是一定要自动生成,有没有可能用一个类代替这两个类的功能?就问这么多,嘻嘻!麻烦各位啦!在此贴出我以前写的BaseHibernateDao类(整个项目就用这个类,我没写HibernateSessionFactory):
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;public class BaseHibernateDao {
protected static Session session;
protected static Transaction tx;
protected static boolean isSuccessful; protected Session getSession() {
return session = new Configuration().configure().buildSessionFactory()
.openSession();
}
protected void setSession(Session session){
BaseHibernateDao.session=session;
}
protected void closeSession(Session session){
if(session!=null)
session.close();
session=null;
}
protected boolean add(Object obj){
try{
session=getSession();
tx=session.beginTransaction();
session.save(obj);
isSuccessful=true;
tx.commit();
}catch(RuntimeException e){
e.printStackTrace();
isSuccessful=false;
tx.rollback();
}finally{
closeSession(session);
}
return isSuccessful;
}
protected boolean delete(Object obj){
try{
session=getSession();
tx=session.beginTransaction();
session.delete(obj);
isSuccessful=true;
tx.commit();
}catch(RuntimeException e){
e.printStackTrace();
isSuccessful=false;
tx.rollback();
}finally{
closeSession(session);
}
return isSuccessful;
}
protected boolean update(Object obj){
try{
session=getSession();
tx=session.beginTransaction();
session.update(obj);
isSuccessful=true;
tx.commit();
}catch(RuntimeException e){
e.printStackTrace();
isSuccessful=false;
tx.rollback();
}finally{
closeSession(session);
}
return isSuccessful;
}
protected Object get(Class clz,Serializable sid){
Object obj=null;
try{
session=getSession();
obj=session.get(clz, sid);
}catch(RuntimeException e){
e.printStackTrace();
}finally{
closeSession(session);
}
return obj;
}
}我觉得这样写是由问题的,CSDN里一个大哥也跟我说过,但我不知道具体该怎么写。
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;public class BaseHibernateDao {
protected static Session session;
protected static Transaction tx;
protected static boolean isSuccessful; protected Session getSession() {
return session = new Configuration().configure().buildSessionFactory()
.openSession();
}
protected void setSession(Session session){
BaseHibernateDao.session=session;
}
protected void closeSession(Session session){
if(session!=null)
session.close();
session=null;
}
protected boolean add(Object obj){
try{
session=getSession();
tx=session.beginTransaction();
session.save(obj);
isSuccessful=true;
tx.commit();
}catch(RuntimeException e){
e.printStackTrace();
isSuccessful=false;
tx.rollback();
}finally{
closeSession(session);
}
return isSuccessful;
}
protected boolean delete(Object obj){
try{
session=getSession();
tx=session.beginTransaction();
session.delete(obj);
isSuccessful=true;
tx.commit();
}catch(RuntimeException e){
e.printStackTrace();
isSuccessful=false;
tx.rollback();
}finally{
closeSession(session);
}
return isSuccessful;
}
protected boolean update(Object obj){
try{
session=getSession();
tx=session.beginTransaction();
session.update(obj);
isSuccessful=true;
tx.commit();
}catch(RuntimeException e){
e.printStackTrace();
isSuccessful=false;
tx.rollback();
}finally{
closeSession(session);
}
return isSuccessful;
}
protected Object get(Class clz,Serializable sid){
Object obj=null;
try{
session=getSession();
obj=session.get(clz, sid);
}catch(RuntimeException e){
e.printStackTrace();
}finally{
closeSession(session);
}
return obj;
}
}我觉得这样写是由问题的,CSDN里一个大哥也跟我说过,但我不知道具体该怎么写。
package best.web.hibernate.dao;import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class HibernateDaoImpl extends HibernateDaoSupport implements
HibernateDao {
private static String FROM = "from ";
private static String ORDER= " order by "; public Collection find(String hql) {
return this.getHibernateTemplate().find(hql);
} public Collection find(String hql, Object[] parameter) {
return this.getHibernateTemplate().find(hql, parameter);
} public Collection getObjectAll(Class c) {
return this.getHibernateTemplate().find(new StringBuilder(FROM).append(c.getName()).toString());
}
public Collection getObjectAllOrderBy(Class c,String oderName){
return this.getHibernateTemplate().find(new StringBuilder(FROM).append(c.getName()).append(ORDER).append(oderName).toString());
} public Object getObjectById(Class c, Serializable id) {
return this.getHibernateTemplate().get(c, id);
} public void remove(Object obj) {
this.getHibernateTemplate().delete(obj);
} public void removeAll(Collection list) {
this.getHibernateTemplate().deleteAll(list);
} public void saveOrUpdate(Object obj) {
this.getHibernateTemplate().saveOrUpdate(obj);
} public void saveOrUpdateAll(Collection list) {
this.getHibernateTemplate().saveOrUpdateAll(list);
} public Collection findByNamedParam(String hql, String hName, Object[] parameter) {
return this.getHibernateTemplate().findByNamedParam(hql, hName, parameter);
} public void execute(final String hql, final Object[] parameter) {
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for(int i=0 ;i<parameter.length ;i++){
query.setParameter(i, parameter[i]);
}
return query.executeUpdate();
}});
} public List findCreateSql(final String sql,final Map parameter,final Map retClass) {
List list = getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
query.setProperties(parameter);
Iterator it = retClass.entrySet().iterator();
while(it.hasNext()){
String keyAs = (String) it.next();
query.addEntity(keyAs, (Class)retClass.get(keyAs));
}
return query.list();
}});
return list;
} public List findCreateSql(final String sql, final Map retClass) {
List list = getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
Iterator it = retClass.entrySet().iterator();
while(it.hasNext()){
String keyAs = (String) it.next();
query.addEntity(keyAs, (Class)retClass.get(keyAs));
}
return query.list();
}});
return list;
} @SuppressWarnings("unchecked")
public List<Map> findCreateSqlMap(final String sql) {
List<Map> list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return (List<Map>)query.list();
}});
return list;
}
@SuppressWarnings("unchecked")
public List<Map> findCreateSqlMap(final String sql,final Object[] parameter) {
List<Map> list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
for(int i=0;i<parameter.length;i++){
query.setParameter(i, parameter[i]);
}
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return (List<Map>)query.list();
}});
return list;
}
@SuppressWarnings("unchecked")
public List findCreateSqlMap(final String sql,final Map parameter) {
List<Map> list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
query.setProperties(parameter).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return (List<Map>)query.list();
}});
return list;
}
}spring封装hibernate我们就用一个dao,一般都够!不够在扩展·