SpringMVCDemo中,遇到的问题

Posted kunpengv5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVCDemo中,遇到的问题相关的知识,希望对你有一定的参考价值。

配置上mybatis,增加dao层后,重新写查询页面,结果又遇到不少坑,全是学费。代码结构如下:

技术分享图片

1、Invalid bound statement (not found)

报错界面如下。mybatis好久不写,重温一下使用。明显是Mapper.xml与同名的Dao接口映射出现问题导致。

技术分享图片

排查过程如下:

1)检查xml文件所在package名称是否和Mapper interface所在的包名

2)<mapper namespace="me.tspace.pm.dao.UserDao"> 命名空间是否正确

3)UserDao的方法在UserDao.xml中没有,然后执行UserDao的方法会报此

4)UserDao的方法返回值是List<User>,而select元素没有正确配置ResultMap,或者只配置ResultType!

可是排查完上述过程,都没有解决掉。后来经同事点播。终于解决

解决办法:

在spring的配置文件中,配置扫描地址。前者配置扫描mapper,后者配置扫描dao层,然后相互关联对应。

技术分享图片

 

2、输入查询条件,查询不出来对应的结果

页面出来了,默认展示全部的结果。输入查询条件后,筛选出对应的值。但无论怎么输入,查询结果就是筛选不出来。

debug后,返回的List结果还是空。

 技术分享图片

排查思路:

1)mybatis中sql语句写错了吗

将mapper.xml中的sql语句,专门摘出来,放到mysql中查询,可以得到正确的结果。说明语句没有问题。

为了排查问题,特意将语句写的简单些。仍未果

技术分享图片

2)传错参数了?

 springMvc+mybatis,参数传递绑定,有比较成熟的一套逻辑。

前台页面输入String类型的name值,controller获取后,根据name值(可以自定义)自动绑定到entity实体类的属性中

经过controller层,service层,dao层,将对象实例,逐步传递到dao层。然后传入mapper.xml

mapper.xml根据传入的参数类型parameterType为实体类,将对应的表,表的字段与实体类的参数挨个绑定。并根据查询的参数#{name},从传入的实体类取出对应的属性值。

核对了一下之后,没有问题,排查未果。

3)又是乱码的问题吗?

 挨个排查,spring框架中,对于前端页面输入和后台返回的值编码,有专门的filter配置。在web.xml中已经配置过了。

配置内容如下:

  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

且根据debug的值,传入的值属性也是正确的编码,问题出在哪里呢?

目光继续聚焦在sql语句上,打印一下mapper中执行的sql语句吧。

配置方法如下:

a)首先在resources中的conf中,新建xml文件,内容如下:

技术分享图片

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 打印查询语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!-- mapper已经在spring-mybatis.xml中的sqlSessionFactory配置,这里不再需要配置 -->
    <!--     <mappers> -->
    <!--         <mapper resource="com/a/b/c/dao/BusinessInfoDaoMapper.xml" /> -->
    <!--     </mappers> -->
</configuration>

再回到spring的配置文件中。

 技术分享图片

    <!--4、持久化操作需要sqlSession,来自spring和mybatis的整合包-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--指定别名-->
        <property name="typeAliasesPackage" value="com.fruitsalesplatform.entity"/>
        <property name="mapperLocations" value="classpath:com.fruitsalesplatform.dao/*.xml"/>
        <property name="configLocation" value="classpath:conf/mybatis-config.xml"/>
    </bean>

配置完成后,查看打印的结果,并没有什么异常。

b) 在查询的表中,插入一下记录,为英文。英文可以查询出来!还是乱码的问题!

 只能再认真看一下数据库的配置,元凶出现了。在properties文件中用的&amp;

技术分享图片

果断改为

jdbc.url=jdbc:mysql://localhost:3306/fruit_manage?useUnicode=true&characterEncoding=utf-8

好,问题到此为止了 。::>_<::

以上是关于SpringMVCDemo中,遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVCdemo报404

SpringMVCdemo报404

如何在Sublime Text中添加代码片段

片段中 ListView 的 setOnItemClickListener

Wagtail - 在页面上呈现带有相关片段和标签的数据时遇到问题

Android中切换标签片段之间的延迟