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

Projektionsabfragemethode für den Entwurf eines Datenwörterbuchs

零下一度
Freigeben: 2017-07-02 09:29:16
Original
1514 Leute haben es durchsucht

 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";
    }
}
Nach dem Login kopieren

2 die Projektionsabfragemethode in IElecSystemDDLService:

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

    List<ElecSystemDDL> findSystemDDLListByDistinct();
    
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

4 in IElecSystemDDLDao:

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

    List<ElecSystemDDL> findSystemDDLListByDistinct();
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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

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

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>
Nach dem Login kopieren

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);
Nach dem Login kopieren

(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);
Nach dem Login kopieren

(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);
Nach dem Login kopieren

  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);
Nach dem Login kopieren

(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);
Nach dem Login kopieren

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>
Nach dem Login kopieren
(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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage