A:首先先看下一个简单的面试题

斐波那契数列

计算数组{1,1,2,3,5,8.......} 第30位值

规律:1 1 从第三项开始,每一项都是前两项之和

有两种实现方式

第一种方式:

public class TestOne {

public int TestSelf(int n){

if(n<0){

throw new IllegalArgumentException("n不能为负数");

}else if(n<=2){

return 1;

}else{

return TestSelf(n-2)+TestSelf(n-1);

}

}

@Test

public void Test(){

System.out.println(TestSelf(30));

}

}

打印结果832040

第二种方式:利用数组

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

nums[i] = nums[i-2]+nums[i-1];

}

return nums[n-1];

}

@Test

public void Test(){

System.out.println(TestSelfTwo(30));

}

公式:f(n) = f(n-2)+f(n-1)   f代表方法 n代表多少 位

B:在MyBatis中利用递归实现n级联动

sql语句:select * from type where pid = 0; 首次指定pid值为0,然后下次根据pid为0的cid 作为下次查询的pid

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

映射文件配置

//这里可以不用指定oftype 使用反向查询select从另一个maper文件中取出数据时必须用ofType

select * from category where pid=#{pid}

mybatis的javaType和ofType

都是指定对象的类型 不同的是当使用反向查询select从另一个maper文件中取出数据时必须用ofType

都可以为collection和association是指定对象的类型,

都不是必须写的, 只有反向select时需要ofType;

实体类:

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 categorySet = new HashSet();

@Override

public 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 getCategorySet() {

return categorySet;

}

public void setCategorySet(Set categorySet) {

this.categorySet = categorySet;

}

}

测试类:

//测试自连接

@Test

public void TestSelf(){

CateGoryDao dao = MyBatis.getSessionTwo().getMapper(CateGoryDao.class);

List list = dao.getCategory(0);

for (Category item:list ) {

System.out.println(item);

}

}

打印结果:

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

以上所述是小编给大家介绍的MyBatis之自查询使用递归实现 N级联动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

mybatis 级联查询兑现_MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)...相关推荐

  1. 我的世界 服务器内切换账号密码是多少,我的世界OP查询玩家账号密码 两种解决方式...

    我的世界OP查询玩家账号密码 两种解决方式.我的世界服务器中OP想要查询玩家账号登录密码也不是不可以的,但是一般需要插件协助才能完成.目前两种方式可以实现密码查询. 我的世界服务器OP怎么查询玩家密码 ...

  2. 七电平级联H桥移幅调制和移相调制两种调制方式的仿真加报告。 完美的实现七电平的输出

    七电平级联H桥移幅调制和移相调制两种调制方式的仿真加报告. 完美的实现七电平的输出. 串联H桥多电平逆变器是中压大功率传动系统中应用最为广泛的逆变器拓扑结构之一. 它是由多个单相H桥逆变器组成的,把每 ...

  3. mybatis-一对一的关联查询有两种配置方式

    1.嵌套结果: (mybatis-standalone - MyBatisTest - testSelectBlogWithAuthorResult ()) <!-- 根据文章查询作者,一对一查 ...

  4. Oracle数据库日期范围查询的两种实现方式

    Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通过一个实例来介绍这一过程.我们假设要查询2011-05-02到2011-05-30之间的数据,实现方式如下 ...

  5. mybatis resultMap之collection聚集两种实现方式

    最近做得项目用到了MyBatis处理一对多的映射关系,下面的两个方法中用到了集合的嵌套查询方法,下面仔细学习一下这两种方式 聚集元素用来处理"一对多"的关系.需要指定映射的Java ...

  6. MyBatis级联属性赋值解决连表查询多对一的映射配置

    连表后得到的数据 两个表都创建一个实体类 aoao 表实体类 sss 表实体类 在这个表的实体类中添加 aoao表这个实体类并设置tostring和get set方法 接口 User getAll(@ ...

  7. mybatis一对一联表查询的两种常见方式

    1.一条语句执行查询(代码如下图)  注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_i ...

  8. mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签...

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  9. 模糊查询like两种使用方式

    1.Java中组装好 在Java中,把like的内容组装好,把这个内容传入sql语句. public List<Student> quaryByName1(String uname) {S ...

最新文章

  1. 面试彩蛋1:斐波那契数列用递归函数、循环函数实现
  2. buffer cache 深度解析
  3. 把一件简单的事情做好你就不简单了
  4. 在Windows10上安装WSL使用binwalk命令
  5. ubuntu20.04自带python版本_替换 ubuntu 自带的python版本
  6. 力扣617. 合并二叉树(JavaScript)
  7. 第十一周学习进度报告
  8. python应用于人工智能的代码_【python量化】人工智能技术在量化交易中应用的开源项目...
  9. 第一次写博,好激动啊!
  10. [转载] set集合python_python基础-set集合
  11. java正则替换数字_Java 正则表达式,替换图片名称,替换数字,和谐用语,复制文件...
  12. SilverLight学习之基本图形
  13. Java5国际认证SCJP试题精解,Java 5国际认证SCJP试题精解
  14. 从 Aave 到 Yearn:一文梳理 DeFi 中的「蓝筹股」
  15. 初几学的计算机二进制,说说二进制与计算机的那些事儿
  16. 扫码支付java,详解JAVA后端实现统一扫码支付:微信篇
  17. 网页设计(三)——JavaScript
  18. html中加大字体,html字体加大标签与写法介绍
  19. ADAMS三维路面重构
  20. 图像识别购物超方便!

热门文章

  1. linux 下小技巧之-统计文件夹下面子文件夹下面的个数
  2. 根据sessionId获取Session对象
  3. 求一个有序整数数组中和为K的数的对数
  4. shell 删除simatic_安装西门子软件时提示重启电脑的解决办法
  5. linux远程测试题,linux内训考试题及答案
  6. 更换mysql_用这47 张图带你 MySQL 进阶!!!
  7. mysql 存储过程 错误码_mysql存储过程中的错误处理_mysql
  8. 库克跟乔布斯差几代iPhone? 解读iPhone十年变与不变
  9. 滴滴CTO张博:过去的1095天 人工智能发展主要依赖3件事
  10. 非官方构建的 Windows 下的 Atom 编辑器