zoukankan      html  css  js  c++  java
  • mybatis之级联关系(一对一、一对多)

    0. 表结构

    1. 准备工作

        1.1 配置文件等信息,请参考  myBatis之入门示例

        1.2 entity

      1.2.1 TPersonInfo.java

    package com.blueStarWei.entity;
    
    public class TPersonInfo {
        
        private Integer id;
        private String name;
        private Integer age;
        private Address address;
        
        //setter & getter
        
        @Override
        public String toString() {
            return "TPersonInfo [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
        }
        
    }

           1.2.2 Address.java

    package com.blueStarWei.entity;
    
    public class Address {
        
        private int id;
        private String country;
        private String city;
        
        //setter & getter
        
        @Override
        public String toString() {
            return "Address [country=" + country + ", city=" + city + "]";
        }
        
    }

    2 一对一关系(Maper)

        2.1 方法一:

            2.1.1 PersonAddressMapper.java

    package com.blueStarWei.mappers;
    
    import java.util.List;
    
    import com.blueStarWei.entity.TPersonInfo;
    
    public interface PersonAddressMapper {
        
        List<TPersonInfo> findAllWithAddress();
    }

             2.1.2 PersonAddressMapper.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="com.blueStarWei.mappers.PersonAddressMapper">
        
        <select id="findAllWithAddress" resultMap="personResult">
            SELECT t1.*,t2.* FROM t_person_info t1 JOIN t_address t2 ON t2.id = t1.addressid 
        </select>
        
        <resultMap type="TPersonInfo" id="personResult">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="age" column="age"/>
            <association property="address" resultMap="addressResult"/>
        </resultMap>
        
        <resultMap type="Address" id="addressResult">
            <id property="id" column="id"/>
            <result property="country" column="country"/>
            <result property="city" column="city"/>
        </resultMap>
    
    </mapper> 

        2.2 方法二【推荐】

            2.2.1 AddressMapper.java

    package com.blueStarWei.mappers;
    
    import com.blueStarWei.entity.Address;
    
    public interface AddressMapper {
    
        public Address findById(Integer id);
    }

            2.2.2 AddressMapper.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="com.blueStarWei.mappers.AddressMapper">
        
        <select id="findById" parameterType="Integer" resultMap="addressResult">
            SELECT * FROM t_address t where t.id = #{id}
        </select>
        
        <resultMap type="Address" id="addressResult">
            <id property="id" column="id"/>
            <result property="country" column="country"/>
            <result property="city" column="city"/>
        </resultMap>
    
    </mapper> 

            2.2.3 PersonMapper.java

    package com.blueStarWei.mappers;
    
    import java.util.List;
    
    import com.blueStarWei.entity.TPersonInfo;
    
    public interface PersonMapper {
    
        TPersonInfo findById(Integer id);
        
        List<TPersonInfo> findAll();
    }

            2.2.4 PersonMapper.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="com.blueStarWei.mappers.PersonMapper">
        
        <select id="findById" parameterType="Integer" resultMap="personResult">
            select * from t_person_info a where a.id = #{id}
        </select>
        
        <select id="findAll" resultMap="personResult">
            select * from t_person_info
        </select>
        
        <resultMap type="TPersonInfo" id="personResult">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="age" column="age"/>
            <association property="address" column="addressid" 
                select="com.blueStarWei.mappers.AddressMapper.findById"/>
        </resultMap>
        
    </mapper> 

        2.3. 总结:

            方法一是使用级联的方式查找出需要的所有信息,然后将结果返回到对应的entity类中,方法二是通过外键关联的方式返回结果。方法二在开发过程中被推荐时间,因为其具有代码高复用性。

    3 一对多关系

        3.1 Family.java

    package com.blueStarWei.entity;
    
    import java.util.List;
    
    public class Family {
    
        private Integer id;
        private String familyCode;
        private List<TPersonInfo> persons;
        
        //setter & getter
    
        @Override
        public String toString() {
            return "Family [id=" + id + ", familyCode=" + familyCode + ", persons=" + persons + "]";
        }
        
    }

        3.2 FamilyMapper.java

    package com.blueStarWei.mappers;
    
    import com.blueStarWei.entity.Family;
    
    public interface FamilyMapper {
    
        Family findById(Integer id);
        
    }

        3.3 FamilyMapper.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="com.blueStarWei.mappers.FamilyMapper">
        
        <select id="findById" parameterType="Integer" resultMap="familyResult">
            SELECT * FROM t_family t where t.id = #{id}
        </select>
        
        <resultMap type="Family" id="familyResult">
            <id property="id" column="id"/>
            <result property="familyCode" column="familyCode"/>
            <collection property="persons" column="id" select="com.blueStarWei.mappers.PersonMapper.findByFamilyId"/>
        </resultMap>
    
    </mapper> 

        3.4 PersonMapper.java

    package com.blueStarWei.mappers;
    
    import java.util.List;
    
    import com.blueStarWei.entity.TPersonInfo;
    
    public interface PersonMapper {
    
        List<TPersonInfo> findByFamilyId(Integer familyId);
    }

        3.5 PersonMapper.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="com.blueStarWei.mappers.PersonMapper">
        
        <select id="findByFamilyId" parameterType="Integer" resultMap="personResult">
            select * from t_person_info a where a.familyId = #{familyId}
        </select>
        
        <resultMap type="TPersonInfo" id="personResult">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="age" column="age"/>
            <association property="address" column="addressid" 
                select="com.blueStarWei.mappers.AddressMapper.findById"/>
        </resultMap>
        
    </mapper> 
  • 相关阅读:
    Python之路【第七十一篇】:django日更
    Python之路【第七十篇】:django日更
    Python之路【第六十九篇】:django日更
    选包
    Python之路【第六十八篇】:django日更
    Python之路【第六十七篇】:django日更
    Python之路【第六十六篇】:django日更
    Python之路【第六十五篇】:django日更
    Python之路【第六十四篇】:django日更
    Python之路【第六十三篇】:django日更
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/9160437.html
Copyright © 2011-2022 走看看