package edu.sjtu.infosec.ismp.manager.BSAM.dao.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import edu.sjtu.infosec.ismp.manager.BSAM.comm.BaseDaoHibernate;
import edu.sjtu.infosec.ismp.manager.BSAM.dao.MachineRoomDao;
import edu.sjtu.infosec.ismp.manager.BSAM.model.MachineRoom;
import edu.sjtu.infosec.ismp.security.Domain;
public class MachineRoomDaoImpl extends BaseDaoHibernate implements MachineRoomDao {
@SuppressWarnings("unchecked")
public List getMachineRoomList() {
StringBuffer hql = new StringBuffer("from MachineRoom order by id ");
return getHibernateTemplate().find(hql.toString());
}
@SuppressWarnings("unchecked")
public List getMachineRoomList(int startResult, int maxResult) {
String hql = "from MachineRoom order by id ";
Session session = this.getSession();
Query query = session.createQuery(hql);
query.setFirstResult(startResult);
query.setMaxResults(maxResult);
return query.list();
}
@SuppressWarnings("unchecked")
public List getMachineRoomListByDomain(List<Domain> userDomainList,int startResult, int maxResult) {
if(null == userDomainList || userDomainList.size() <= 0){
return null;
}
StringBuffer userDomainStr = new StringBuffer();
///遍历userDomainList,将domain的id组成一个字符串
for (int i = 0; i < userDomainList.size(); i++) {
if(i != (userDomainList.size()-1)){
userDomainStr.append(userDomainList.get(i).getId()).append(",");
}else{
userDomainStr.append(userDomainList.get(i).getId());
}
}
StringBuffer hql = new StringBuffer("from MachineRoom a where 1=1 and a.domain.id in (" + userDomainStr + ") ");
Query query = this.getSession().createQuery(hql.toString());
// query.setString("userDomainStr", userDomainStr.toString());///cc?:不知道为什么在HQL中这种方式不可以,赋值错误
query.setFirstResult(startResult);
query.setMaxResults(maxResult);
return query.list();
}
@SuppressWarnings("unchecked")
public List getMachineRoomListByDomain(List<Domain> userDomainList) {
if(null == userDomainList || userDomainList.size() <= 0){
return null;
}
StringBuffer userDomainStr = new StringBuffer();
///遍历userDomainList,将domain的id组成一个字符串
for (int i = 0; i < userDomainList.size(); i++) {
if(i != (userDomainList.size()-1)){
userDomainStr.append(userDomainList.get(i).getId()).append(",");
}else{
userDomainStr.append(userDomainList.get(i).getId());
}
}
StringBuffer hql = new StringBuffer("from MachineRoom a where 1=1 and a.domain.id in (" + userDomainStr + ") ");
Query query = this.getSession().createQuery(hql.toString());
// query.setString("userDomainStr", userDomainStr.toString());///cc?:不知道为什么在HQL中这种方式不可以,赋值错误
return query.list();
}
public void saveOrUpdateMachineRoom(MachineRoom machineRoom) {
this.getHibernateTemplate().saveOrUpdate(machineRoom);
}
@SuppressWarnings("unchecked")
public int getCount() {
int num = 0;
List list=getHibernateTemplate().find("from MachineRoom");
if (null != list && list.size() > 0) {
num = list.size();
}
return num;
}
public int getCountByDomain(List<Domain> userDomainList) {
if(null == userDomainList || userDomainList.size() <= 0){
return 0;
}
int num = 0;
StringBuffer userDomainStr = new StringBuffer();
///遍历userDomainList,将domain的id组成一个字符串
for (int i = 0; i < userDomainList.size(); i++) {
if(i != (userDomainList.size()-1)){
userDomainStr.append(userDomainList.get(i).getId()).append(",");
}else{
userDomainStr.append(userDomainList.get(i).getId());
}
}
StringBuffer hql = new StringBuffer("from MachineRoom a where 1=1 and a.domain.id in (" + userDomainStr + ") ");
Query query = this.getSession().createQuery(hql.toString());
// query.setString("userDomainStr", userDomainStr.toString());///cc?:不知道为什么在HQL中这种方式不可以,赋值错误
if (null != query.list()&& query.list().size() > 0) {
num = query.list().size();
}
return num;
}
@SuppressWarnings("unchecked")
public List getSubUnitById(String id,int startResult, int maxResult) {
/**原生SQL:取得机房的下级单元(即机柜和主机),并且先按照type排序,然后按照id
select c.id,c.name,c.type from (
select a.id as id,a.machine_cabinet_name as name,'JiGui' as type from bsam_machine_cabinet a where 1=1
and a.machine_room_id = 21
union
select b.id,b.machine_name as name,'ZhuJi' as type from bsam_machine b where 1=1
and b.machine_room_id = 21
) c order by c.type,c.id
**/
StringBuffer sql = new StringBuffer(" select c.id,c.name,c.type from ( \n");
sql.append(" select a.id as id,a.machine_cabinet_name as name,'JiGui' as type from bsam_machine_cabinet a where 1=1 \n");
sql.append(" and a.machine_room_id = ");
sql.append(id);
sql.append(" \n union \n");
sql.append(" select b.id,b.machine_name as name,'ZhuJi' as type from bsam_machine b where 1=1 \n");
sql.append(" and b.machine_room_id = ");
sql.append(id);
sql.append(" \n ) c order by c.type,c.id \n");
Query query = this.getSession().createSQLQuery(sql.toString());
///分页
query.setFirstResult(startResult);
query.setMaxResults(maxResult);
return query.list();
}
@SuppressWarnings("unchecked")
public List getSubUnitById(String id) {
/**原生SQL:取得机房的下级单元(即机柜和主机),并且先按照type排序,然后按照id
select c.id,c.name,c.type from (
select a.id as id,a.machine_cabinet_name as name,'JiGui' as type from bsam_machine_cabinet a where 1=1
and a.machine_room_id = 21
union
select b.id,b.machine_name as name,'ZhuJi' as type from bsam_machine b where 1=1
and b.machine_room_id = 21
) c order by c.type,c.id
**/
StringBuffer sql = new StringBuffer(" select c.id,c.name,c.type from ( \n");
sql.append(" select a.id as id,a.machine_cabinet_name as name,'JiGui' as type from bsam_machine_cabinet a where 1=1 \n");
sql.append(" and a.machine_room_id = ");
sql.append(id);
sql.append(" \n union \n");
sql.append(" select b.id,b.machine_name as name,'ZhuJi' as type from bsam_machine b where 1=1 \n");
sql.append(" and b.machine_room_id = ");
sql.append(id);
sql.append(" \n ) c order by c.type,c.id \n");
Query query = this.getSession().createSQLQuery(sql.toString());
return query.list();
}
public int getSubUnitCountById(String id) {
StringBuffer sql = new StringBuffer(" select c.id,c.name,c.type from ( \n");
sql.append(" select a.id as id,a.machine_cabinet_name as name,'JiGui' as type from bsam_machine_cabinet a where 1=1 \n");
sql.append(" and a.machine_room_id = ");
sql.append(id);
sql.append(" \n union \n");
sql.append(" select b.id,b.machine_name as name,'ZhuJi' as type from bsam_machine b where 1=1 \n");
sql.append(" and b.machine_room_id = ");
sql.append(id);
sql.append(" \n ) c order by c.type,c.id \n");
Query query = this.getSession().createSQLQuery(sql.toString());
int num = 0;
if (null != query.list()&& query.list().size() > 0) {
num = query.list().size();
}
return num;
}
@SuppressWarnings("unchecked")
public List<MachineRoom> getMachineRoomByName(String name) {
StringBuffer hql = new StringBuffer("from MachineRoom a where 1=1 and a.machineRoomName = :name ");
Query query = this.getSession().createQuery(hql.toString());
query.setString("name", name);
return query.list();
}
// ===========================================================
}