Java基础-SSM之mybatis的树形控件(自关联)
Java基础-SSM之mybatis的树形控件(自关联)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.准备测试环境(创建数据库表)
1>.创建areas表;
use yinzhengjie; create table areas(id int primary key auto_increment , areaname varchar(30) , pid int) ;

2>.添加Maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.org.yinzhengjie</groupId>
<artifactId>Mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
</project>
二.编写自定义类(area.java)
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.mybatis.domain.self; import java.util.ArrayList;
import java.util.List; /**
* 自关联
*/
public class Area {
private Integer id ; private String areaName ;
//上级区域
private Area parentArea ; public Area(){
} public Area(String name){
this.areaName = name;
} private List<Area> children = new ArrayList<Area>(); public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getAreaName() {
return areaName;
} public void setAreaName(String areaName) {
this.areaName = areaName;
} public Area getParentArea() {
return parentArea;
} public void setParentArea(Area parentArea) {
this.parentArea = parentArea;
} public List<Area> getChildren() {
return children;
} public void setChildren(List<Area> children) {
this.children = children;
} //定义用于绑定关系的方法
public void addChildren(Area...areas){
for(Area a : areas){
this.getChildren().add(a) ;
a.setParentArea(this);
}
}
}
三.编写配置文件
1>.mybatis-config.xml 文件内容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:5200/yinzhengjie"/>
<property name="username" value="root"/>
<property name="password" value="yinzhengjie"/>
</properties> <!-- 我们使用typeAliases标签给我们自定义类起个别名。-->
<typeAliases>
<typeAlias type="cn.org.yinzhengjie.mybatis.domain.self.Area" alias="_Area" />
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 我们使用mapper标签指定映射文件,使用resource指定具体的路径,如果没有写绝对路径,默认的根路径就在resources目录中-->
<mapper resource="AreaMapper.xml"/>
</mappers>
</configuration>
2>.AreaMapper.xml 文件内容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 定义名字空间 -->
<mapper namespace="areas">
<!-- useGeneratedKeys的值为true时,表示需要使用数据库深层的keys,同时我们需要指定使用哪个深层的key。而指定具体使用哪个key我们使用keyProperty来定义! -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into areas(areaname,pid) values(#{areaName}, #{parentArea.id}) ;
</insert> <select id="selectOne" resultMap="rm_Area">
select
s.id sid ,
s.areaname sname ,
p.id pid ,
p.areaname pname,
c.id cid ,
c.areaname cname
from
areas s
left outer join areas p on p.id = s.pid
left outer join areas c on s.id = c.pid
where
s.id = #{id} ;
</select> <resultMap id="rm_Area" type="_Area">
<id column="sid" property="id" />
<result column="sname" property="areaName" />
<association column="pid" property="parentArea" javaType="_Area">
<id column="pid" property="id"/>
<result column="pname" property="areaName"/>
</association>
<collection property="children" ofType="_Area" column="sid">
<id column="cid" property="id"/>
<result column="cname" property="areaName"/>
</collection>
</resultMap>
</mapper>
四.编写测试代码
1>.编写测试代码如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.mybatis.test; import cn.org.yinzhengjie.mybatis.domain.self.Area;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import java.io.InputStream;
import java.util.List; /**
* 测试自关联
*/
public class TestSelf {
@Test
public void testInsertCustomer() throws Exception {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);
SqlSession sess = sf.openSession();
Area china = new Area("zhongguo") ;
Area bj = new Area("beijing") ;
Area hb = new Area("hebeisheng") ;
Area haidian = new Area("haidian") ;
Area chaoyang = new Area("chaoyang") ;
Area shijiangzhuang = new Area("shijiangzhuang") ;
Area handan = new Area("handan") ;
Area guangfugucheng = new Area("guangfugucheng-1") ;
Area wahuanggong = new Area("wahuanggong-2") ; //绑定关联关系
china.addChildren(bj,hb);
bj.addChildren(haidian,chaoyang);
hb.addChildren(shijiangzhuang,handan);
handan.addChildren(guangfugucheng,wahuanggong); //往数据库中插入数据
sess.insert("areas.insert" , china);
sess.insert("areas.insert" , bj);
sess.insert("areas.insert" , hb);
sess.insert("areas.insert" , haidian);
sess.insert("areas.insert" , chaoyang);
sess.insert("areas.insert" , shijiangzhuang);
sess.insert("areas.insert" , handan);
sess.insert("areas.insert" , guangfugucheng);
sess.insert("areas.insert" , wahuanggong); //提交事物
sess.commit();
sess.close(); System.out.println("数据插入成功!");
} @Test
public void testSelectOne() throws Exception {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);
SqlSession sess = sf.openSession();
Area obj = sess.selectOne("areas.selectOne" , 2) ;
List<Area> children = obj.getChildren();
for (Area child : children) {
System.out.println(child.getAreaName());
}
sess.commit();
sess.close();
}
}
2>.查询数据库执行结果如下:

Java基础-SSM之mybatis的树形控件(自关联)的更多相关文章
- Java基础-SSM之mybatis的统计函数和分页查询
Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-SSM之mybatis一对一关联
Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbands和wifes表并建 ...
- Java基础-SSM之mybatis多对多关联
Java基础-SSM之mybatis多对多关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建teas,stus,links表 u ...
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
- Java基础-SSM之mybatis一对一外键关联
Java基础-SSM之mybatis一对一外键关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbandsfk和wife ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例
Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...
- Java基础-SSM之Spring和Mybatis整合案例
Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...
- SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题
转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...
随机推荐
- web项目_学生证管理系统
项目简述: 基于java web实现学生卡管理系统,用户包括学生和学生处,分别实现以下功能. 学生: 1.对本人登录密码的修改 2.申请补办学生卡 3.查看学生卡补办状态 学生处: 1.对学生信息的管 ...
- 物理机通过http访问eNSP虚拟Server
由于测试需要,本文主要通过一个简单的例子介绍通过物理机的浏览器访问华为eNSP虚拟Server,访问网页. 1.首先配置虚拟网卡的地址 2.通过华为的eNSP模拟软件,做出如下拓扑结构图,配置地址如图 ...
- 树莓派3b安装Nginx和php7和百度语音合成模块
1.安装sox系统mp3音频播放模块(项目需要) sudo apt-get install lame sudo apt-get install sox sudo apt-get install lib ...
- PAT甲题题解-1112. Stucked Keyboard (20)-(map应用)
题意:给定一个k,键盘里有些键盘卡住了,按一次会打出k次,要求找出可能的坏键,按发现的顺序输出,并且输出正确的字符串顺序. map<char,int>用来标记一个键是否为坏键,一开始的时候 ...
- 【MOOC EXP】Linux内核分析实验一报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [反汇编一个简单的C程序] 实验 ...
- 第二阶段站立会议alpha版总结
一.会议过程 在完成第二次冲刺后,Alpha版本最终发布,我们对校园二手交易平台开发过程及产品存在的问题进行了激烈讨论.进行了我们的团队总结会议,会议中每个人先发表了个人对Alpha版开发过程中存在的 ...
- Team Work Ⅱ
Regal-Lighting团队设计 分工思考 本次大作业我的分工定位是:Unit及子类,主要设计实现建筑类的功能. 首先王者光耀这款游戏所需要的建筑分为三类: 1.防御塔:有一定的血量,血量为0时破 ...
- ios UnitTest 学习笔记
一.运行第一个单元测试: 1.在Xcode 5中新建一个工程默认自带一个单元测试的文件夹,IDE自动生成了一个实现XCTestCase的.m文件,里面有一个失败测试(早期版本中实现的是SenTestC ...
- beta4
吴晓晖(组长) 过去两天完成了哪些任务 昨天FloatingActionButton和权限获取调整 今天复习,没写东西,晚点有空了写 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还 ...
- OpenFlow 1.3 控制器与交换机的交互,以及拓扑发现
前言 最近纠结于控制器如何发现拓扑,于是就翻起了OpenFlow 1.3进行查看,以及一些相关协议 OF 1.3 安全通道,即交互消息 OpenFlow Switch Specification 1. ...