一对多 如何使多的一端信息在页面上同一行中友好显示

 

日前有同学在做项目的过程中问道我,这样的一个问题,后来我也遇到了,虽然需求不尽相同,但是大同小异,今天把我做出来的解决方案贴出来供大家参考。

需求(都是),达到如下效果

                    1的一端       多的一端,信息以逗号拼接,在同行显示 
 

情况一:表设计如下(没有中间表)

1的一端 yao表
     

多的一端 bing表

问题:那怎么在对yao表进行查询的时候,使kzb这样的一个多段字段的标识如1,2转化成冠心病,糖尿病这样的需求结果了?

解决思路,在查询集合返回之前,将集合中的每一个对象属性kzb字段进行值的重绘。ResultSet

代码如下(采用Spring MVC) 其实完全可以使用传统的jdbc编程来实现,关键是对 ResultSet的巧妙处理使用

 

@Repository ( "yaoDao" ) 
public class YaoDao { 
  

    @Resource 
    private JdbcTemplate jdbcTemplate ; 
    
    // 查询所有的 (yao) 药品信息 
    public List<Yao> queryAllYao() { 
       String sql= "select * from yao" ; 
       return (List<Yao>) jdbcTemplate .query(sql, new YaoMapper()) ; 
    } 
    
    // 如果查询的结果 ResultSet 还有下一个,进行 kbz 字段值的重绘 
    protected class YaoMapper implements RowMapper{ 
       @Override 
       public Object mapRow(ResultSet rs, int rowNum) throws SQLException{ 
           Yao yao= new Yao(); 
           yao.setId(rs.getInt( "id" )); 
           yao.setName(rs.getString( "name" )); 
           
  // 根据病型 id 查询对应的病型名称,重绘 kbz 字段的值 
           String kzb=queryBNameByBIDs(rs.getString( "kzb" )); 
           yao.setKzb(kzb); 
           
           return yao; 
       } 
    } 
    
    // 根据对应病型 id 查询对应的病型名称,得到 kzb 字段的值 
    public String queryBNameByBIDs(String bids) { 
       String kzb= "" ; 
       String sql= "select name from bing where id in(" +bids+ ")" ; 
       List<Bing> bingList= jdbcTemplate .query(sql, new BeanPropertyRowMapper(Bing. class )) ; 
       for ( int i = 0; i < bingList.size(); i++) { // 拼接 kzb 多的一端信息 
           if (i==bingList.size()-1){ // 最后一项不需要加逗号 
           kzb+=bingList.get(i).getName(); 
           } else { 
           kzb+=bingList.get(i).getName()+ "," ; 
           } 
       } 
       return kzb; 
    } 
} 

情况二:表设计如下(有中间表)

现在一时找不到表了,其实思路和第一种情况很相似,尽量往第一种情况靠就可以了。日后补上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值