功能分析:
选择一个复选框点击编辑:
注意:因为内容列表查询的时候没有查询content字段,也就是富文本编辑框中的内容,所以我们点击【编辑】,就会发现富文本编辑框是空的,并没有我们添加内容时添加的内容文本。 这是为什么呢?
答:其实我们可以从获取内容列表的实现接口中List<TbContent> list = contentMapper.selectByExample(example);这段代码去查找端倪,既然是调用的selectByExample这个方法,我们便去Mybatis的TbContentMapper.xml文件当中去看下sql语句。如下图所示:
可以看到要查询的字段在Base_Column_List当中,我们再看看Base_Column_List当中的字段,发现并没有content字段,而content字段在Blob_Column_List中,如下图所示:
这么做的好处是:我们在查询内容列表的时候由于并不需要显示内容文本,而内容文本信息量可能是非常庞大的,如果把内容文本字段也一并查询出来的话,那么必定是很消耗性能的。
因此默认采取了不查询内容字段的方式进行内容列表的查询,所以我们点击【编辑】按钮的时候,数据回显时我们看见富文本框中没有显示内容。
解决方式一:其实查询内容列表时,我们可以使用上图的selectByExampleWithBLOBs这个查询方法,该查询方法查询内容列表的时候会将字段content也查询出来。如下图:
如果我们仅仅是查询内容列表而并不编辑内容的话,那么我们查询出来的字段content就没有用,所以浪费了带宽,使性能降低。
同时需要注意的是:我们更新内容的时候同样也要使用updateByPrimaryKeyWithBLOBs方法,否则,字段content不会被更新。
解决方式二:按需查询内容表,修改content.jsp编辑部分的代码,对于回显内容文本,$.post("/content/getContentText",{"id":data.id},function(rt){…},由于内容列表在加载的时候并没有加载content字段,因为content字段内容太多,所以我们点击【编辑】按钮的时候,使用ajax动态获取字段content内容。如下图:
同时也需要注意的是:我们更新内容的时候要使用updateByPrimaryKeyWithBLOBs方法,否则,字段content不会被更新。
我们回到编辑的页面content-edit.jsp如下,我们先注意下表单的两个隐藏域:
再来看看URL部分:
URL: /content/edit
参数:表单数据(TbContent 来接收)
返回值:TaotaoResult
业务逻辑:
根据id更新tb_content,可以使用逆向工程。(单表操作)
补全其他没有更新过来的属性。(created updated)
服务层发布服务(前面已经发布过了)。
表现层引入服务(调用服务方法,返回)。
1)Dao
单表更新内容数据,直接使用逆向工程生成的Mapper。
2)Service
我们使用上述的解决方案二。
ContentService接口代码:
* 更新内容
* @param content
* @return
*/
TaotaoResult updateContent(TbContent content);
/**
* 根据内容id获取内容文本
* @param id
* @return
*/
TaotaoResult getContentText(Long id);