>  기사  >  웹 프론트엔드  >  데이터 사전 설계의 투영 쿼리 방법

데이터 사전 설계의 투영 쿼리 방법

零下一度
零下一度원래의
2017-07-02 09:29:161451검색

 Projection 쿼리는 그림과 같이 드롭다운 상자를 클릭하여 데이터베이스의 데이터 사전 테이블에 있는 기존 데이터 유형 이름을 표시하고 중복 없이 드롭다운 메뉴로 이동하는 것을 의미합니다

1. ElecSystemDDLAction의 홈 추가:

public class ElecSystemDDLAction extends BaseAction<ElecSystemDDL>{
    ElecSystemDDL elecSystemDDL=this.getModel();    
    //注入数据字典service@Resource(name=IElecSystemDDLService.SERVICE_NAME)
    IElecSystemDDLService elecSystemDDLService;    /**  
    * @Name: home
    * @Description: 跳转到数据字典页面
    * @Parameters: 无
    * @Return: String:跳转到system/dictionaryIndex.jsp*/public String home(){//        1:查询数据库中已有的数据类型,返回List<ElecSystemDDL>集合
        List<ElecSystemDDL> list=elecSystemDDLService.findSystemDDLListByDistinct();
//        2:将ElecSystemDDL对象放入request中
        request.setAttribute("list", list);return "home";
    }
}

2. IElecSystemDDLService에서 프로젝션 쿼리 메서드 선언:

public interface IElecSystemDDLService {public static final String SERVICE_NAME="cn.elec.service.impl.ElecSystemDDLServiceImpl";

    List<ElecSystemDDL> findSystemDDLListByDistinct();
    
}

3. ElecSystemDDLServiceImpl에서 다시 작성:

public class ElecSystemDDLServiceImpl implements IElecSystemDDLService{//数据字典Dao@Resource(name=IElecSystemDDLDao.SERVICE_NAME)private IElecSystemDDLDao elecSystemDDLDao;    
    /**  
    * @Name: findSystemDDLListByDistinct
    * @Description: 查询数据库中已有的数据类型,去掉重复值
    * @Parameters: 无
    * @Return: List:存储数据类型集合*/@Override
    @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)public List<ElecSystemDDL> findSystemDDLListByDistinct() {
        List<ElecSystemDDL> list=elecSystemDDLDao.findSystemDDLListByDistinct();return list;
    }
}

4. IElecSystemDDLDao에서 프로젝션 쿼리 방법을 선언합니다. :

public interface IElecSystemDDLDao extends ICommonDao<ElecSystemDDL> {public static final String SERVICE_NAME="cn.elec.dao.imp.ElecSystemDDLImpl";

    List<ElecSystemDDL> findSystemDDLListByDistinct();
}

5. ElecSystemDDLImpl에서 이 메서드를 다시 작성하세요.

@Repository(IElecSystemDDLDao.SERVICE_NAME)public class ElecSystemDDLImpl extends ICommonDaoImpl<ElecSystemDDL> implements IElecSystemDDLDao{/**  
    * @Name: findSystemDDLListByDistinct
    * @Description: 查询数据库中已有的数据类型,去掉重复值
    * @Parameters: 无
    * @Return: List:存储数据类型集合*/@Overridepublic List<ElecSystemDDL> findSystemDDLListByDistinct() {//返回List集合List<ElecSystemDDL> systemList = new ArrayList<ElecSystemDDL>();/**方法一:投影查询一个字段返回List<Object>中
        String hql="SELECT DISTINCT o.keyword FROM ElecSystemDDL o";
        List<Object> list = this.getHibernateTemplate().find(hql);
        //组织页面返回结果
        if(list!=null&&list.size()>0){
            for(Object obj:list){
                ElecSystemDDL elecSystemDDL = new ElecSystemDDL();
                //设置数据类型,并添加到systemList
                elecSystemDDL.setKeyword(obj.toString());
                systemList.add(elecSystemDDL);
            }
        }*///方法二:使用hql语句直接将投影查询的字段放置到对象中String hql="SELECT DISTINCT new cn.elec.domain.ElecSystemDDL(o.keyword) FROM ElecSystemDDL o";
        systemList=this.getHibernateTemplate().find(hql);return systemList;
    }
}

두 번째 쿼리 솔루션에서는 ElecSystemDDL에 매개 변수가 있는 생성자를 만들어야 합니다:

public ElecSystemDDL() {//无参构造方法}    
public ElecSystemDDL(String keyword) {//带参构造方法this.keyword=keyword;
}  

6. < ;ElecSystemDDL> 컬렉션은 Actionl 클래스의 요청 객체에 들어가며 속성 이름은 list입니다. Dictionary.jsp 페이지가 request.list를 얻으면 ElecSystemDDL 객체의 키워드 속성을 탐색하여 드롭다운 옵션 상자에 넣어야 합니다.

<tr>
    <td class="ta_01" align="right" width="35%" >类型列表:</td>
    <td class="ta_01" align="left"  width="30%" >
                   <!-- 方案一 <select name="keyword" class="bg" style="width:180px" onchange="changetype()">
                         <option value="jerrynew"></option>
                         <s:iterator value="#request.list" var="sys">
                             <option value="<s:property value="#sys.keyword"/>">
                                 <s:property value="#sys.keyword"/>
                             </option>
                         </s:iterator>
                         </select>
                        --> 
                         
                         <!-- 方案二 -->
                         <s:select list="#request.list" name="keyword" id="keyword" 
                                 listKey="keyword" listValue="keyword" 
                                 headerKey="jerrynew" headerValue="" 
                                 cssClass="bg" cssStyle="width:180px" onchange="changetype()">
                         </s:select>
                         
                    </td>
</tr>
테스트에는 두 가지 옵션이 있습니다. 데이터 사전 홈페이지 기능 페이지의 드롭다운 메뉴 유형 이름이 올바르게 표시됩니다.

1. hql 및 sql 문에 대한 프로젝션 쿼리:


(1) 프로젝션 쿼리가 필드인 경우

String hql = "SELECT DISTINCT o.keyword FROM ElecSystemDDL o";
List<Object> list = this.getHibernateTemplate().find(hql);
과 같이 이때 List가 반환됩니다. 프로젝션 쿼리가 여러 필드에 대한 경우에는

String hql = "SELECT DISTINCT o.keyword,o.ddlName FROM ElecSystemDDL o";
List<Object[]> list = this.getHibernateTemplate().find(hql);
과 같이 이때 List가 반환됩니다. 이때

String hql = "SELECT o,o.ddlName FROM ElecSystemDDL o";
List<Object[]> list = this.getHibernateTemplate().find(hql);
 
과 같이 반환됩니다. 배열의 첫 번째 값은 ElecSystemDDL 객체이고, 배열의 두 번째 값은 ddlName 필드의 값을 나타냅니다.

(4) 프로젝션 쿼리가 객체인 경우 List이 이때 반환됩니다. 예를 들어

String hql = "SELECT o FROM ElecSystemDDL o";
List<ElecSystemDDL> list = this.getHibernateTemplate().find(hql);
(5) hql 문인 경우 hql 문을 사용하여 직접 프로젝션 쿼리의 필드를 object 에 배치합니다(예:

String hql = "SELECT DISTINCT new cn.itcast.elec.domain.ElecSystemDDL(o.keyword) FROM ElecSystemDDL o";
List<ElecSystemDDL> list = this.getHibernateTemplate().find(hql);
2). 페이지에서는 select를 사용하여 List

(1) 해결 방법 1: option>

<select name="keyword" class="bg" style="width:180px" onchange="changetype()">
        <option value="jerrynew"></option>
        <s:iterator value="#request.list" var="system">
                <option value="<s:property value="#system.keyword"/>">
<s:property value="#system.keyword"/>
</option>
        </s:iterator>
</select>
(2 ) 옵션 2:

<s:select list="#request.list" name="keyword" id="keyword"listKey="keyword" listValue="keyword"headerKey="jerrynew" headerValue=""cssClass="bg" cssStyle="width:180px" onchange="changetype()">
</s:select>
사용

위 내용은 데이터 사전 설계의 투영 쿼리 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.