Today's harvest !!!
今天将Mybatis的视频看到了第60集,其之前讲解了自表的主外键查询.
例如一个新闻表中,有一级栏目,二级栏目,三级栏目,其中二级栏目的pid为一级栏目的id,如此种种.
而今天做的小项目中使用了 easyui 这个前端框架来做后端数据的解析.
看了下SpringBoot入门以及IDEA创建SpringBoot项目.
SpringBoot又把SSM框架简化了.
MyBatis的自表分层查询很简单.
如上表, 在id 1 上是name: 娱乐新闻, 其pid为0. 表示这是第一级栏目.
之后看看pid为1的 港台明星和内地影视, 这是二级栏目. 同样 pid 为 2 的NBA和CBA是二级栏目,
三级栏目的话是它的上级还有上级,例如火箭,湖人,它们pid为3,而 id 为 3 的是NBA, NBA的pid为 2. 而2已经是最上层栏目.
(将这种分层栏目利用继承去理解更好理解,而一般网站构建中适度分层,三层就可以了.)
基本测试用的分层结构
beans中的新闻实体:
package com.ykmimi.beans;
/*
* 新闻栏目:当前的新闻栏目被看作是一方,即父栏目
*/ import java.util.Set; public class NewsLabel {
private Integer id;
private String name;//栏目名称 //子栏目
private Set<NewsLabel> children;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<NewsLabel> getChildren() {
return children;
}
public void setChildren(Set<NewsLabel> children) {
this.children = children;
}
@Override
public String toString() {
return "NewsLabel>> id:"+id+",name:"+name+",children:"+children;
}
}
之后分别是dao的接口和mapper.xml
package com.ykmimi.dao; import java.util.List; import com.ykmimi.beans.NewsLabel; public interface INewsLabelDao {
List<NewsLabel> selectChildrenByParent(int pid);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ykmimi.dao.INewsLabelDao">
<!--
<select id="" resultMap="NewsLabelMapper">
select id,name from newslabel where pid = #{ news_id }
</select>
-->
<resultMap type="NewsLabel" id="NewsLabelMapper">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="children"
ofType="NewsLabel"
select="selectChildrenByParent"
column="id"/>
</resultMap> <select id="selectChildrenByParent" resultMap="NewsLabelMapper">
select id,name from newslabel where pid = #{ news_id }
</select> </mapper>
最重要的就是mapper中的设置,其resultMap中的collection的column="id"其实是调用了自身的查询到的id.并一直递归查询直到查询到null
当传入参数2. 其查询pid为2的两个数据库元组,查询到后,继续执行该select语句,此时获取到的id又成为了参数进行了查询.
最终获得:
NewsLabel>> id:3,name:NBA,children:[NewsLabel>> id:6,name:湖人,children:[], NewsLabel>> id:5,name:火箭,children:[]]
NewsLabel>> id:4,name:CBA,children:[NewsLabel>> id:7,name:北京金隅,children:[], NewsLabel>> id:8,name:浙江广厦,children:[], NewsLabel>> id:9,name:青岛双星,children:[]]
-----------------------------------------下面是返回一个对象,该对象封装了多个表数据的自查询形式
同样的项目构建,实体类做了变更:
package com.ykmimi.beans;
/*
* 新闻栏目:当前的新闻栏目被看作是一方,即父栏目
*/ public class NewsLabel {
private Integer id;
private String name;//栏目名称 //父栏目
private NewsLabel parent; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public NewsLabel getParent() {
return parent;
}
public void setParent(NewsLabel parent) {
this.parent = parent;
} @Override
public String toString() { return "newslabel->:"+id+","+name+","+">>"+"parent:"+parent;
} }
dao接口的方法:
//查询指定栏目及其所有子孙栏目
NewsLabel selectNewsLabelById(int id);
并且mapper.xml的方法更改了:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ykmimi.dao.INewsLabelDao"> <!-- ↓查询所有的内容包括父栏目 TotalNewsLabelMapper--> <resultMap type="NewsLabel" id="TotalNewsLabelMapper">
<id column="id" property="id"/>
<result column="name" property="name"/>
<association property="parent"
javaType="NewsLabel"
select="selectNewsLabelById"
column="pid"/> </resultMap> <select id="selectNewsLabelById" resultMap="TotalNewsLabelMapper">
select id,name,pid from newslabel where id = #{ get_id }
</select> </mapper>
@Test
public void test02() {
NewsLabel newslabel = dao.selectNewsLabelById(7);
System.out.println(newslabel);
}
结果为:自身及父栏目实例
newslabel->:7,北京金隅,>>parent:newslabel->:4,CBA,>>parent:newslabel->:2,体育新闻,>>parent:null
待更 自查询 多对一
Today's harvest !!!的更多相关文章
- hdu多校第4场 B Harvest of Apples(莫队)
Problem B. Harvest of Apples Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Su ...
- HDU 6333 Harvest of Apples (分块、数论)
题目连接:Harvest of Apples 题意:给出一个n和m,求C(0,n)+C(1,n)+.....+C(m,n).(样例组数为1e5) 题解:首先先把阶乘和逆元预处理出来,这样就可O(1)将 ...
- 2018 Multi-University Training Contest 4 Problem B. Harvest of Apples 【莫队+排列组合+逆元预处理技巧】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 Problem B. Harvest of Apples Time Limit: 4000/200 ...
- HDU 6333.Problem B. Harvest of Apples-组合数C(n,0)到C(n,m)求和-组合数学(逆元)+莫队 ((2018 Multi-University Training Contest 4 1002))
2018 Multi-University Training Contest 4 6333.Problem B. Harvest of Apples 题意很好懂,就是组合数求和. 官方题解: 我来叨叨 ...
- Harvest of Apples
问题 B: Harvest of Apples 时间限制: 1 Sec 内存限制: 128 MB提交: 18 解决: 11[提交] [状态] [讨论版] [命题人:admin] 题目描述 Ther ...
- hdu6333 Harvest of Apples 离线+分块+组合数学(求组合数模板)
Problem B. Harvest of Apples Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- hdu6333 Problem B. Harvest of Apples(组合数+莫队)
hdu6333 Problem B. Harvest of Apples 题目传送门 题意: 求(0,n)~(m,n)组合数之和 题解: C(n,m)=C(n-1,m-1)+C(n-1,m) 设 ...
- 2018年多校第四场第二题 B. Harvest of Apples hdu6333
题意:给定10^5以内的n,m求∑组合数(n,i),共10^5组数据. 题解: 定义 S(n, m) = \sum_{i = 0} ^ {m} {n \choose i}S(n,m)=∑i=0m ...
- HDU6333 Harvest of Apples (杭电多校4B)
这莫队太强啦 先推公式S(n,m)表示从C(n, 0) 到 C(n, m)的总和 1.S(n, m) = S(n, m-1) + C(n, m) 这个直接可以转移得到 2.S(n, m) = ...
- Problem B. Harvest of Apples HDU - 6333(莫队)
Problem Description There are n apples on a tree, numbered from 1 to n.Count the number of ways to p ...
随机推荐
- Linux命令学习之xargs命令
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数.xargs也可以将 ...
- WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- 什么是runtime?什么是webgl?
一 什么是Runtime? Egret官方解释:https://www.egret.com/products/runtime.html 二.什么是WebGL渲染? egret官方解释:http://d ...
- SpringBoot系列教程起步
本篇学习目标 Spring Boot是什么? 构建Spring Boot应用程序 三分钟开发SpringBoot应用程序 本章源码下载 Spring Boot是什么? spring Boot是由Piv ...
- 其他ip无法访问Yii的gii,配置ip就可以
该文件下的IP ///public $allowedIPs = ['127.0.0.1', '::1']; 修改这里的IP就可以了
- mysql数据库多源复制方案
概述 由于目前生产环境的mysql数据库分布在两台服务器,若从单一主从来看,配置很简单,但是需要将两台服务器的数据库同步到一台从库上面,需要进行更多配置和注意事项.多源复制有两种方案,Binlog+P ...
- Servlet + JSP 时代
Spring,Django,Rails,Express这些框架技术的出现都是为了解决什么问题,现在这些框架都应用在哪些方面? - 知乎 https://www.zhihu.com/question/2 ...
- 多线程下载图片,滑动tableView崩溃--资源抢夺问题
最近练习使用NSoperation模拟SDWebImage下载图片,发生了崩溃的问题,还专门写博客记录这件事情: http://www.cnblogs.com/tufei7/p/7074030.htm ...
- talib 中文文档(七):Overlap Studies Functions
Overlap Studies Functions 重叠指标 BBANDS - Bollinger Bands 函数名:BBANDS 名称: 布林线指标 简介:其利用统计原理,求出股价的标准差及其信赖 ...
- Python并行编程(十二):进程同步
1.基本概念 多个进程可以协同工作来完成一项任务,通常需要共享数据.所以在多进程之间保持数据的一致性就很重要,需要共享数据协同的进程必须以适当的策略来读写数据.同步原语和线程的库类似. - Lock: ...