2016-04-01 7 views
3

状況:私は春MVCベースのWebアプリケーションを設計していますが、私はそれが3列idpropertyproperty valueで構成されていcustomersと呼ばれるテーブルを持っています。春のMVC Webアプリケーションでオブジェクトの作成を減らすためにマップを使用する方法は?

idprimary keyではありません。

以下は、私が使用していますModelクラスです:

public class prop { 

private String id; 
private String property; 
private String property_value; 

/*setter and getters of these three variables ...*/ 
} 

と私のダオは次のとおりです。

@Repository("Dao") 
public class Dao implements{ 

@Autowired 
private JdbcTemplate jdbcTemplate; 

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 
    this.jdbcTemplate = jdbcTemplate; 
} 

public List<Model> listProp(String id) { 

    final String sql = "select * from customers where id = ? "; 
    final List<Model> list = jdbcTemplate.query(sql, new Object[]{id}, new Mapper()); 
    return list; 
} 
} 

そして、私のMapperクラスは次のとおりです。

public class Mapper implements RowMapper<Model> { 

public Model mapRow(ResultSet rs, int rowNum) throws SQLException { 
    Model m = new Model(); 
    m.setId(rs.getString(1)); 
    m.setProperty(rs.getString(2)); 
    m.setValue(rs.getString(3)); 
    return wl; 
} 
} 

問題:今すぐid = 1のシナリオがあります4つのプロパティを持つので、4つの対応する行があり、4つのモデルオブジェクトが作成されます。

id = 1のプロパティが100のプロパティの場合、100 modelオブジェクトが作成され、非効率的です。 = 1 one Modelオブジェクトを作成する必要があります、私はmapを使ってみましたが、正しく実装できませんでした。

:UIで、私はすべてのレコードを表示しています彼らはDB

+0

私はあなたのデザインをよく理解していません。このクエリで判断すると、 'select * from customers where id =? 「あなたはどのように4つの結果を得られますか? –

+0

私はidがプライマリキーではないと言っていますので、上記のクエリは特定のIDを持つすべてのレコードを取得します –

答えて

0

に存在しているとしてあなたはHashMapを使用するに応じて

public class prop { 
    private String property; 
    private String property_value; 
/*setter and getters of these three variables ...*/ 
} 

変更マッパーコードとしてクラスの小道具を変更することができます。

public class Mapper { 

Map<String ,List<Model>> map = new HashMap<String , List<Model>>(); 

    public Map<String , Model> mapRow(ResultSet rs, int rowNum) throws SQLException { 
     Model m = new Model(); 
     m.setProperty(rs.getString(2)); 
     m.setValue(rs.getString(3)); 

     if(map.containsKey(rs.getString(1))) { 
      List<Model> modelList = map.get(rs.getString(1)); 
      modelList.add(m); 
     } else { 
      List<Model> modelList = new ArrayList<Model>(); 
      modelList.add(m); 
      map.put(rs.getString(1),modelList); 
     } 

     return map; 

    } 
} 
+0

詳細を教えてください。 POCかもしれない –

+0

上記の私の答えを編集 – Jeet

関連する問題