MyBatis动态SQL之动态返回列(Dynamic Column)

一,业务描述

最近单位有这样一个报表,根据选择的年份返回年份的列,比如,选择 城市,2015,2016年,那么返回列就是三列,城市,2015年数据,2016年数据,如果是只返回城市 , 2016年数据,那么返回列只有两列 ,城市,2016年数据


二,实现技术MyBatis

我们只是在Mybatis中,where子句中可以采用foreach进行动态集合的输入查询,但是在select子句中,网上的例子几乎没有,与是咱们不防来试试如何实现“一”中描述的需求


三,准备环境

1,mybatis环境,网上资料很多自行搜索

2,可以采用mysql,oracle等关系型数据库

建表语句:插入数据

dtop table 'tree' ;
create table tree(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) ,
age int(2),
year int(4),
notes varchar(20),
PRIMARY KEY (id)
)ENGINE=MyISAM  DEFAULT CHARSET=utf8; 
insert into tree(name, age , year , notes) values 
('nanjing' , 10 , 2006 , 'BTP'),
('beijing' , 11 , 2005 , 'BTP'),
('nanjing' , 11 , 2006 , 'CTP') ;
insert into tree(name, age , year , notes) values 
('nanjing' , 10 , 2006 , 'Activation'),
('beijing' , 11 , 2005 , 'NNNN'),
('beijing' , 11 , 2005 , 'YYYY'),
('nanjing' , 11 , 2005 , 'Activation') ;

3,自行根据建表语句建Tree.java

4,Tree.xml中动态条件 TreeSearcher 

public class TreeSearcher {
private List<Integer> ages;
public List<Integer> getAges() {
return ages;
}
public void setAges(List<Integer> ages) {
this.ages = ages;
}
}

5,TreeDAO.java

public List<Tree> getTrees(TreeSearcher treeSearcher) ;


6,TreeDAO.xml

<select id="getTrees" parameterType="com.beck.TreeSearcher.TreeSearcher" resultType="com.springMyBatis.system.model.Tree">
select name , 
<foreach collection="ages" index="index" item="item" open="" separator="," close="">
(select age from tree a where a.id = t.id and a.age=#{item}) as age#{item}
</foreach>
from tree t group by name 
</select>

7, 测试类,

public class UserController {


public static void main(String[] args) {
ApplicationContext app = null; 
app = new ClassPathXmlApplicationContext("applicationContex.xml");

TreeDao treeDAO = (TreeDao)app.getBean("treeDao") ;
TreeSearcher t = new TreeSearcher();
List<Integer> ts = new ArrayList<Integer>();
ts.add(new Integer(10));
// ts.add(new Integer(11));
t.setAges(ts);

List<Tree> trees = treeDAO.getTrees(t);
for(Tree tt:trees){
System.out.println(tt.toString());
}
}
}

8,测试结果请看图片 MyBatis_DynamicColumn.png


如需源代码,可以加个人QQ: 2845695726


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值