论坛首页 Java企业应用论坛

iBatis中怎样按条件选择不同的表来执行查询

浏览 12894 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-21  
qq123zhz 写道
george_space 写道
四书五经 写道
[color=green]现在的需求是:
if(条件A)
  从表A,C里查询需要的数据
else if(条件B)
   从表B,C里查询需要的数据

其中条件A和B是页面上用户的输入(选择),



    <when test="name != null">
        <choose>
                <when test="name == 'hello'" >
                  从A表查询
                </when>
                <when test="name == 'world'" >
                  从B表查询
                </when>
                <when test="name == 'hello-world'" >
                  从ABC三表联查
                </when>
                <otherwise>
                  从ABCDEFG表联查
                </otherwise>  
        </choose>            
    </when>



问题是,如果你查询的目标表都不确定的话,<select>返回结果对象,你只能映射成map,除非你能确保始终查询出的结果集能和实体类属性做了一一对应的resultMap

可以用<asscoation>时间一对一关联

关连查询和“返回结果不确定”没有什么关系,“返回结果不确定”并不是因为关联查询或者查询表名字不确定而存在,就算查询同一张表,如果你a条件返回3个字段,b条件返回9个字段,而且这3个字段和9个字段还没有重复的字段,这样的话,你的result只能映射到map,如果要映射到实体类,你的实体类属性要把所有可能返回的字段都做映射。
0 请登录后投票
   发表时间:2011-12-21  
逻辑不要放在sql里,用java控制逻辑比较好
0 请登录后投票
   发表时间:2011-12-21  
建议:
1.交给业务层去处理吧。重新分析一下业务逻辑!
2.写个存储过程
WHY1:ORM这一层不要过多地负担业务的东西,注意耦合度。
WHY2:日后修改方便;相对于改配置文件、DAO,可以直接修改SQL。但要注意SQL脚本的版本控制。
0 请登录后投票
   发表时间:2011-12-21  
夜神月 写道
逻辑不要放在sql里,用java控制逻辑比较好

这个是正解,
0 请登录后投票
   发表时间:2012-03-20  
chansman 写道
夜神月 写道
逻辑不要放在sql里,用java控制逻辑比较好

这个是正解,

在mybatis里,你就可以使用拦截器控制sql了。。。
0 请登录后投票
   发表时间:2012-08-03  
你可以这样:
select
//(在这里用if判断应该拿A的字段还是B的字段)
if(条件A)
  从表A,C里查询需要的数据,改用另外的列名称
else if(条件B)
   从表B,C里查询需要的数据,改用另外的列名称


from C
left join A on c.id=a.id
left join B on c.id=b.id
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics