初用Hibernate4写了个BaseDao实现请多多指教


import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
/**
 * 
 * @author kingschan
 * date:2014-1-9
 * @param <T>
 */
@Repository("BaseDao")
public class BaseDao {
	public Logger log =  LoggerFactory.getLogger(BaseDao.class);
	private SessionFactory sessionfactory;
	
	public SessionFactory getSessionfactory() {
		return sessionfactory;
	}
	@Resource(name="sessionFactory")
	public void setSessionfactory(SessionFactory sessionfactory) {
		this.sessionfactory = sessionfactory;
		log.info("注入sessionfactory");
	}
	
	public Session getSession() {
		Session session = null;
		try
		{
			session = sessionfactory.getCurrentSession();
			//log.info("只有在事务管理下,才能通过 getCurrentSession() 得到 session ,如果显示这个信息,则说明事务管理工作起作用了。");
		}
		catch(HibernateException ex)
		{			
			session = sessionfactory.openSession();  	
			log.info("*************************************************************");
			log.info("*                                                           *");
			log.info("*  通过  openSession() 得到。事务管理没有起作用,需要检查配置。  *");
			log.info("*                                                           *");
			log.info("*************************************************************");
		}		
		return session;
	}
	/**
	 * 保存一个对象
	 * @param obj
	 */
	public void save(Object obj) {
		Session s = getSession();
		s.save(obj);
	}
	/**
	 * 根据hql返回一个list  如果有参数刚hql用?来表示条件    
	 * @param hql
	 * @param args  从1开始赋值
	 * @return
	 */
	public List<?> queryForList(String hql,Object...args) {
		List<?> lis =null;
		Session s = getSession();
		Query q = s.createQuery(hql);
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		lis = q.list();		
		return lis;
	}
	
	/**
	 * 分页查询
	 * @param hql
	 * @param pageindex
	 * @param limit
	 * @param args
	 * @return
	 */
	public List<?> Pagination(String hql,int pageindex,int limit,Object...args) {
		List<?> lis =null;
		Session s = getSession();
		Query q = s.createQuery(hql);
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		q.setFirstResult((pageindex-1)*limit);
		q.setMaxResults((pageindex-1)*limit+limit);
		lis = q.list();
		
		return lis;
	}
	/**
	 * 修改一个实体
	 * @param obj
	 */
	public void update(Object obj) {
		getSession().update(obj);
	}
	/**
	 * 删除一个实体
	 * @param obj
	 */
	public void delete(Object obj) {
		getSession().delete(obj);
	}
	/**
	 * 根据主键返回一个实体
	 * @param clazz
	 * @param id
	 * @return
	 */
	public Object get(Class<?> clazz,Object id) {
		return getSession().get(clazz, (Serializable) id);
	}
	/**
	 * 执行HQL
	 * @param hql
	 * @param obj
	 */
	public int executeHQL(String hql,Object...args) {
		Query q = getSession().createQuery(hql);
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		return q.executeUpdate();
	}
	/**
	 * 执行SQL
	 * @param hql
	 * @param obj
	 */
	public int executeSQL(String sql,Object...args) {
		Query q = getSession().createSQLQuery(sql);
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		return q.executeUpdate();
	}
	/**
	 * hql单一值查值
	 * @param hql
	 * @param args
	 * @return
	 */
	public Object uniqueQuery(String hql,Object...args) {
		Query q = getSession().createQuery(hql);
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		return q.uniqueResult();
	}
	/***
	 * sql 单一值查值
	 * @param sql
	 * @param args
	 * @return
	 */
	public Object uniqueQueryBySql(String sql,Object...args) {
		Query q = getSession().createSQLQuery(sql);
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		return q.uniqueResult();
	}
	/**
	 * 本地命名查询返回List<Map>
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<?> getNameQuery(String key,Object...args)throws Exception{
		List<Map<String, Object>> lis = null;
		Session s = getSession();
		Query q = s.getNamedQuery(key); 
		if (null!=args&&args.length>0) {
			for (int i = 0; i < args.length; i++) {
				q.setParameter(i, args[i]);
			}
		}
		q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
		lis = q.list();
		return lis;
	}
	/**
	 * <font color='red'>执行sql语句返回list<map<String,object>></font>
	 * @param sql
	 * @param objects
	 * @return
	 */
	public List<?> executeSQLQuery(String sql ,Object...objects){
		List<?> lis =null;
		Session s = getSession();
		Query q = s.createSQLQuery(sql);
		if (null!=objects&&objects.length>0) {
			for (int i = 0; i < objects.length; i++) {
				q.setParameter(i, objects[i]);
			}
		}
		q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
		return lis = q.list();
	}
}

抱歉,我无法为您提供完整的基于Java的BaseDao代码,因为BaseDao实现可能因不同的应用程序而异。 但是,我可以提供一个基本的代码框架,以便您可以开始编您自己的BaseDao类。 ```java public abstract class BaseDao<T> { private final Connection connection; public BaseDao(Connection connection) { this.connection = connection; } protected abstract String getTableName(); protected abstract T fromResultSet(ResultSet resultSet) throws SQLException; public List<T> findAll() throws SQLException { String query = "SELECT * FROM " + getTableName(); List<T> entities = new ArrayList<>(); try (PreparedStatement statement = connection.prepareStatement(query)) { ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { T entity = fromResultSet(resultSet); entities.add(entity); } } return entities; } public T findById(int id) throws SQLException { String query = "SELECT * FROM " + getTableName() + " WHERE id = ?"; try (PreparedStatement statement = connection.prepareStatement(query)) { statement.setInt(1, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { return fromResultSet(resultSet); } } return null; } public void save(T entity) throws SQLException { // implement saving entity to database } public void update(T entity) throws SQLException { // implement updating entity in database } public void delete(T entity) throws SQLException { // implement deleting entity from database } } ``` 这是一个基本的BaseDao类,它使用Java的泛型来支持不同类型的实体对象。它包括以下方法: - `findAll()` - 返回一个包含所有实体对象的列表。 - `findById(int id)` - 根据ID返回一个实体对象。 - `save(T entity)` - 将一个实体对象保存到数据库中。 - `update(T entity)` - 更新一个实体对象在数据库中的记录。 - `delete(T entity)` - 从数据库中删除一个实体对象。 您需要根据您的应用程序的需要实现这些方法,以便BaseDao类能够正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值