Maison  >  Article  >  Java  >  MyBatis s'auto-interroge et utilise la récursivité pour implémenter une liaison de niveau N

MyBatis s'auto-interroge et utilise la récursivité pour implémenter une liaison de niveau N

巴扎黑
巴扎黑original
2017-07-21 14:38:592002parcourir

A : Regardons d'abord une question d'entretien simple

Séquence de Fibonacci

Calculez le tableau {1,1,2,3,5,8.... ..} Le Valeur de la 30ème position


Règle : 1 1 À partir du troisième élément, chaque élément est la somme des deux éléments précédents

Il existe deux manières de le mettre en œuvre

La première façon :

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

La deuxième façon : utiliser des tableaux

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

Formule : f(n) = f(n-2)+f(n-1) f représente le nombre de bits que la méthode n représente

B : Utilisez la récursivité pour implémenter le niveau n dans MyBatis Linkage

instruction SQL : sélectionnez * à partir du type où pid = 0 ; Spécifiez la valeur pid sur 0 pour la première fois, puis spécifiez la valeur pid sur 0 ; la prochaine fois Comme pid pour la prochaine requête

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

Configuration du fichier de mappage

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

de mybatis spécifient tous deux le type d'objet. La différence est qu'il doit être utilisé lors de l'utilisation de la sélection de requête inversée pour récupérer des données. un autre fichier maper. ofType

peut spécifier le type d'objet pour la collection et l'association

n'a pas besoin d'être écrit. OfType n'est requis que pour la sélection inversée ; :

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

Classe de test :

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

Imprimer les résultats :

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=[]}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn