2016-04-01 8 views
3

Situation: Ich bin eine Feder MVC-basierten Web-App entwerfen, habe ich eine Tabelle customers es besteht aus 3 Säulen id, property, property value genannt.Wie verwende ich die Karte, um die Erstellung von Objekten im Frühjahr MVC Web App zu reduzieren?

id ist nicht primary key.

Es folgt die Model Klasse verwende ich:

public class prop { 

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

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

und mein Dao ist:

@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; 
} 
} 

Und meine Mapper Klasse:

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; 
} 
} 

Problem: Jetzt Ich habe ein Szenario, in dem id = 1 hat 4 Eigenschaften, so hat es 4 entsprechende Zeilen und 4 Modellobjekte werden erstellt,

wenn ID = 1 sagt 100 Eigenschaften, dann 100 model Objekte erstellt werden, die ineffizient ist, möchte ich, dass für alle Zeilen mit ID = 1 ein Model Objekt muss erstellt werden, versuchte ich mit map aber konnte es nicht richtig implementieren kann jemand bitte helfen?

Hinweis: In UI i alle Datensätze bin Anzeige, wie sie vorhanden sind, in DB

+0

Ich verstehe nicht ganz Ihr Design. Gemessen an dieser Abfrage: 'Select * von Kunden mit ID =? 'Wie kannst du 4 Ergebnisse haben? –

+0

wie ich sagte ID ist nicht Primärschlüssel, so über Abfrage wird alle Datensätze abrufen, die eine bestimmte ID haben –

Antwort

0

Sie Klasse prop ändern können als

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

Ändern Mapper Code entsprechend HashMap zu verwenden.

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

können Sie bitte erarbeiten oder mehr zu erklären? möglicherweise ein POC –

+0

Bearbeitete meine Antwort oben – Jeet