zoukankan      html  css  js  c++  java
  • mybatis中resultMap嵌套list的写法(两种)

    方式一:
    代码复用性高, 主表分页查询正确(主表分页查询时,子表会将所有的数据查询出来)

    QuestionMapper.xml

    <mapper namespace="com.xxx.modules.xxx.mapper.QuestionMapper">

    <resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.Question" >
    <id column="id" property="id" jdbcType="VARCHAR" />
    <result column="content" property="content" jdbcType="VARCHAR" />
    <result column="type" property="type" jdbcType="VARCHAR" />
    <result column="sort" property="sort" jdbcType="INTEGER" />
    <collection property="options" javaType="java.util.ArrayList" ofType="com.xxx.modules.xxx.entity.QuestionOption"
    select="com.xxx.modules.xxx.mapper.QuestionOptionMapper.selectList" column="{qid=id,sort=sort}" />
    <!-- qid/sort是定义的变量名, id/sort是主表的字段id/sort,
    先查出主表的结果, 然后主表记录数是几 就执行几次 collection 的select,
    javaType和ofType 写不写都行,
    select的值: 对应xml的namespace + 对应xml中的代码片段的id,
    column作为select语句的参数传入,如果只传一个参数id可以简写: column="id" -->
    </resultMap>

    <!-- 查询列表 -->
    <select id="selectList" resultMap="BaseResultMap">
    SELECT
    pq.id, pq.content, pq.type, pq.sort
    FROM
    question AS pq
    <where>
    </where>
    </select>
    QuestionOptionMapper.xml

    <mapper namespace="com.xxx.modules.xxx.mapper.QuestionOptionMapper">

    <!-- 查询列表 -->
    <select id="selectList" resultType="QuestionOption">
    SELECT
    pqo.id, pqo.content, pqo.sort
    FROM
    question_option AS pqo
    <where>
    pqo.qid = #{qid} <!-- 变量名 qid 对应上文的 qid -->
    <!-- 如果上文中 collection只传一个参数column="id",只要类型匹配,在这里随便写个变量名就可以取到值 #{xyz} -->
    </where>
    </select>

    方式二:

    只需要执行一次sql查询, 主表分页查询不正确(会查询出所有的笛卡尔积,根据分页直接截取,可能会导致子表数据缺失的问题)

    QuestionMapper.xml

    <mapper namespace="com.xxx.modules.xxx.mapper.QuestionMapper">

    <resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.Question" >
    <id column="id" property="id" jdbcType="VARCHAR" />
    <result column="content" property="content" jdbcType="VARCHAR" />
    <result column="type" property="type" jdbcType="VARCHAR" />
    <result column="sort" property="sort" jdbcType="INTEGER" />
    <collection property="options" javaType="java.util.ArrayList" ofType="com.xxx.modules.data.entity.QuestionOption">
    <id column="oid" property="id" jdbcType="VARCHAR" />
    <result column="ocontent" property="content" jdbcType="VARCHAR" />
    <result column="osort" property="sort" jdbcType="INTEGER" />
    </collection>
    <!-- 列的别名 oid,ocontent,osort , 起别名是因为主子表都有这几个字段
    这里要写 ofType, javaType还是可以不写 -->
    </resultMap>

    <!-- 查询列表 -->
    <select id="selectList" resultMap="BaseResultMap">
    SELECT
    pq.id, pq.content, pq.type, pq.sort
    ,pqo.id AS oid ,pqo.content AS ocontent ,pqo.sort AS osort <!-- 联查子表字段,起别名 -->
    FROM
    question AS pq
    LEFT JOIN question_option pqo ON pq.id = pqo.qid <!-- 联查子表 -->
    <where>
    </where>
    </select>


    注意: 主子表要查询出来的字段名重复,要起别名

    地址:https://blog.csdn.net/lzxomg/article/details/89739651

    此博客只是为了记忆相关知识点,大部分为网络上的文章,在此向各个文章的作者表示感谢!
  • 相关阅读:
    接口测试(基础知识)
    MapReduce的方式进行HBase向HDFS导入和导出
    HBase的JavaAPI操作
    Maven中settings.xml的配置项说明
    Eclipse使用Maven创建普通Java工程时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:RELEASE from any of the configured repositories.
    ip 子网掩码 网关 DNS
    IP地址,子网掩码、默认网关,DNS理论解释
    IP地址,子网掩码,默认网关,路由,形象生动阐述
    Hive的JDBC使用&并把JDBC放置后台运行
    Hive中自定义函数
  • 原文地址:https://www.cnblogs.com/mark5/p/15559640.html
Copyright © 2011-2022 走看看