mybatis 查询集合里每一条数据包含子查询结果集。一对多查询,一对一查询,子查询。

1、业务描述:之前一位好友问,如何实现,分页查询所有用户信息,并且查询的用户信息里,每一条包含此用户所携带的所有工具,每个工具也是一条数据。

最近我自己做项目,发现也需要实现一个类似的业务,百度了很多,博客也看了不少,发现,类似的文章很少,有也不是我想要的,特此分享,供遇到问题的朋友参考。如有问题可联系我,联系方式最下面。

2、数据(以下数据仅是自己所造,仅供参考)

数据库可能是这种格式

查询出来的格式可能是这样的

3、如何解决,此处参考所参考的业务及解决方案,乃是本人遇到的业务。

项目国际化,一个按钮或者菜单有很多种语言,这些语言都存于数据库。在语言管理页面。数据展示类表,只显示中文和英文,其它语言都在详情中以类表的形式展示。

例如:数据库部分可能是这样的

          

前端界面是这样的,页面数据仅供参考

详情弹框:

实现方案:子查询

我重新写了一个实体类来作为返回给前端

public class LanguageVO {
    private String code;
    private String zhLanguage;    //中文
    private String cnLanguage;    //英文
    private List<TLanguageIta> list;   //其它语言

    get  set方法略.....

}

原实体类:

public class LanguageI {
    private String id;

    private String code;
    
    private String languageType;

    private String content;

   get  set方法略..

}

方案一: 直接在类中用注解方式实现:

    @Select("select code from language  group by code")
    @Results({
         @Result(property = "code", column = "code"),
         @Result(property = "list", column = "code",
             many  =@Many(select ="com.mapper.TLanguageItaMapper.getLanguageListByCode")),
         @Result(property = "zhLanguage", column = "code",
              one =@One(select ="com.mapper.TLanguageItaMapper.getZhLanguage")),
         @Result(property = "cnLanguage", column = "code",
               one =@One(select ="com.mapper.TLanguageItaMapper.getCnLanguage"))
         })
    List<LanguageVO> getLanguageListByPage();

    @Select("select t.id,t.code,t.language_type as languageType,"
            + "t.content,t.remark from language t where t.code = #{code}")
    List<TLanguageIta> getLanguageListByCode(@Param("code")String code);
    @Select("select t.content from language t where t.code = #{code} and t.language_type = '1'")
    String getZhLanguage(@Param("code")String code);
    @Select("select t.content from language t where t.code = #{code} and t.language_type = '2'")
      String getCnLanguage(@Param("code")String code);

方案二:在xml中实现

  <resultMap type="com.vo.TLanguageVO" id="getLanguageList">
       <result column="code" property="code"/>
       <association property="zhLanguage"
                     select="getZhLanguage"
                     column="code"/>
     <association property="cnLanguage"
                     select="getCnLanguage"
                     column="code"/>
     <collection property="list"
                    select="getLanguageListByCode"
                    column="code"/>           
  </resultMap>
  <select id="getLanguageListByPage" resultMap="getLanguageList" >

  <select id="getZhLanguage" resultType="String">
      select t.content from language t where t.code = #{code} and t.language_type = '1'
  </select>
    <select id="getCnLanguage" resultType="String">
      select t.content from language t where t.code = #{code} and t.language_type = '2'
  </select>
  <select id="getLanguageListByCode" resultMap="BaseResultMap">
      select t.id,t.code,t.language_type,t.content,t.remark from  language t 
      where t.code = #{code}
  </select>

结语:本人所有文章都立志写的简单易懂,戳中问题点。 当然了,简单的同时可能忽略了很多细节与详细,如有不足的地方,还请谅解并指出。  如对文章或实现技术上有问题,可联系我:qq: 1226500260     邮箱:[email protected]

猜你喜欢

转载自blog.csdn.net/weixin_40841731/article/details/82965961