Heim  >  Artikel  >  Web-Frontend  >  Projektionsabfragemethode für den Entwurf eines Datenwörterbuchs

Projektionsabfragemethode für den Entwurf eines Datenwörterbuchs

零下一度
零下一度Original
2017-07-02 09:29:161477Durchsuche

 Projektionsabfrage bezieht sich auf: Klicken Sie auf das Dropdown-Feld, um die vorhandenen Datentypnamen in der Datenwörterbuchtabelle in der Datenbank anzuzeigen, und wechseln Sie ohne Duplizierung zum Dropdown-Menü, wie in der Abbildung gezeigt

1. Fügen Sie im Home von ElecSystemDDLAction hinzu:

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 die Projektionsabfragemethode in IElecSystemDDLService:

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

    List<ElecSystemDDL> findSystemDDLListByDistinct();
    
}

3. Umschreiben in 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 in IElecSystemDDLDao:

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

    List<ElecSystemDDL> findSystemDDLListByDistinct();
}

5. Schreiben Sie diese Methode in ElecSystemDDLImpl um:

@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;
    }
}

Der zweite Abfrageplan muss erstellt werden ElecSystemDDL Ein Konstruktor mit Parametern:

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

6. Traverse in dictionaryIndex.jsp:

Da die List in der Actionl-Klasse platziert ist Anforderungsobjekt, der Attributname ist Liste. Wenn die Seite dictionary.jsp die request.list erhält, muss sie das Schlüsselwortattribut des ElecSystemDDL-Objekts durchlaufen und in das Dropdown-Optionsfeld einfügen. Es gibt zwei Optionen:

<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>

Test: Auf der Funktionsseite der Startseite des Datenwörterbuchs kann das Dropdown-Menü den Typnamen korrekt anzeigen.

1. Projektionsabfrage von HQL- und SQL-Anweisungen:

(1) Wenn es sich bei der Projektionsabfrage um ein Feld handelt, wird hier List zurückgegeben Beispiel:

String hql = "SELECT DISTINCT o.keyword FROM ElecSystemDDL o";
List<Object> list = this.getHibernateTemplate().find(hql);

(2) Wenn die Projektionsabfrage mehrere Felder umfasst, wird zu diesem Zeitpunkt List zurückgegeben. wie zum Beispiel

String hql = "SELECT DISTINCT o.keyword,o.ddlName FROM ElecSystemDDL o";
List<Object[]> list = this.getHibernateTemplate().find(hql);

(3) Wenn die Projektionsabfrage mehrere Felder umfasst, wird zu diesem Zeitpunkt List zurückgegeben

String hql = "SELECT o,o.ddlName FROM ElecSystemDDL o";
List<Object[]> list = this.getHibernateTemplate().find(hql);

  Der erste Wert des Arrays ist ein ElecSystemDDL-Objekt, und der zweite Wert des Arrays stellt den Wert des Felds ddlName dar.

(4) Wenn die Projektionsabfrage ein Objekt ist, wird zu diesem Zeitpunkt List zurückgegeben, z. B.

String hql = "SELECT o FROM ElecSystemDDL o";
List<ElecSystemDDL> list = this.getHibernateTemplate().find(hql);

(5) Wenn es sich um eine HQL-Anweisung handelt, verwenden Sie die HQL-Anweisung, um die Felder der Projektionsabfrage direkt im Objekt zu platzieren, z. B.

String hql = "SELECT DISTINCT new cn.itcast.elec.domain.ElecSystemDDL(o.keyword) FROM ElecSystemDDL o";
List<ElecSystemDDL> list = this.getHibernateTemplate().find(hql);

2. Verwenden Sie select, um die Seite List zu durchlaufen.

(1) Lösung 1: Verwenden Sie , um

<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) Option 2: Verwenden Sie

Das obige ist der detaillierte Inhalt vonProjektionsabfragemethode für den Entwurf eines Datenwörterbuchs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn