public interface UserinfoDAO {
public Long execureHQL(String hql);
}
public class UserinfoDAOImpl extends BaseHibernateDAO implements UserinfoDAO {
public Long execureHQL(String hql) {
Long returnLong;
try {
returnLong = (Long) getSession().createQuery(hql).uniqueResult();
} catch (RuntimeException re) {
log.error("UserinfoDAOImpl execureHQL failed", re);
throw re;
}
return returnLong;
}
}public interface UserinfoServices {
public Long longLogin(String uid, String pw);
public Long updatePassword(String uid, String pw);
}
public class UserinfoServicesImpl implements UserinfoServices {
public Long longLogin(String uid, String pw) {
UserinfoDAO userDao = new UserinfoDAOImpl();
StringBuffer sb = new StringBuffer();
Long longHQL = null;
sb.append("select count(*) from Userinfo uinfo where uinfo.userid = ");
sb.append(uid);
sb.append(" and uinfo.userpw = dbo.md5(");
sb.append(pw);
sb.append(")");
try {
longHQL = userDao.execureHQL(sb.toString());
} catch (Exception e) {
log.error("UserinfoServicesImpl longLogin failed", e);
}
return longHQL;
}
//省略
updatePassword}
UserinfoServicesImpl中的longLogin 看起来很不爽
因为用的是拼装sql语句,hql中的setParameter()方法都用不到
感觉这里问题很大,请问如何修改?
解决方案 »
- org.apache.axis2.AxisFault: Exception occurred while trying to invoke service method sayHello
- 动态创建视图会不会占用很多资源
- struts2 的问题(tomcat启动报错),太搞人了
- win7 系统下 安装MyEclipse6.0 oracle SqlServer2005的 问题
- 问下,有人对Scala比较了解的么?
- struts2问题求救:No configuration found for the specified action
- JSF中的Bug? 欢迎大家都来讨论一下..
- 使用hibernate对对象进行持久化时,Unknown entity class的错误
- 描述一下JVM加载class文件的原理机制
- mybatis selectList("id",Map<List<Map>>) foreach解析
- 有没有关于Eclipse的好书?
- jbpm4.1问题
public Long execureHQL(String hql);
起码有个public Userinfo findByUserid(String userid)这种
这样service里就不需要拼装了。
这句杂不用spring管理了啊,管理的话会减少代码耦合的,UserinfoServicesImpl中的longLogin 看起来很不爽
因为用的是拼装sql语句,hql中的setParameter()方法都用不到
感觉这里问题很大,请问如何修改?
楼主能不能把问题在描述一下,不太明白?拼装sql语句就不爽了吗??呵呵,描述的详细点
Long long=(Long)session.createQuery("from Userinfo uinfo where uinro.id= :uid").setParameter
("uid",userid).uniqueResult();这样写代码看起来多整洁,但是为了重用execureHQL()
我所知道的方法就是拼装sql 了,你们也是这样写的吗?
Query q = super.getSession().createQuery(hql);
q.setString(0, uid);
q.setString(1, pw);
貌似你没用到spring
{
StringBuffer buffer = new StringBuffer("select count(*) from Userinfo uinfo where 1 = 1");
List params = buildHql(buffer, uid, pw);
List list = doquery(buffer.toString(), params.toArray());
if(list > 0){
return list.get(0);
}
return monthSale;
}
private List buildHql(StringBuffer buffer,String uid, String pw)
{
List params = new ArrayList();
if (uid != null)
{
buffer.append(" and s.sellBackBill.seller.id = ?");
params.add(staff);
}
if (fpw != null)
{
buffer.append(" and uinfo.userpw = dbo.md5("?"));
params.add(pw);
}
return params;
}protected List doquery(final String hql, final Object[] values) {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery(hql);
for (int i = 0; values != null && i < values.length; i++) {
Object value = values[i];
query.setParameter(i, value);
}
return query.list();
}
}
});
}
你这个方法:execureHQL,感觉被你封装的更复杂了,到不如直接调用来的快。
你想要“因为用的是拼装sql语句,hql中的setParameter()方法都用不到”这个效果,是不是应该在impl中去封装好呢!!!
然后dao层又重新写一篇重复的代码,所以我觉得 longLogin还是应该写在业务逻辑层