java - Mybatis 3.0.5 nested collection mapping Example -


i investigating mapping facilities of mybatis 3.0.5. database h2 (1.3.160) in running embedded mode. of user manual, got straightforward parts working. having hard time mapping set uses hashmap backing storage.

here's java code custom collection has custom set field (simplified brevity)

public class customcollection  {     @jsonproperty     private customset<customitem> customitems;      public customcollection()     {         customitems = new customset<customitem>();     }      // other stuff   } 

here's customset code (again, simplified)

public class customset<e extends customiteminterface> extends abstractset<e> {     private concurrenthashmap<string, e> items;      public customset()     {         items = new concurrenthashmap<string, e>();     }      // other stuff   } 

here's mapping interface:

public interface customcollectionmapper  {     customcollection select(@param("somename") string s1, @param("someothername") string s2); } 

this code call mybatis framework:

sqlsessionfactory sqlsessionfactory = (sqlsessionfactory) servletcontext.getattribute("sqlsessionfactory"); sqlsession session = sqlsessionfactory.opensession(); customcollection coll = null; try  {      customcollectionmapper mapper = session.getmapper(customcollectionmapper.class);     coll = mapper.select(param1, param2); }   {      session.close();  }  

here's come mapping xml far:

<select id="select" resultmap="customcollectionmapping"> -- goes here??? </select>  <resultmap type="com.example.customcollection" id="customcollectionmapping">   <association property="customitems" javatype="com.example.customset">     <collection property="items" javatype="hashmap" oftype="com.example.customitem" select="selectcustomitems">     </collection>   </association> </resultmap>  <select id="selectcustomitems" parametertype="map" resulttype="com.example.customitem">     -- sql query return multiple customitem rows </select>   

through various iterations, got "too many results" error, other error or nothing (null returned mapper call) never result need. sql code works fine , if ask list straightforward select statement, rows , arraylist back. problem having having nested collection objects populated properly.

i have read manual many times, searched examples not come correct mapping xml purpose. appreciate if can me or point me source can help.

thanks in advance help.

this working example:

<resultmap id="categorypreferencevaluemap" type="synccategorypreferencevaluemodel">          <id property="preferencetypeid" column="preference_type_id" />          <result property="title" column="title"/>          <result property="index" column="type_index"/>           <result property="updatedat" column="category_updated_at" />           <collection property="preferences" column="p_preference_id" oftype="syncpreferencemodel" >             <id property="preferenceid" column="p_preference_id" />             <result property="title" column="p_preference_title" />             <result property="index" column="preference_index" />             <result property="updatedat" column="preference_updated_at" />             <collection property="preferencevalues" column="p_v_preference_value_id"  oftype="syncpreferencevaluemodel"  >                 <id property="preferencevalueid" column="p_v_preference_value_id" />                 <result property="preferencevalue" column="p_v_preference_value" />                 <result property="updatedat" column="preference_value_updated_at" />             </collection>            </collection>     </resultmap> 

this query

<select id="getprefersencewithvalues" resultmap="categorypreferencevaluemap">     select           pt.preference_type_id, pt.title, pt.type_index,pt.updated_at  category_updated_at,         p.preference_id p_preference_id , p.title p_preference_title  ,p.index preference_index,          p.updated_at preference_updated_at,          pv.preference_value_id p_v_preference_value_id ,pv.preference_value p_v_preference_value        preference_types pt     inner join preferences p on pt.preference_type_id=p.preference_type_id          inner join preference_values pv on p.preference_id=pv.preference_id       order type_index </select> 

and output is:

 [     {       "preferencetypeid": "1",       "title": "abc basics",       "index": "1",       "updatedat": 1,       "preferences": [         {           "preferenceid": "1",           "title": "xyz xyz",           "preferencetypeid": null,           "gender": null,           "index": 1,           "updatedat": 1,           "preferencevalues": [             {               "preferenceid": null,               "preferencevalueid": "2",               "preferencevalue": "30-60",               "gender": null,               "updatedat": 0             },             {               "preferenceid": null,               "preferencevalueid": "1",               "preferencevalue": "0-30",               "gender": null,               "updatedat": 0             }           ]         }       ]     }   ] 

Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -