精华帖 (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,如果要映射到实体类,你的实体类属性要把所有可能返回的字段都做映射。 |
|
返回顶楼 | |
发表时间:2011-12-21
逻辑不要放在sql里,用java控制逻辑比较好
|
|
返回顶楼 | |
发表时间:2011-12-21
建议:
1.交给业务层去处理吧。重新分析一下业务逻辑! 2.写个存储过程 WHY1:ORM这一层不要过多地负担业务的东西,注意耦合度。 WHY2:日后修改方便;相对于改配置文件、DAO,可以直接修改SQL。但要注意SQL脚本的版本控制。 |
|
返回顶楼 | |
发表时间:2011-12-21
夜神月 写道 逻辑不要放在sql里,用java控制逻辑比较好
这个是正解, |
|
返回顶楼 | |
发表时间:2012-03-20
chansman 写道 夜神月 写道 逻辑不要放在sql里,用java控制逻辑比较好
这个是正解, 在mybatis里,你就可以使用拦截器控制sql了。。。 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |