搭建ssm踩坑

第一个坑

java.lang.NullPointerException
at com.cj.service.UserService.delete(UserService.java:34)
at com.cj.controller.UserController.delete(UserController.java:36)


删除的时候直接全删了。。。

@PostMapping("/delete")
    @ResponseBody
    public Map<String,Object> delete(String ids){
        int result = userService.delete(ids);
        if(result<=0){
            return MapController.getInstance().error().getMap();
        }
        return MapController.getInstance().success().getMap();
    }
    @PostMapping("/delete/{id}")
    @ResponseBody
    public Map<String ,Object> delete(@PathVariable("id") Integer id){
        int result = userService.delete(id);
        if(result <= 0) {
            return MapController.getInstance().error().getMap();
        }
        return MapController.getInstance().success().getMap();
    }
源码的删除是通过Id删除的。看了别人的博客,一般是Mapper映射文件出错,
发现是自己的xml配置文件出错了。
 <delete id="delete">
        delete from tb_user 
        <include refid="UserFindCriteria" />
    </delete>

在这里插入图片描述
少了一行判断id的映射语句,所以报了java.lang.NullPointerException 空指针异常,添加之后完美解决。

第二个坑

没有在spring-mvc中配置转换器,导致用postman发送请求的时候报 500 ,
No converter found for return value of type

首先需要导入两个包

 <!--spring将Map转为json对象的时依赖的两个包-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>

然后在spring-mvc.xml中添加一下语句

 <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<!--                以下是时间格式的转换-->
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                            <bean class="java.text.SimpleDateFormat">
                                <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
                            </bean>
                        </property>
                    </bean>
                </property>
                <!--                以上是时间格式的转换-->
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

完美解决

第三坑

Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and user_name = ‘alter’

SQL语句错了,于是又跑回去看Mapper的xml文件

细看一下,发现赋值粘贴粗心了,update操作判断都加入and,导致update更新失败,
在这里插入图片描述
修改xml文件的语句,post,成功发送请求。nice。

写在最后

如果启动 tomcat 的时候发现 dao 层下的Mapper文件没有加载的 classes 文件里,如下图
在这里插入图片描述
用 maven 搭建的项目
那么就需要到 pom.xml 里添加如下语句

<build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
    <finalName>student_study</finalName>
  </build>

在这里插入图片描述
每次编译的时候都重新编译配置文件,不然每次 去maven 里面 clean 一下还是挺麻烦的。
解释:
**/ 表示多级路径下,/*.xml 表示以.xml结尾的文件 ,如果是 /表示的是从根目录开始。./ 当前目录下 ,../上一个目录下的文件。
如果配置拦截器的时候/*/ 是不一样的,前者是拦截所有,后者是拦截除了以.jsp结尾的文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值