`
y806839048
  • 浏览: 1119300 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mybatis关联查询(同名字段问题)

 
阅读更多

在mybatis中用了pagehelper的时候如果遇到多表查询,尤其是关联查询(一对一,一对多)采用,

结果集(直接用标签(此种sql体现关联的只能在collection中用标签,不能像关联条件压入式可以用查询,也可用标签) )

+sql(select o.*,r.*  opm_User o left join opm_user_role ur on o.id = ur.userid)语句体现关联,很容易碰到,要查的关联实体

有相同的列名,会造成(1,一对多多方只会出现一个(主键名相同时))2同时采用了pagehelper时,会出现文明确定义列的问题( tmp_page.*这里

相当于有同的列),此时可以用别名处理

 

select *

  from (select tmp_page.*, rownum row_id

          from (select o.*,

                       r.id as r_id,

                       r.name as  aa,

                       r.organid as ff,

                       r.valid as fdf,

                       r.memo as f,

                       r.level1 as d,

                       r.subsystem as g

                  from opm_User o left join opm_user_role ur on o.id = ur.userid left join opm_role r on ur.roleid = r.id

                 where 1 = 1 and o.organId = 1

                 order by o.code) tmp_page

         where rownum <= 20)

 where row_id > 0

 

 例如:

 <resultMap id="BaseResultMapVo" type="com.esteel.system.beanVo.OpmUserVo" >

    <!--

      WARNING - @mbggenerated

    -->

    <id column="ID" property="id" jdbcType="VARCHAR" />

    <result column="CODE" property="code" jdbcType="VARCHAR" />

    <result column="PASSWORD" property="password" jdbcType="VARCHAR" />

    <result column="NAME" property="name" jdbcType="VARCHAR" />

    <result column="TELEPHONE" property="telephone" jdbcType="VARCHAR" />

    <result column="EMAIL" property="email" jdbcType="VARCHAR" />

    <result column="ORGANID" property="organid" jdbcType="VARCHAR" />

    <result column="VALID" property="valid" jdbcType="VARCHAR" />

    <result column="MEMO" property="memo" jdbcType="VARCHAR" />

    <result column="LEVEL1" property="level1" jdbcType="DECIMAL" />

    <result column="LAST_LOGIN_DATE" property="lastLoginDate" jdbcType="VARCHAR" />

    <result column="LAST_LOGIN_TIME" property="lastLoginTime" jdbcType="TIMESTAMP" />

    <result column="ONLINE_MARK" property="onlineMark" jdbcType="VARCHAR" />

    <result column="ONLINE_IP" property="onlineIp" jdbcType="VARCHAR" />

    <result column="SESSIONID" property="sessionid" jdbcType="VARCHAR" />

    <collection property="opmRole" ofType="com.esteel.system.bean.OpmRole" >

    <id column="r_id" property="id" jdbcType="VARCHAR" />

    <result column="r_name" property="name" jdbcType="VARCHAR" />

    <result column="r_organid" property="organid" jdbcType="VARCHAR" />

    <result column="r_valid" property="valid" jdbcType="VARCHAR" />

    <result column="r_memo" property="memo" jdbcType="VARCHAR" />

    <result column="r_level1" property="level1" jdbcType="DECIMAL" />

    <result column="r_subsystem" property="subsystem" jdbcType="VARCHAR" />

    </collection>

  </resultMap>

  

  <sql id="getRole">

    r.id as r_id,r.name as r_name,r.organid as r_organid,r.valid as r_valid,r.memo as r_memo,r.level1 as r_level1,r.subsystem as r_subsystem

  </sql>

  

  <select id="getUserByMarkId" parameterType="map" resultMap="BaseResultMapVo">

 select o.*, <include refid="getRole"></include>

       from opm_User o left join opm_user_role ur on o.id = ur.userid left join opm_role r on ur.roleid = r.id

      where 1 = 1

 <if test="organid!=null and organid!=''"> 

      and o.organId=#{organid} 

 </if>

 <if test="valid!=null and valid!=''"> 

       and o.valid=#{valid} 

 </if>

 <if test="level1!=null and level1!=''"> 

      and o.LEVEL1=#{level1}

 </if>

  order by o.code

  </select>

 

  =============这是原本数据库列

   <resultMap id="BaseResultMap" type="com.esteel.system.bean.OpmUser" >

    <!--

      WARNING - @mbggenerated

    -->

    <id column="ID" property="id" jdbcType="VARCHAR" />

    <result column="CODE" property="code" jdbcType="VARCHAR" />

    <result column="PASSWORD" property="password" jdbcType="VARCHAR" />

    <result column="NAME" property="name" jdbcType="VARCHAR" />

    <result column="TELEPHONE" property="telephone" jdbcType="VARCHAR" />

    <result column="EMAIL" property="email" jdbcType="VARCHAR" />

    <result column="ORGANID" property="organid" jdbcType="VARCHAR" />

    <result column="VALID" property="valid" jdbcType="VARCHAR" />

    <result column="MEMO" property="memo" jdbcType="VARCHAR" />

    <result column="LEVEL1" property="level1" jdbcType="DECIMAL" />

    <result column="LAST_LOGIN_DATE" property="lastLoginDate" jdbcType="VARCHAR" />

    <result column="LAST_LOGIN_TIME" property="lastLoginTime" jdbcType="TIMESTAMP" />

    <result column="ONLINE_MARK" property="onlineMark" jdbcType="VARCHAR" />

    <result column="ONLINE_IP" property="onlineIp" jdbcType="VARCHAR" />

    <result column="SESSIONID" property="sessionid" jdbcType="VARCHAR" />

  </resultMap>

 

分享到:
评论

相关推荐

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    MyBatis3.2.2中文官方文档

    MyBatis是一款优秀的持久层框架,支持普通的SQL查询、存储过程和高级映射。它将手动的JDBC代码、参数设置以及结果集检索减少到最少,通过简单的XML或注解配置,将接口和Java的POJO(普通的Java对象)映射成数据库中...

    spring mybatis 3.x 使用图文

    例如,当需要从多个表中获取关联的数据时,可以通过`NestedSelect`定义子查询,再通过`NestedResult`进行结果集的映射,从而实现数据的一次性加载,避免了多次数据库往返带来的性能损耗。 ### 解决MyBatis与Spring...

    mybatis文档

    - **typeAliases**:为 Java 类型设置一个简短的名字,该名字只在 MyBatis 内部使用。 - **typeHandlers**:类型处理器,它决定了 MyBatis 如何将特定类型的值在 JavaType、JdbcType 和 SQL 类型之间进行转换。 - **...

    Mybatis知识点浅浅笔记

    Mybatis 支持关联映射,可以使用 associa 标签实现一对一关联查询。 Mybatis 是一个灵活的持久层框架,提供了多种方式来实现数据库操作。通过 XML 配置和 SQL 映射文件配置,可以实现灵活的持久层框架。

    MyBatis增删改查

    最后,在Eclipse或Myeclipse这样的集成开发环境中,我们可以创建MyBatis项目,配置数据源连接,将Mapper XML和Mapper接口关联起来,然后就可以在Service或Controller层调用这些方法进行数据库操作了。 总的来说,...

    mybatis 入门文档

    相比之前的版本,3.3.0 在性能和功能上都有所提升,同时修复了一些已知的问题,提高了整体的稳定性和易用性。 #### 三、MyBatis 安装与集成 ##### 1. 添加依赖 - **Maven 方式**:在项目的 `pom.xml` 文件中添加 ...

    四、Mybatis框架

    * Mybatis提供了关联查询和动态SQL等功能,极大地提升了开发的效率 Mybatis的应用步骤: 1. 编写全局配置文件 2. 编写mapper映射文件 3. 加载全局配置文件,生成SqlSessionFactory 4. 创建SqlSession,调用mapper...

    mybatis最终工具+pojo+dao+mapper一键生成

    在MyBatis中,POJO包含了与数据库表字段对应的属性和getter/setter方法,用于封装和解封数据。通过这个一键生成工具,我们可以快速创建符合需求的POJO类,避免手动编写大量的样板代码。 2. **DAO(Data Access ...

    MyBatis_Spring整合代码案例.zip

    8. **MyBatis_SpringZK0和MyBatis_SpringZK**:这两个文件可能是项目中的其他相关组件,名字中的“ZK”可能指的是Zookeeper,一个分布式协调服务。如果涉及到Zookeeper,那么这些文件可能包含了Zookeeper配置或者...

    springmvc和mybatis整合jar包

    Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 是 Spring 框架的一部分,主要用于构建 MVC(模型-视图-控制器)架构的 Web 应用程序,而 MyBatis 是一个优秀的持久层框架,它简化了...

    MyBatis依赖包+官方文档.zip

    2. **MyBatis中文帮助文档**: MyBatis的官方文档通常包含详细的API参考、教程、最佳实践等内容,对学习和解决MyBatis相关问题非常关键。中文版文档更便于中国开发者阅读,帮助理解框架的工作原理、如何配置、如何...

    idea插件,mybatisx

    MyBatisX插件提供了诸如代码生成、SQL快速编写、Mapper接口与XML配置关联查看等功能,使得在IDEA中处理MyBatis项目变得更加便捷。 【标签】"intellij idea 软件/插件"表明这是关于IntelliJ IDEA的软件或插件内容。...

    MyBatis-3-User-Guide

    结果映射是MyBatis中最强大的特性之一,它允许开发者使用简单的配置即可实现复杂的关联关系映射。 - **基本映射**:如`id`、`result`等,用于简单的字段映射。 - **支持的JDBC类型**:MyBatis支持广泛的JDBC类型,...

    MyBatis 如何写配置文件和简单使用

    MyBatis是一个流行的Java持久层框架,它提供了一个SQL映射机制,允许开发者将SQL语句与Java对象直接关联,从而实现数据访问。这个框架的主要优势在于它将SQL语句从代码中分离出来,提高了代码的可维护性和可读性,...

    SSM框架面试题.pdf

    - MyBatis支持多种关联映射方式,包括嵌套查询、嵌套结果等。这些映射方式可以帮助开发者轻松处理复杂的数据关系。 49. **MyBatis中的#{}和${}的区别** - `#{}`用于预编译SQL语句,可以防止SQL注入攻击;`${}`则...

    mybatipse1.2.3 eclipse离线插件

    MyBatis 是一款深受开发者喜爱的 Java ORM(对象关系映射)框架,它允许程序员将 SQL 查询与 Java 代码直接集成,提供了灵活的控制权,同时保持了 SQL 的强大功能。MyBatis 插件是为开发环境如 Eclipse 提供的辅助...

    Mybaties讲义(小白需要)

    ### MyBatis基础知识详解 #### 一、课程名称:MyBatis讲义 本课程旨在为初学者提供一套全面的MyBatis学习资料,通过详细的知识点解析与实践操作指导,帮助学员快速掌握MyBatis的基本用法及高级特性。 #### 二、...

Global site tag (gtag.js) - Google Analytics