前面分享了一些学习grails的心得,可是grails的知识还远不止这些,这次整理了一点有关grails一对多双向关联关系的知识。我认为这样的关联用的地方太多了,这次准备的样例是城市和区域的相关样例。
1.领域模型
class CityInfo { static hasMany = [area:AreaInfo] static fetchMode = [area:'lazy'] Integer id; String name; String code; static mapping = { table 'm_city' } }
class AreaInfo { static belongsTo=[city:CityInfo] Integer id; String name; String areaCode; static mapping = { table 'm_area' areaCode column:'areaCode' city column: 'cityId' } }
2.创建控制器和视图
这个步骤就不说了,直接使用intellij IDE就能够自己主动为我们生成控制器和视图了。先来看看生成的控制器能不能用
这说明生成的控制器没有问题,以下加入一个方法用来保存城市和区域信息
//保存城市和区域信息 @Transactional def saveCityAndArea(){ def a=new AreaInfo() a.setName("西山区") a.setAreaCode("XS") //Set<AreaInfo> s=new HashSet<AreaInfo>() // s.add(a) def c=new CityInfo() c.setName("昆明市") c.setCode("KM") c.save() a.setCity(c) a.save() render "数据保存成功" }
接下来我也写了个方法,用来查询对于城市的区域信息:
//查询城市信息 def queryCity(){ def city=CityInfo.findById(params.id) Set<AreaInfo> area=city.getArea() Iterator<AreaInfo> it=area.iterator() def buf=new StringBuffer() while(it.hasNext()){ AreaInfo info=it.next() buf.append(info.getName()+",") } render buf.toString() }