mybatis--关联关系

mybatis  关联关系

    我这里有   用户表(id    username)

                     家庭住址(id address userid)userid 是用户表的id

一.多对一关系:

   1. entity实体类:

package cn.happy.entity;

import java.util.ArrayList;
import java.util.List;

public class DeptOne {
    private Integer id;//用户编号
    private String userName;//用户名
    private Coder code;//用户住址表

    public Coder getCode() {
        return code;
    }

    public void setCode(Coder code) {
        this.code = code;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

  

package cn.happy.entity;

import java.util.ArrayList;
import java.util.List;

public class Coder {
    private Integer id;//用户住址编号
    private Integer userid;//用户表id
    private String  address;//用户住址表
    private List<DeptOne> dept=new ArrayList<DeptOne>();//用户表集合

    public List<DeptOne> getDept() {
        return dept;
    }

    public void setDept(List<DeptOne> dept) {
        this.dept = dept;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

  2.dao层 和 他的 .xml 文件

      先写用户表的dao层和 .xml文件

package cn.happy.dao;

import cn.happy.entity.Dept;
import cn.happy.entity.DeptOne;

import java.util.List;

public interface IDeptOneDAO {
    public DeptOne getByno(int id);
}

  

<?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">
<!--映射文件的根节点
  namespace
-->
<mapper namespace="cn.happy.dao.IDeptOneDAO">
    <resultMap id="DeptMapper" type="DeptOne">
        <id column="id" property="id"></id>
        <result column="userName" property="userName"></result>
        <association property="code" javaType="Coder">
            <id column="id" property="id"></id>
            <result column="address" property="address"></result>
        </association>
    </resultMap>
    
<select id="getByno" resultMap="DeptMapper"> SELECT easybuy_user_address.id,address,easyby_user.id,userName FROM easyby_user,easybuy_user_address where easybuy_user_address.userid=easyby_user.id AND easyby_user.id=#{id} </select> </mapper>

  他的测试方法:

 @Test
    public void onefind() throws IOException {
        SqlSession session = sessionFactory.getSqlSession();
        IDeptOneDAO mapper = session.getMapper(IDeptOneDAO.class);
        DeptOne dept = mapper.getByno(1);
        System.out.println(dept.getUserName());
        System.out.println(dept.getCode().getAddress());
        session.close();
    }

 

    二。一对多 关联关系:

    dao层和xml文件:

package cn.happy.dao;

import cn.happy.entity.Coder;
import cn.happy.entity.DeptOne;

public interface ICoderOneDAO {
  //这是测试单挑sql 的方法
public Coder getByCoderId(int id);
  //这是测试多条sql的方法
public Coder getByMonyCoderId(int id);
}

    

<?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">
<!--映射文件的根节点
  namespace
-->
<mapper namespace="cn.happy.dao.ICoderOneDAO">
   
<!--一对多 多条sql-->
    <resultMap id="CoderMonyMapper" type="Coder">
        <id column="id" property="id"></id>
        <result column="address" property="address"></result>
        <collection property="dept" ofType="DeptOne" select="MonyFindById" column="id">
        </collection>
    </resultMap>
    <select id="MonyFindById" resultType="DeptOne">
        SELECT id,userName FROM easyby_user
        where id=#{id}
    </select>
    <select id="getByMonyCoderId" resultMap="CoderMonyMapper">
        SELECT id,address FROM easybuy_user_address
        where id=#{id}
    </select>




    <!--一对多 单条sql-->
    <resultMap id="CoderMapper" type="Coder">
        <id column="id" property="id"></id>
        <result column="address" property="address"></result>

        <collection property="dept" ofType="DeptOne">
            <id column="id" property="id"></id>
            <result column="userName" property="userName"></result>
        </collection>
    </resultMap>
    <select id="getByCoderId" resultMap="CoderMapper">
        SELECT easybuy_user_address.id,address,easyby_user.id,userName FROM easyby_user,easybuy_user_address
        where easybuy_user_address.userid=easyby_user.id AND easybuy_user_address.id=#{id}
    </select>

</mapper>

  单侧方法:

 //一对多 单个sql
    @Test
    public void monyfind() throws IOException {
        SqlSession session = sessionFactory.getSqlSession();
        ICoderOneDAO mapper = session.getMapper(ICoderOneDAO.class);
        Coder code = mapper.getByCoderId(2);
        System.out.println(code.getAddress());
        for (DeptOne dept: code.getDept()) {
            System.out.println(dept.getUserName());
        }
        session.close();
    }
//一对多 多个sql
    @Test
    public void getByMonyCoderId() throws IOException {
        SqlSession session = sessionFactory.getSqlSession();
        ICoderOneDAO mapper = session.getMapper(ICoderOneDAO.class);
        Coder code = mapper.getByMonyCoderId(1);
        System.out.println(code.getAddress());
        for (DeptOne dept: code.getDept()) {
            System.out.println(dept.getUserName());
        }
        session.close();
    }

  这两个方法的最后结果一样,知识发送的sql 语句不同。

三。自关联

  他的数据库如下:

    

CREATE TABLE `category` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(32) DEFAULT NULL,
  `pid` int(11) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

/*Data for the table `category` */

insert  into `category`(`cid`,`cname`,`pid`) values (1,'图书',0),(2,'服装',0),(3,'青年图书',1),(4,'少儿图书',1),(5,'期刊报纸',1),(6,'读者',3),(7,'12月份',6),(8,'12月份上半月',7),(9,'12月份下半月',7),(10,'11月份',6);

  实体类如下:

package cn.happy.entity;

import java.util.ArrayList;
import java.util.List;

public class Category {
    private Integer cid;//子级编号
    private String cname;//名字
    private  Integer pid;//父级编号
    private List<Category> cate=new ArrayList<Category>();//自关联(自己的一个集合)

    @Override
    public String toString() {
        return "Category{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                ", pid=" + pid +
                ", cate=" + cate +
                '}';
    }

    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 List<Category> getCate() {
        return cate;
    }

    public void setCate(List<Category> cate) {
        this.cate = cate;
    }
}

  dao层 和  xml 文件

package cn.happy.dao;

import cn.happy.entity.Category;
import cn.happy.entity.Coder;

import java.util.List;

public interface ICategoryDAO {
    public List<Category> getByCategoryId(int pid);

}

  

<?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">
<!--映射文件的根节点
  namespace
-->
<mapper namespace="cn.happy.dao.ICategoryDAO">
    <resultMap id="categoryMapper" type="Category">
        <id column="cid" property="cid"></id>
        <result column="cname" property="cname"></result>
        <collection property="cate" ofType="Category" select="getByCategoryId" column="cid">

        </collection>
    </resultMap>
    <select id="getByCategoryId" resultMap="categoryMapper">
        SELECT * FROM category where pid=#{pid}
    </select>


</mapper>

  测试方法:

 //自关联
    @Test
    public void ziguanlian() throws IOException {
        SqlSession session = sessionFactory.getSqlSession();
        ICategoryDAO mapper = session.getMapper(ICategoryDAO.class);
        List<Category> list = mapper.getByCategoryId(0);
        for (Category item:list ) {
            System.out.println(item.getCid()+"=="+item.getCname()+"=="+item.getPid()+":"+item.getCate());
            System.out.println(item+"//////");
            System.out.println("");
        }

        session.close();
    }

  

 

posted on 2017-09-21 20:17  蒙古码农  阅读(142)  评论(0编辑  收藏  举报