`
highriver
  • 浏览: 72122 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于ibatis的联表查询的映射

    博客分类:
  • java
阅读更多
权限设计中,现在有三个表,分别是role,role_operation,operation.现在要通过roleid得到该role的所有operation的集合。现在分别有role对象,里面有一个Set<Operation>的属性用来代表角色的权限集合。

现在的问题是role_operation表中有一个appType的列,同时operation的表中也有一个appType的列。我想通过查询结果与Bean的映射,将role_operation中的appType的值映射给相应的operation中的appType。

现在sql大概是这样:
<select id="selectRoleByRoleId" resultMap="RoleResult">
select r.ROLEID, r.ROLENAME, r.APPTYPE, r.ORGCODE,o.OPCODE,
o.OPDETAIL, o.PARENTCODE, ro.APPTYPE from ADMIN_ROLES r,
ADMIN_OPS o,ADMIN_ROLE_OP ro where o.OPCODE = ro.OPCODE and
r.ROLEID = ro.ROLEID and r.ROLEID= #value#
</select>
将来的sqlMap文件中不知道怎么写,下面是试验过的写法会报错,不过里面的红色字体表明我想达到的效果:
<resultMap class="com.tongcard.operation.web.model.Role"
groupBy="roleId" id="abatorgenerated_RoleResult">
<!--
WARNING - This element is automatically generated by Abator for iBATIS, do not modify.
This element was generated on Sun Apr 22 15:16:17 CST 2007.
-->
<result column="ROLEID" jdbcType="DECIMAL" property="roleId" />
<result column="ROLENAME" jdbcType="VARCHAR"
property="roleName" />
<result column="APPTYPE" jdbcType="DECIMAL" property="appType" />
<result column="ORGCODE" jdbcType="VARCHAR" property="orgCode" />
</resultMap>

<resultMap class="com.tongcard.operation.web.model.Role"
groupBy="roleId" id="RoleResult">
<result column="ROLEID" jdbcType="DECIMAL" property="roleId" />
<result column="ROLENAME" jdbcType="VARCHAR"
property="roleName" />
<result column="APPTYPE" jdbcType="DECIMAL" property="appType" />
<result column="ORGCODE" jdbcType="VARCHAR" property="orgCode" />
<result resultMap="DEVELOPER_ADMIN_ROLES.operationResult"
property="opers" />
</resultMap>

<resultMap class="com.tongcard.operation.web.model.Operation"
id="operationResult">
<result column="OPCODE" jdbcType="VARCHAR" property="opCode" />
<result column="OPDETAIL" jdbcType="VARCHAR"
property="opDetail" />
<result column="PARENTCODE" jdbcType="VARCHAR"
property="parentCode" />
<result column="RO.APPTYPE" jdbcType="DECIMAL" property="appType" />
</resultMap>

不知道讲明白没有,谢谢大家。
分享到:
评论
2 楼 highriver 2007-08-13  
自已给自己解答吧。
只需要将sql变成:
<select id="selectRoleByRoleId" resultMap="RoleResult">
select r.ROLEID, r.ROLENAME, r.APPTYPE, r.ORGCODE,o.OPCODE,
o.OPDETAIL, o.PARENTCODE, ro.APPTYPE from ADMIN_ROLES r,
ADMIN_OPS o,ADMIN_ROLE_OP ro where o.OPCODE = ro.OPCODE and
r.ROLEID = ro.ROLEID and r.ROLEID= #value#
</select>
然后将配置文件变成:
<select id="selectRoleByRoleId" resultMap="RoleResult">
select r.ROLEID, r.ROLENAME, r.APPTYPE, r.ORGCODE,o.OPCODE,
o.OPDETAIL, o.PARENTCODE, ro.APPTYPE from ADMIN_ROLES r,
ADMIN_OPS o,ADMIN_ROLE_OP ro where o.OPCODE = ro.OPCODE and
r.ROLEID = ro.ROLEID and r.ROLEID= #value#
</select>
将来的sqlMap文件中不知道怎么写,下面是试验过的写法会报错,不过里面的红色字体表明我想达到的效果:
<resultMap class="com.tongcard.operation.web.model.Role"
groupBy="roleId" id="abatorgenerated_RoleResult">
<!--
WARNING - This element is automatically generated by Abator for iBATIS, do not modify.
This element was generated on Sun Apr 22 15:16:17 CST 2007.
-->
<result column="ROLEID" jdbcType="DECIMAL" property="roleId" />
<result column="ROLENAME" jdbcType="VARCHAR"
property="roleName" />
<result column="APPTYPE" jdbcType="DECIMAL" property="appType" />
<result column="ORGCODE" jdbcType="VARCHAR" property="orgCode" />
</resultMap>

<resultMap class="com.tongcard.operation.web.model.Role"
groupBy="roleId" id="RoleResult">
<result column="ROLEID" jdbcType="DECIMAL" property="roleId" />
<result column="ROLENAME" jdbcType="VARCHAR"
property="roleName" />
<result column="APPTYPE" jdbcType="DECIMAL" property="appType" />
<result column="ORGCODE" jdbcType="VARCHAR" property="orgCode" />
<result resultMap="DEVELOPER_ADMIN_ROLES.operationResult"
property="opers" />
</resultMap>

<resultMap class="com.tongcard.operation.web.model.Operation"
id="operationResult">
<result column="OPCODE" jdbcType="VARCHAR" property="opCode" />
<result column="OPDETAIL" jdbcType="VARCHAR"
property="opDetail" />
<result column="PARENTCODE" jdbcType="VARCHAR"
property="parentCode" />
<result column="ROAPPTYPE" jdbcType="DECIMAL" property="appType" />
</resultMap>
就可以啦。
1 楼 highriver 2007-08-13  
sql与sqlMap不知道哪里写错了。我对ibatis的底层映射原理不是太明白,怎么通过ResultSetMetaData就能将相应的列遇到到相应的bean属性上。难道是sql中a.b,将来就会自动的找到a这个对象,并赋给对象中的b属性吗?题外话,希望高手一并解答一下。

相关推荐

    主子表查询ibatis

    总结,主子表查询在iBATIS中通过配置XML映射文件,结合Java代码和SQL脚本实现。log4j作为日志管理工具,可以帮助开发者更好地查看和分析查询结果。理解这些概念并熟练应用,对于进行复杂数据库操作的Java开发工作至...

    Ibatis查询语句里,可以使用多表查询

    iBatis 支持在查询语句中进行多表查询,并能够将结果映射到相应的 Java 对象上。多表查询通常涉及到 JOIN 操作,例如内连接(INNER JOIN)、左连接(LEFT JOIN)等,这些操作可以帮助我们从多个相关联的表中获取所需...

    ibatis 的关系映射

    在iBatis中,可以通过嵌套结果映射或联合映射来处理。`&lt;association&gt;`和`&lt;collection&gt;`的组合使用,配合自定义的SQL查询,可以实现多对多的映射。 4. **双向映射**:在一对多或多对一关系中,如果需要在两个方向上...

    Ibatis的简单例子(增删改查,联合查询等)

    在XML映射文件中,你可以使用标签或在标签内直接编写JOIN语句,以实现多个表的数据联合查询。记得在Mapper接口中定义对应的方法。 6. **Service层和DAO层**: 在实际项目中,我们通常会创建Service层来封装业务...

    ibatis and和or联合查询 .doc

    ### ibatis and和or联合查询知识点 #### 一、ibatis简介 ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀开源数据访问框架。ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或...

    关于ibatis的基础教程

    1. **动态SQL**:Ibatis支持在XML映射文件中编写动态SQL,根据条件生成不同的查询语句。 2. **参数映射**:通过`&lt;paramter&gt;`标签将Java对象的属性值映射到SQL语句的占位符。 3. **结果映射**:通过`&lt;resultMap&gt;`标签...

    IBatis.pdf

    1. **复杂查询**:当需要进行复杂的数据库查询,如分页、联合查询、子查询时,IBatis 提供的 SQL 映射和动态 SQL 功能非常有用。 2. **性能优化**:通过缓存机制,可以减少对数据库的频繁访问,提高系统性能。 3. ...

    IBatis.NET开发文档

    - 复杂查询:涉及子查询,联合查询,存储过程的调用等。 - 缓存机制:讲解iBATIS的缓存策略,如何启用和配置缓存以提高性能。 - 异常处理:介绍iBATIS抛出的异常类型及其处理方式。 - 批量操作:如何利用iBATIS...

    ibatis 学习资料

    1. **联合查询的使用.jpg**:这可能是一个关于iBatis如何实现多表联合查询的示例。在iBatis中,可以通过和标签来定义复杂的SQL查询,包括JOIN操作,以此来获取多个表的数据。 2. **iBATIS.in.Action.pdf.lnk**:这...

    Ibatis的学习笔记

    关联映射则用于一对一或一对多的关系,通过nestedResultMap或association标签,可以实现主从表的联合查询和结果转换。 对于存储过程的处理,Ibatis允许直接调用数据库的存储过程,并通过out参数获取返回结果。在XML...

    ibatis的的增删改查和一对一、一对多查询

    在SQL查询中,可以使用嵌套选择(`&lt;select&gt;`标签)或者联合主键(`&lt;join&gt;`标签)来关联一对一的表。 2. **一对多关系**:在一个实体类中,可能存在与多个其他实体类的关系,如一个用户有多个订单。同样,使用`...

    iBATIS资料汇总

    文件可能还包含了一些实际案例,展示如何在不同场景下使用iBATIS,如单表操作、多表联合查询、存储过程调用等。 9. **问题排查与调试** 学习如何定位和解决iBATIS使用过程中遇到的问题,例如SQL执行错误、数据...

    IBATIS.pdf

    相比之下,iBATIS更适用于那些需要高级SQL查询技巧的应用场景,如处理复杂联表查询、分页查询等。iBATIS给予开发者对SQL语句的完全控制权,这意味着开发者可以优化查询逻辑,以适应数据库设计的特殊需求,特别是在...

    iBATIS实战

    5.1.2 非查询已映射语句 83 5.2 插入数据 84 5.2.1 使用内联参数映射 84 5.2.2 使用外部参数映射 85 5.2.3 自动生成的键 86 5.3 更新和删除数据 88 5.3.1 处理并发更新 88 5.3.2 更新或删除子记录 89 5.4 运行批量...

    iBATIS 2.0 开发指南

    iBATIS 的设计理念是,虽然它提供了 POJO(Plain Old Java Object)到数据库表的映射,但它并不封装 SQL 的编写过程。这意味着开发者仍然需要编写 SQL 语句,而不是完全依赖框架自动生成 SQL。这种方式的好处在于: ...

    Ibatis 数据层 轻型框架

    尽管如此,Ibatis 也有一些局限性,比如对于复杂事务管理和多表联合查询的支持相对有限,需要开发者有较强的SQL功底。 总的来说,Ibatis 是一款优秀的数据访问工具,尤其适合那些需要高度定制SQL语句的项目。其轻量...

    iBATIS SQL Maps官方中文教程(PDF)

    7. 查询:深入讨论如何执行SQL查询,包括简单的单表查询、多表联合查询、分页查询以及使用ResultMaps处理复杂的结果集。 8. 参数映射:介绍如何传递参数给SQL语句,包括基本类型、复杂对象和集合类型的参数映射方法...

    ibatisDemo.rar

    例如,复杂的查询、分页或联表操作,使用Ibatis可以更加直观和高效。 四、配置数据库连接池 高效的数据库连接池是优化数据库操作的关键。在IbatisDemo中,推荐使用如Druid这样的高性能连接池。Druid提供监控、SQL...

    ibatis官方资料

    1. **XML 配置**:Ibatis 使用 XML 文件来配置 SQL 映射,这使得 SQL 查询和业务逻辑分离,方便管理和维护。 2. **动态 SQL**:Ibatis 支持在映射文件中编写动态 SQL,可以根据条件灵活地改变查询逻辑。 3. **结果...

Global site tag (gtag.js) - Google Analytics