package com.hy.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.hy.dao.UserDao;
import com.hy.entity.User;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
/***
* 淇濆瓨
* */
@Override
public void add(User user) {
getHibernateTemplate().save(user);
}
@Override
public User findUser(String uname,String pwd) {
User user = null;
Session session=getHibernateTemplate().getSessionFactory().openSession();//打开session
String hql = "from User where uname=? and pwd=?";
Query query = session.createQuery(hql);
query.setString(0,uname);
query.setString(1, pwd);
user = (User) query.uniqueResult();
session.close();
return user;
}
}
像上面的这种查询方式,可以正确查询出数据,但是必须有session.close();
通过进一步了解,我发现这样的做法纯属画蛇添足,明明继承了HibernateDaoSupport,却偏偏要用纯Hibernate的方式来查询数据库,更为简洁的做法是:
public User findUser(String uname,String pwd) {
String hql = "from User where uname="+uname+" and pwd="+pwd+"";
List<User> user = getHibernateTemplate().find(hql);
return user.get(0);
}