Ibatis 实现多对多映射

来源:互联网 发布:怎样关闭淘宝退款申请 编辑:程序博客网 时间:2024/06/06 04:43

1.创建表Factory(工厂),InwarehouseType(入厂类型),FactoryWarehouseBw(中间表,工厂和入场类型是多对多关系)

create table Factory

(

factoryid varchar(3)

factoryname varchar(20)

)

create table InwarehouseType

(

inwarehousetypeid varchar(3)

intwarehousetypename varchar(20)

)

create table FactoryWarehouseBw

(

factoryid varchar(3)

warehousetypeid varchar(3)

)

2.定义两个Factory,InWarehouseType两个JavaBean

public class Factory {

 private String factoryid;
 private String factoryname;
 
 private List<InWarehouseType> listwarehousetype=new ArrayList<InWarehouseType>();
 get,set略

}

public class InWarehouseType {

 private String typeid;
 private String typename;

 get,set略

}

3.定义Factory.xml

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

<!DOCTYPE sqlMap     
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"     
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="factory_space">


  <!-- 定义一个工厂类,一个工厂下有多个入厂类型 -->
  <typeAlias alias="factory" type="com.ibatis.bean.Factory"/>
  <typeAlias alias="inwarehousetype" type="com.ibatis.bean.InWarehouseType"/>

  <resultMap id="FactoryResult" class="factory">
    <result property="factoryid" column="factoryid" javaType="String" jdbcType="varchar"/>
    <result property="factoryname" column="factoryname" javaType="String" jdbcType="varchar"/>
    <result property="listwarehousetype" column="factoryid"
    javaType="java.util.List" jdbcType="varchar"
    select="factory_space.selectInwarehouseType"/>
   
  
  </resultMap>

 
  <!-- 返回结果为List
 
  -->
    <select id="selectFactoryByFactoryId" parameterClass="String" resultMap="FactoryResult">
   <![CDATA[
    select
     factoryid,
     factoryname
    from factory
    where factoryid = #factoryid#
    ]]>
  </select>
 
  <!--  有3个表Factory,InWarehouseType,FactoryWarehouseBw(是多对多关系) -->
  <select id="selectInwarehouseType" parameterClass="String" resultClass="inwarehousetype">
    <![CDATA[
    select intype.inwarehousetypeid as typeid,intype.inwarehousetypename as typename
    from InWarehouseType intype
    left join FactoryWarehouseBw bw
    on intype.inwarehousetypeid=bw.warehousetypeid
    where bw.inorout=1 and  bw.factoryid=#factoryid#
   
    ]]>
  </select>
 

 

</sqlMap>

4.生成测试类,调用即可

总结:集合必须使用List,用Set会报错

 

原创粉丝点击