Dao->Service->controller->前端
店铺名称、分类、店铺不能再改变
shopList(html\js\css)
controller:
getShopManagementInfo,getShopList,pageCalculator
效果图:
shopManagement页面:
商铺列表shopList:
-
知识点:
1. resultMap:结果映射,完成由字段到对象属性的映射,达到将查询结果封装为对象的目的。
type:指定要映射的实体类
id:指定该 resultMap 映射关系的名称
<id>标签:id 的字段名 column 与实体类的属性 property 间的映射关系
<result>标签:id 以外其它字段名 column 与实体类的属性 property 间的映射关系
<association>标签:两个实体对象间的关联关系(属性为实体类)
其中,标签property指定关联的属性,colomn是数据库中的字段名,javaType指关联属性的bean类型
当然,对于字段名与实体类的属性名相同的情况,可以不写入<resultMap/>中。(一般还是都写)
和resultType的区别:resultType要求查询出的列名和bean中属性名一致
2. Seesion:web开发中,服务器可以为每个用户浏览器创建一个会话对象(session),因此,需要保存数据时,服务器可以把用户信息写到用户浏览器独占的session中,会把session的一个id号以cookie的形式会写到客户机,只要客户端浏览器不关,再去访问服务器就会带着id去访问,tomcat默认的session有效期为30min。
本项目中,在registerShop中进行添加
1)通过session获取登陆后的用户信息,set到即将要添加的店铺的owner信息中去
2)店铺添加成功之后,加入到owner可以操作的店铺列表中
3. @Param标签(有待验证。。。)
用于多个参数,确定唯一的标识。
给参数命名,@Param("aaaa") String name,给入参 String name 命名为aaaa,然后sql语句....where s_name= #{aaaa} 中就可以根据aaaa得到参数值了。
当你使用了使用@Param注解来声明参数时,如果使用 #{} 或 ${} 的方式都可以。当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。${}还会引发sql注入。
4. sql的limit语句
用于限制结果返回的数量,用于分页查询。其中rowIndex是指从第几行开始,pageSize是指返回多少行。
5. count(1)和count(*):
都能查询总行数,count1其实就是第一列的行数,某些情况下可以加快查询效率。
-
问题
1. 在测试service层的ModifyShop代码时,修改操作成功但是在打印输出修改后店铺的图片信息时却报空指针异常
原因:在修改操作成功之后没有将修改后的shop返回给ShopExecution
![](https://i-blog.csdnimg.cn/blog_migrate/bc4c5e5dca3d4dbecebde5fc5cc2a429.png)
2. 在测试dao层的分页店铺查询时,testQueryShopListAndCount(),
原因:
在IShopDao.xml中,返回int时使用了resultMap
解决方法:将resultMap 改成 resultType,因为是基本数据类型,可以直接用resultType
3. 在完成店铺管理页面的前端设计之后,原计划是当不在url给出shopId的时候会重定向到店铺列表页面,但是我们进入之后并没有重定向。检查的时候发现后端的data并没有传到前台。
原因:可能是JSON数据格式不对,检查后端代码和前端代码的url
解决方法:发现在controller的getShopManagementInfo()方法并没有添加@ReponseBody注释。
该注释的作用:将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,将java的对象转换成json字符串的格式给前端解析。不会走视图解析器,不会返回页面,目前返回的json数据。如果不加,就走视图解析器,返回页面。