1.自己的第一篇博客,想把自己的觉得有用的记录下来,也可以锻炼自己的表达能力。内容谈不上丰富,如果写的不好,请大家多多包涵。
2.废话不多说,就是干,先准备下脚本
drop TABLE IF EXISTS category;
CREATE TABLE `category` (
`id` int(11) NOT NULL,
`pid` int(11) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO category VALUES (1,0,'手机');
INSERT INTO category VALUES (2,0,'电脑');
INSERT INTO category VALUES (3,1,'苹果手机');
INSERT INTO category VALUES (4,1,'三星手机');
INSERT INTO category VALUES (5,2,'笔记本');
INSERT INTO category VALUES (6,2,'台式机');
INSERT INTO category VALUES (7,3,'iphone6');
INSERT INTO category VALUES (8,3,'iphone7');
SELECT * FROM category;
----2.1 新建一个品类表,插入几条记录,id不能重复,每条数据都是id,pid这种形式
3.新建一个Java项目
----3.1 引入mysql-connector-java-5.1.6
----3.2 新建实体category.java
public class Category {
private Integer id;
private Integer pid;
private String name;
private List<Category> childList;// 子集合
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Category> getChildList() {
return childList;
}
public void setChildList(List<Category> childList) {
this.childList = childList;
}
@Override
public String toString(){
return "id:" + id +",pid:" + pid +",name:" + name +",childList:" + childList+"";
}
-----3.3测试类test.java
public class Test {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
stmt = conn.createStatement();
String sql = "select id,pid,name from category";
ResultSet rs = stmt.executeQuery(sql);
List<Category> list = new ArrayList<Category>();
while (rs.next()) {
Category cate = new Category();
cate.setId(rs.getInt("id"));
cate.setPid(rs.getInt("pid"));
cate.setName(rs.getString("name"));
list.add(cate);
}
//递归方法
list = dgCategoryList(list,1);//查询手机下面的
System.out.println(list);
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 递归方法(品类递归)
*
* @param categoryList
* @param parentId
* @return
*/
private static List<Category> dgCategoryList(List<Category> categoryList, Integer parentId)
{
List<Category> childList = new ArrayList<Category>();
for (Category c : categoryList)
{
if (null != c && null != c.getId() && null != c.getPid())
{
int id = c.getId();
int pid = c.getPid();
if (parentId==pid)
{
List<Category> childs = dgCategoryList(categoryList, id);
c.setChildList(childs);
childList.add(c);
}
}
}
return childList;
}
}
-----3.4控制台打印
结果:手机下面有苹果手机和三星手机,苹果手机有iphone6,iphone7,三星手机下面没有。
总结:数据库里的记录是id和父pid的数据,而业务需要是把某一个品类所有的子品类及子品类下面包含的。这个时候在内存中做递归