MyBatis之自查询,使用 递归实现 N级联动
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<n;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<Category> getCategory(Integer pid); //接口层方法
映射文件配置
<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>
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<Category> categorySet = new HashSet<Category>();
@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<Category> getCategorySet() {
return categorySet;
} public void setCategorySet(Set<Category> categorySet) {
this.categorySet = categorySet;
}
}
测试类:
//测试自连接
@Test
public void TestSelf(){
CateGoryDao dao = MyBatis.getSessionTwo().getMapper(CateGoryDao.class);
List<Category> 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之关联查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- Mybatis多条件查询
在Mybatis多条件查询中: 1.参数如果是多条件,则需要将将添加到Map集合中进行传入. 2.就是将其参数用有序数字进行代替. Mybatis单个String类型参数传递 mysql文如下,传入参 ...
- 【转载】Mybatis多参数查询映射
转载地址:http://www.07net01.com/zhishi/402787.html 最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴 露了很多问题,其 ...
- Mybatis包分页查询java公共类
Mybatis包分页查询java公共类 分页----对于数据量非常大的查询中.是不可缺少的. mybatis底层的分页sql语句因为须要我们自己去手动写.而实现分页显示的时候我们须要依据分页查询条 ...
- mybatis的collection查询问题以及使用原生解决方案的结果
之前在springboot+mybatis环境的坑和sql语句简化技巧的第2点提到,数据库的一对多查询可以一次查询多级数据,并且把拿到的数据按id聚合,使父级表和子级表都有数据. 但是这种查询,必然要 ...
- SpringBoot+Mybatis实现关联查询
SpringBoot+Mybatis实现关联查询 今天学习了下Mybatis的动态查询,然后接着上次的Demo改造了下实现表的关联查询. 话不多说,开始今天的小Demo 首先接着上次的项目 https ...
- MyBatis实现模糊查询的几种方式
在学习MyBatis过程中想实现模糊查询,可惜失败了.后来上百度上查了一下,算是解决了.记录一下MyBatis实现模糊查询的几种方式. 数据库表名为test_student,初始化了几条记录,如图: ...
- MyBatis多对多查询
-------------------siwuxie095 MyBatis 多对多查询 以订单和商品为例,即 一个订单可 ...
- Mybatis之关联查询及动态SQL
前言 实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容.此时,就可以使用Mybatis的关联查询还有动态SQL.前几篇文章已经介绍过了怎么调用及相关内容,因此这里只 ...
随机推荐
- DataTable保存与读取 stream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- npp基本设置
经过实践,本人发现Notpad++是一个很不错的软件,无论是用于文档的读取还是开发,都很赞,那么给软件做一些基本的设置,使用的时候更得心用手就显得尤为重要了. 本文主要介绍npp的基础设置,后期会不断 ...
- [python] Queue.Queue vs. collections.deque
https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque/717199#717199 Queue,Queu ...
- scrapy-redis+selenium+webdriver解决动态代理ip和user-agent的问题(全网唯一完整代码解决方案)
问题描述:在爬取一些反爬机制做的比较好的网站时,经常会遇见一个问题就网站代码是通过js写的,这种就无法直接使用一般的爬虫工具爬取,这种情况一般有两种解决方案 第一种:把js代码转为html代码,然后再 ...
- Amazon.com 购物 信用卡预售期
I understand and thanks for confirming. In this case, the $1.00 is not a charge. It is an authoriza ...
- python3【基础】-文件操作
1. python对文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件操作 关闭文件 现有如下文件: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧明. ...
- 王者荣耀交流协会Beta发布文案美工展示博客
logo: 我们的logo是蓝底白字,非常简洁大气的设计感,上面印有我们的软件名称,更好的直观的彰显了我们的主题.我们的软件就是要迎合使用者,给使用者更加方便快捷的工作体验,更好的衡量自己的时间分配. ...
- 王者荣耀交流协会-小组互评Alpha版本
小组分工如下: 1.探路者---贪吃蛇(测评人:王玉玲) 链接:http://www.cnblogs.com/WYLFZ/p/7805520.html http://www.cnblogs.co ...
- Android开发第二阶段(4)
今天:对按扭位置重新调整了一下布局了一下,改变了layout中见面的字体格式等等是其更美观. 明天:对图片的修改和替换.
- HDU 5496 Beauty of Sequence
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5496 Beauty of Sequence Problem Description Sequence ...