Heim  >  Artikel  >  Java  >  MyBatis führt Selbstabfragen durch und verwendet Rekursion, um eine N-Level-Verknüpfung zu implementieren

MyBatis führt Selbstabfragen durch und verwendet Rekursion, um eine N-Level-Verknüpfung zu implementieren

巴扎黑
巴扎黑Original
2017-07-21 14:38:591927Durchsuche

A: Schauen wir uns zunächst eine einfache Interviewfrage an

Fibonacci-Folge

Berechnen Sie das Array {1,1,2,3,5,8.... ..} Das 30. Positionswert


Regel: 1 1 Ab dem dritten Element ist jedes Element die Summe der beiden vorherigen Elemente

Es gibt zwei Möglichkeiten, es umzusetzen

Der erste Weg:

   TestSelf((n<0   IllegalArgumentException("n不能为负数" (n<=2 1 TestSelf(n-2)+TestSelf(n-1 30

Der zweite Weg: Verwendung von Arrays

 public int TestSelfTwo(int n){       if(n<0){           throw  new IllegalArgumentException("n不能为负数");
       }else if(n<=1){    //递归前两个数  不管n是多少 为一           return 1;
       }       int[]  nums = new int[n+1];   //30位从零开始   nums[0]=1;
       nums[1]=1;       for (int i  =2;i<n;i++){
           nums[i] = nums[i-2]+nums[i-1];
       }       return  nums[n-1];
   }
   @Test   public void  Test(){
       System.out.println(TestSelfTwo(30));
   }

Formel: f(n) = f(n-2)+f(n-1) f stellt dar, wie viele Bits Methode n darstellt

B: Verwenden Sie Rekursion, um n-Level in MyBatis Linkage zu implementieren

SQL-Anweisung: select * from type where pid = 0; Geben Sie den PID-Wert zum ersten Mal als 0 an und geben Sie dann den PID-Wert als 0 an nächstes Mal Als PID für die nächste Abfrage

        public List<Category> getCategory(Integer pid);   //接口层方法

Zuordnungsdateikonfiguration

<mapper namespace="dao.CateGoryDao"><resultMap id="getSelf" type="entity.Category"><id column="cid" property="cid"></id><result column="cname" property="cName"></result><collection property="categorySet" select="getCategory" column="cid"></collection>   //这里可以不用指定oftype  使用反向查询select从另一个maper文件中取出数据时必须用ofType<!--查到的cid作为下次的pid--></resultMap><select id="getCategory" resultMap="getSelf" >select * from category where pid=#{pid}</select></mapper>

JavaType und ofType von Mybatis

geben beide den Objekttyp an. Der Unterschied besteht darin, dass er verwendet werden muss, wenn die umgekehrte Abfrageauswahl zum Abrufen von Daten verwendet wird Eine andere Maper-Datei.

kann den Objekttyp für die Sammlung und Zuordnung angeben.

muss nicht geschrieben werden :

package entity;import java.util.HashSet;import java.util.Set;/**
 * Created by zhangyu on 2017/7/12. */public class Category {private Integer  cid;private String cName;private Integer pid;private Set<Category> categorySet = new HashSet<Category>();
    @Overridepublic String toString() {return "Category{" +
                "cid=" + cid +
                ", cName='" + cName + '\'' +
                ", pid=" + pid +
                ", categorySet=" + categorySet +
                '}';
    }public Integer getCid() {return cid;
    }public void setCid(Integer cid) {this.cid = cid;
    }public String getcName() {return cName;
    }public void setcName(String cName) {this.cName = cName;
    }public Integer getPid() {return pid;
    }public void setPid(Integer pid) {this.pid = pid;
    }public Set<Category> getCategorySet() {return categorySet;
    }public void setCategorySet(Set<Category> categorySet) {this.categorySet = categorySet;
    }
}

Testklasse:

 //测试自连接    @Testpublic void  TestSelf(){
        CateGoryDao dao = MyBatis.getSessionTwo().getMapper(CateGoryDao.class);
        List<Category> list = dao.getCategory(0);for (Category item:list ) {
            System.out.println(item);
        }
    }

Ergebnisse drucken:

Category{cid=1, cName='图书', pid=0, categorySet=[Category{cid=5, cName='期刊报纸', pid=1, categorySet=[]}, Category{cid=3, cName='青年图书', pid=1, categorySet=[Category{cid=6, cName='读者', pid=3, categorySet=[Category{cid=7, cName='12月份', pid=6, categorySet=[]}]}]}, Category{cid=4, cName='少儿图书', pid=1, categorySet=[]}]}
Category{cid=2, cName='服装', pid=0, categorySet=[]}

Das obige ist der detaillierte Inhalt vonMyBatis führt Selbstabfragen durch und verwendet Rekursion, um eine N-Level-Verknüpfung zu implementieren. 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