今天遇到的问题总结
一.SprinMvc 的数据绑定问题
1.默认支持的类型
HttpServletRequest 对象,HttpServletResponse 对象,HttpSession 对象。这些对象在Controller的方法形参直接使用就可以,这些都是默认的声明。
2.基本数据的绑定
基本上前台有两种方式传递参数,一个是GET方法的url里面传参数,一个是POST方法通过表单提交,无论哪个。要提交的属性名字要和后台Controller的处理方法上的定义的形参的名字一样。
1.如通过GET方法:这里参数是name和password,注意看后台的login的方法的形参,也要和这个一样,否则会发生错误。
2.如通过POST方法,在表单里面的属性的名字一样要和后台的方法的形参名字一致,如果想不一样,可以使用@RequestParam(value="和表单的属性的名字一样")
3.POJO对象的绑定
一般都是表单通过POST提交了这种,比如在测试update接口时,后台那边接收的是User的POJO类型,那么表单提交的就要和实体类定义的字段名一样。
下面这个是User实体类的属性。
private Integer id; private String name; private String password; private String phone; private String email; private Integer role;
这个是测试时的定义的属性的名字,中午就是设置name为username搞得后台接收不到name,这里还有一个问题,后面再介绍。
二.SpringBoot的项目结构
1.Controller去哪里?
一开始,不熟悉SpringBoot,以为和以前SSM框架一样写好了Controller之后神奇地发现居然不Work,上网查才知道原来SpringBoot有个启动类,要在启动类那边扫描Controller和Service以及Mapper才可以,下面来看看吧。而且,Controller的包要和那个启动类所在的包同级。
2.SpringBoot的静态资源
1.在SpringBoot的项目结构里面没有以往的Webapp,静态资源和网页都放在resources下,看看下面的配置,静态页面放在templates里面。static可以放图片,css文件等。
2.然后在pom里面配置一下访问静态资源的jar包,如下:
<!--访问静态资源--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
3.最后还要配置一下Controller,写一个Controller来对请求转发一下就行啦。
@Controller public class DemoController { @RequestMapping("/index") public String upload(){ return "index"; } }
三.Mybatis操作
1.Mybatis的逆向工程
数据库真的要一开始就想好,不要随便改,否则逆向工程可不是那么简单就逆向的,会在你原来的Mapper文件上覆盖,自己写的sql也丢失,很惨的...
2.Mybatis生成的Mapper
1.updateByPrimaryKeySelective,这个更新方法时会帮你更新非空的字段,比如你单独设置更新名字,用这个,它就只管更新name这个属性到数据库。而且它生成的sql语句是先根据id去查找,找到数据在更新的。
2.所以在项目中,在注册的时候,要注意设置插入用户之后返回数据库的自增的主键,然后在更新的时候从session里面获取user的id以及前台传来更新的信息组成一个新的User然后更新就行了,具体设置如下:
<insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.POJO.User" >