import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.integration.entity.User;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@Override
public User getUser(String name) {
// TODO Auto-generated method stub
String hsql="from User u where u.name='"+name+"'";
User result=(User)((Query) this.getHibernateTemplate().find(hsql)).uniqueResult();
return result;
}
问题是Query和uniqueResult()已被弃用,我将如何修改我的代码?感谢
答案 0 :(得分:1)
问题不仅在于你的方法。孔类HibernateDaoSupport
已弃用,因为它说here
我建议你通过Spring配置你的SessionFactory
(因为我看到你使用它)并使用createQuery
方法传递你的hql。这是一个例子:
配置会话工厂:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
p:packagesToScan="-your-model-"
p:hibernateProperties-ref="-your-properties-"
p:dataSource-ref="-your-datasource-"/>
DAO方法:
private final SessionFactory sessionFactory;
// Injecting session factory via constructor
@Autowired
public UserDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
String hql="from User u where u.name=:name";
public User getByUsername(String name) {
return sessionFactory.getCurrentSession()
.createQuery(hql, User.class)
.setParameter("name", name)
.uniqueResult();
}
您的代码也不安全。您应该使用查询参数来阻止sql注入。我用我的方法展示它。阅读会话工厂并将其注入DAO。
祝你好运。修改强>
这只是一个例子。您可以根据需要配置所有内容(通过java代码,而不是xml)