Java基础-SSM之mybatis的树形控件(自关联)

java

           Java基础-SSM之mybatis的树形控件(自关联)

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.准备测试环境(创建数据库表)

1>.创建areas表;

use yinzhengjie;

create table areas(id int primary key auto_increment , areaname varchar(30) , pid int) ;

 2>.添加Maven依赖

 1 <?xml version="1.0" encoding="UTF-8"?>

2 <project xmlns="http://maven.apache.org/POM/4.0.0"

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

5 <modelVersion>4.0.0</modelVersion>

6 <groupId>cn.org.yinzhengjie</groupId>

7 <artifactId>Mybatis</artifactId>

8 <version>1.0-SNAPSHOT</version>

9 <dependencies>

10 <dependency>

11 <groupId>junit</groupId>

12 <artifactId>junit</artifactId>

13 <version>4.11</version>

14 </dependency>

15 <dependency>

16 <groupId>mysql</groupId>

17 <artifactId>mysql-connector-java</artifactId>

18 <version>5.1.17</version>

19 </dependency>

20 <dependency>

21 <groupId>org.mybatis</groupId>

22 <artifactId>mybatis</artifactId>

23 <version>3.2.1</version>

24 </dependency>

25 </dependencies>

26 </project>

二.编写自定义类(area.java)

 1 /*

2 @author :yinzhengjie

3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com

5 */

6 package cn.org.yinzhengjie.mybatis.domain.self;

7

8 import java.util.ArrayList;

9 import java.util.List;

10

11

12 /**

13 * 自关联

14 */

15 public class Area {

16 private Integer id ;

17

18 private String areaName ;

19 //上级区域

20 private Area parentArea ;

21

22 public Area(){

23 }

24

25 public Area(String name){

26 this.areaName = name;

27 }

28

29 private List<Area> children = new ArrayList<Area>();

30

31 public Integer getId() {

32 return id;

33 }

34

35 public void setId(Integer id) {

36 this.id = id;

37 }

38

39 public String getAreaName() {

40 return areaName;

41 }

42

43 public void setAreaName(String areaName) {

44 this.areaName = areaName;

45 }

46

47 public Area getParentArea() {

48 return parentArea;

49 }

50

51 public void setParentArea(Area parentArea) {

52 this.parentArea = parentArea;

53 }

54

55 public List<Area> getChildren() {

56 return children;

57 }

58

59 public void setChildren(List<Area> children) {

60 this.children = children;

61 }

62

63 //定义用于绑定关系的方法

64 public void addChildren(Area...areas){

65 for(Area a : areas){

66 this.getChildren().add(a) ;

67 a.setParentArea(this);

68 }

69 }

70 }

三.编写配置文件

1>.mybatis-config.xml 文件内容

 1 <?xml version="1.0" encoding="UTF-8" ?>

2 <!DOCTYPE configuration

3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

4 "http://mybatis.org/dtd/mybatis-3-config.dtd">

5 <configuration>

6 <properties>

7 <property name="driver" value="com.mysql.jdbc.Driver"/>

8 <property name="url" value="jdbc:mysql://localhost:5200/yinzhengjie"/>

9 <property name="username" value="root"/>

10 <property name="password" value="yinzhengjie"/>

11 </properties>

12

13 <!-- 我们使用typeAliases标签给我们自定义类起个别名。-->

14 <typeAliases>

15 <typeAlias type="cn.org.yinzhengjie.mybatis.domain.self.Area" alias="_Area" />

16 </typeAliases>

17

18 <environments default="development">

19 <environment id="development">

20 <transactionManager type="JDBC"/>

21 <dataSource type="POOLED">

22 <property name="driver" value="${driver}"/>

23 <property name="url" value="${url}"/>

24 <property name="username" value="${username}"/>

25 <property name="password" value="${password}"/>

26 </dataSource>

27 </environment>

28 </environments>

29 <mappers>

30 <!-- 我们使用mapper标签指定映射文件,使用resource指定具体的路径,如果没有写绝对路径,默认的根路径就在resources目录中-->

31 <mapper resource="AreaMapper.xml"/>

32 </mappers>

33 </configuration>

2>.AreaMapper.xml 文件内容

 1 <?xml version="1.0" encoding="UTF-8" ?>

2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

4 <!-- 定义名字空间 -->

5 <mapper namespace="areas">

6 <!-- useGeneratedKeys的值为true时,表示需要使用数据库深层的keys,同时我们需要指定使用哪个深层的key。而指定具体使用哪个key我们使用keyProperty来定义! -->

7 <insert id="insert" useGeneratedKeys="true" keyProperty="id">

8 insert into areas(areaname,pid) values(#{areaName}, #{parentArea.id}) ;

9 </insert>

10

11 <select id="selectOne" resultMap="rm_Area">

12 select

13 s.id sid ,

14 s.areaname sname ,

15 p.id pid ,

16 p.areaname pname,

17 c.id cid ,

18 c.areaname cname

19 from

20 areas s

21 left outer join areas p on p.id = s.pid

22 left outer join areas c on s.id = c.pid

23 where

24 s.id = #{id} ;

25 </select>

26

27 <resultMap id="rm_Area" type="_Area">

28 <id column="sid" property="id" />

29 <result column="sname" property="areaName" />

30 <association column="pid" property="parentArea" javaType="_Area">

31 <id column="pid" property="id"/>

32 <result column="pname" property="areaName"/>

33 </association>

34 <collection property="children" ofType="_Area" column="sid">

35 <id column="cid" property="id"/>

36 <result column="cname" property="areaName"/>

37 </collection>

38 </resultMap>

39 </mapper>

四.编写测试代码

1>.编写测试代码如下:

 1 /*

2 @author :yinzhengjie

3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com

5 */

6 package cn.org.yinzhengjie.mybatis.test;

7

8 import cn.org.yinzhengjie.mybatis.domain.self.Area;

9 import org.apache.ibatis.io.Resources;

10 import org.apache.ibatis.session.SqlSession;

11 import org.apache.ibatis.session.SqlSessionFactory;

12 import org.apache.ibatis.session.SqlSessionFactoryBuilder;

13 import org.junit.Test;

14

15 import java.io.InputStream;

16 import java.util.List;

17

18 /**

19 * 测试自关联

20 */

21 public class TestSelf {

22 @Test

23 public void testInsertCustomer() throws Exception {

24 InputStream in = Resources.getResourceAsStream("mybatis-config.xml");

25 SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);

26 SqlSession sess = sf.openSession();

27 Area china = new Area("zhongguo") ;

28 Area bj = new Area("beijing") ;

29 Area hb = new Area("hebeisheng") ;

30 Area haidian = new Area("haidian") ;

31 Area chaoyang = new Area("chaoyang") ;

32 Area shijiangzhuang = new Area("shijiangzhuang") ;

33 Area handan = new Area("handan") ;

34 Area guangfugucheng = new Area("guangfugucheng-1") ;

35 Area wahuanggong = new Area("wahuanggong-2") ;

36

37 //绑定关联关系

38 china.addChildren(bj,hb);

39 bj.addChildren(haidian,chaoyang);

40 hb.addChildren(shijiangzhuang,handan);

41 handan.addChildren(guangfugucheng,wahuanggong);

42

43

44 //往数据库中插入数据

45 sess.insert("areas.insert" , china);

46 sess.insert("areas.insert" , bj);

47 sess.insert("areas.insert" , hb);

48 sess.insert("areas.insert" , haidian);

49 sess.insert("areas.insert" , chaoyang);

50 sess.insert("areas.insert" , shijiangzhuang);

51 sess.insert("areas.insert" , handan);

52 sess.insert("areas.insert" , guangfugucheng);

53 sess.insert("areas.insert" , wahuanggong);

54

55 //提交事物

56 sess.commit();

57 sess.close();

58

59 System.out.println("数据插入成功!");

60 }

61

62 @Test

63 public void testSelectOne() throws Exception {

64 InputStream in = Resources.getResourceAsStream("mybatis-config.xml");

65 SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(in);

66 SqlSession sess = sf.openSession();

67 Area obj = sess.selectOne("areas.selectOne" , 2) ;

68 List<Area> children = obj.getChildren();

69 for (Area child : children) {

70 System.out.println(child.getAreaName());

71 }

72 sess.commit();

73 sess.close();

74 }

75 }

2>.查询数据库执行结果如下:

以上是 Java基础-SSM之mybatis的树形控件(自关联) 的全部内容, 来源链接: utcz.com/z/390108.html

回到顶部