在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>
相关推荐
mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...
MyBatis是一款优秀的持久层框架,支持普通的SQL查询、存储过程和高级映射。它将手动的JDBC代码、参数设置以及结果集检索减少到最少,通过简单的XML或注解配置,将接口和Java的POJO(普通的Java对象)映射成数据库中...
例如,当需要从多个表中获取关联的数据时,可以通过`NestedSelect`定义子查询,再通过`NestedResult`进行结果集的映射,从而实现数据的一次性加载,避免了多次数据库往返带来的性能损耗。 ### 解决MyBatis与Spring...
- **typeAliases**:为 Java 类型设置一个简短的名字,该名字只在 MyBatis 内部使用。 - **typeHandlers**:类型处理器,它决定了 MyBatis 如何将特定类型的值在 JavaType、JdbcType 和 SQL 类型之间进行转换。 - **...
Mybatis 支持关联映射,可以使用 associa 标签实现一对一关联查询。 Mybatis 是一个灵活的持久层框架,提供了多种方式来实现数据库操作。通过 XML 配置和 SQL 映射文件配置,可以实现灵活的持久层框架。
最后,在Eclipse或Myeclipse这样的集成开发环境中,我们可以创建MyBatis项目,配置数据源连接,将Mapper XML和Mapper接口关联起来,然后就可以在Service或Controller层调用这些方法进行数据库操作了。 总的来说,...
相比之前的版本,3.3.0 在性能和功能上都有所提升,同时修复了一些已知的问题,提高了整体的稳定性和易用性。 #### 三、MyBatis 安装与集成 ##### 1. 添加依赖 - **Maven 方式**:在项目的 `pom.xml` 文件中添加 ...
* Mybatis提供了关联查询和动态SQL等功能,极大地提升了开发的效率 Mybatis的应用步骤: 1. 编写全局配置文件 2. 编写mapper映射文件 3. 加载全局配置文件,生成SqlSessionFactory 4. 创建SqlSession,调用mapper...
在MyBatis中,POJO包含了与数据库表字段对应的属性和getter/setter方法,用于封装和解封数据。通过这个一键生成工具,我们可以快速创建符合需求的POJO类,避免手动编写大量的样板代码。 2. **DAO(Data Access ...
8. **MyBatis_SpringZK0和MyBatis_SpringZK**:这两个文件可能是项目中的其他相关组件,名字中的“ZK”可能指的是Zookeeper,一个分布式协调服务。如果涉及到Zookeeper,那么这些文件可能包含了Zookeeper配置或者...
Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 是 Spring 框架的一部分,主要用于构建 MVC(模型-视图-控制器)架构的 Web 应用程序,而 MyBatis 是一个优秀的持久层框架,它简化了...
2. **MyBatis中文帮助文档**: MyBatis的官方文档通常包含详细的API参考、教程、最佳实践等内容,对学习和解决MyBatis相关问题非常关键。中文版文档更便于中国开发者阅读,帮助理解框架的工作原理、如何配置、如何...
MyBatisX插件提供了诸如代码生成、SQL快速编写、Mapper接口与XML配置关联查看等功能,使得在IDEA中处理MyBatis项目变得更加便捷。 【标签】"intellij idea 软件/插件"表明这是关于IntelliJ IDEA的软件或插件内容。...
结果映射是MyBatis中最强大的特性之一,它允许开发者使用简单的配置即可实现复杂的关联关系映射。 - **基本映射**:如`id`、`result`等,用于简单的字段映射。 - **支持的JDBC类型**:MyBatis支持广泛的JDBC类型,...
MyBatis是一个流行的Java持久层框架,它提供了一个SQL映射机制,允许开发者将SQL语句与Java对象直接关联,从而实现数据访问。这个框架的主要优势在于它将SQL语句从代码中分离出来,提高了代码的可维护性和可读性,...
- MyBatis支持多种关联映射方式,包括嵌套查询、嵌套结果等。这些映射方式可以帮助开发者轻松处理复杂的数据关系。 49. **MyBatis中的#{}和${}的区别** - `#{}`用于预编译SQL语句,可以防止SQL注入攻击;`${}`则...
MyBatis 是一款深受开发者喜爱的 Java ORM(对象关系映射)框架,它允许程序员将 SQL 查询与 Java 代码直接集成,提供了灵活的控制权,同时保持了 SQL 的强大功能。MyBatis 插件是为开发环境如 Eclipse 提供的辅助...
### MyBatis基础知识详解 #### 一、课程名称:MyBatis讲义 本课程旨在为初学者提供一套全面的MyBatis学习资料,通过详细的知识点解析与实践操作指导,帮助学员快速掌握MyBatis的基本用法及高级特性。 #### 二、...