package com.taobao.zeus.store.mysql; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Expression; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.taobao.zeus.store.UserManager; import com.taobao.zeus.store.mysql.persistence.ZeusUser; @SuppressWarnings("unchecked") public class MysqlUserManager extends HibernateDaoSupport implements UserManager{ public List<ZeusUser> getAllUsers(){ return (List<ZeusUser>) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusUser where isEffective=1 "); return query.list(); } }); } public ZeusUser findByUid(String uid){ DetachedCriteria criteria=DetachedCriteria.forClass(ZeusUser.class); criteria.add(Expression.eq("uid", uid)); List<ZeusUser> users=getHibernateTemplate().findByCriteria(criteria); if(users!=null && !users.isEmpty()){ return users.get(0); } return null; } public List<ZeusUser> findListByUid(final List<String> uids){ if(uids.isEmpty()){ return new ArrayList<ZeusUser>(); } List<ZeusUser> list = (List<ZeusUser>) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusUser where uid in (:idList)"); query.setParameterList("idList", uids); return query.list(); } }); return list; } public ZeusUser addOrUpdateUser(final ZeusUser user){ List<ZeusUser> list=(List<ZeusUser>) getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusUser where uid=?"); query.setParameter(0, user.getUid()); return query.list(); } }); if(list!=null && !list.isEmpty()){ ZeusUser zu=list.get(0); zu.setEmail(user.getEmail()); zu.setWangwang(user.getWangwang()); zu.setName(user.getName()); if(user.getPhone()!=null && !"".equals(user.getPhone())){ zu.setPhone(user.getPhone()); } zu.setGmtModified(new Date()); zu.setIsEffective(user.getIsEffective()); zu.setUserType(user.getUserType()); zu.setDescription(user.getDescription()); getHibernateTemplate().update(zu); }else{ user.setGmtCreate(new Date()); user.setGmtModified(new Date()); getHibernateTemplate().save(user); } return user; } @Override public List<ZeusUser> findListByUidByOrder(final List<String> uids) { List<ZeusUser> result = new ArrayList<ZeusUser>(); if(uids.isEmpty()){ return result; } List<ZeusUser> users = findListByUid(uids); for(String uid : uids){ for(ZeusUser user : users){ if (uid.equals(user.getUid())) { result.add(user); } } } return result; } /**2015-02-04**/ public ZeusUser findByUidFilter(String uid){ DetachedCriteria criteria=DetachedCriteria.forClass(ZeusUser.class); criteria.add(Expression.eq("uid", uid)); criteria.add(Expression.eq("isEffective", 1)); List<ZeusUser> users=getHibernateTemplate().findByCriteria(criteria); if(users!=null && !users.isEmpty()){ return users.get(0); } return null; } public List<ZeusUser> findAllUsers(final String sortField, final String sortOrder){ return (List<ZeusUser>) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusUser order by " + sortField + " " + sortOrder); return query.list(); } }); } public List<ZeusUser> findListByFilter(final String filter, final String sortField, final String sortOrder){ if(filter.isEmpty()){ return new ArrayList<ZeusUser>(); } List<ZeusUser> list = (List<ZeusUser>) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.ZeusUser "+ "where uid like :uid or name like :name or email like :email order by " + sortField + " " + sortOrder); query.setString("uid", "%"+filter+"%"); query.setString("name", "%"+filter+"%"); query.setString("email", "%"+filter+"%"); return query.list(); } }); return list; } @Override public void update(ZeusUser user) { user.setGmtModified(new Date()); getHibernateTemplate().update(user); } }