# BookShop_SpringMVC **Repository Path**: fowner/BookShop_SpringMVC ## Basic Information - **Project Name**: BookShop_SpringMVC - **Description**: 对书城项目(BookShop)进行SpringMVC化 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-12-07 - **Last Updated**: 2022-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 图书商城SpringMVC化 ## SpringMvc环境的基础搭建 ### 1.复制BookShop项目 1. 首先复制BookShop项目,把名称改为BookShop_SpringMVC 2. 根据IDEA提示,删除原来的git版本管理 3. 重新对BookShop_Spring进行git初始化 4. 重新配置tomcat的上下文 5. 启动服务器,确认画面没有问题 6. 提交到本地仓库,作为修改的基础版本 ### 2.导入SpringMVC依赖 mvc模块已经把sprig的core,aop的等包进行了依赖所以直接依赖webmvc模块即可。 pom.xml ```xml org.springframework spring-webmvc 4.3.23.RELEASE ``` ### 3.web.xml中配置SpringMVC的监听器,前端控制器 web.xml ```xml org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/applicationContext.xml DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation 1 DispatcherServlet / ``` ### 4.配置Spring的自动扫描和注解支持以及视图解析器的相关配置 配置文件的名称要和3.中启动参数的路径和名称一致(/WEB-INF/applicationContext.xml) applicationContext.xml ```xml ``` ### 5.创建helloController类文件 helloController.java ```java package com.dream.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author 匠人码农 * @date 2020/12/05 16:47 * 概要: * 疏通SpringMVC * 请求url:http://localhost:8080/BookShop_SpringMVC/hello * 响应页面: * */ @Controller public class helloController { @RequestMapping("hello") public String hello(){ return "hello"; } } ``` ### 6.在webapp/pages/目录下创建hello.jsp hello.jsp ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> title

hello SpringMVC!!

``` ### 7.疏通确认 + 启动tomcat + 浏览器中输入URL:http://localhost:8080/BookShop_SpringMVC/hello + 确认返回结果 ## 首先对用户模块的的登录功能进行SpringMVC的重构 ### 1.创建userController类并创建login方法 内容要点如下 + 1.创建类userController + 2.创建方法login + 3.把原来UserServlet的login方法的内容复制到controller的login方法 + 4.在类名上使用注解@Controller + 5.在方法名上使用注解@RequestMapping + 6.在service成员变量上使用@Autowire,同时还要在UserServiceImpl类上使用@Service + 7.修改复制过来的login方法内容(主要是响应页面的返回) + 8.修改login.jsp的登录按钮的action名称,改为login。 # 总结 ## 1.SpringMVC后台获取前台数据的方式,以及前台传值的方式 ### 方式1:通过对象类型进行参数的接收 ### 方式2:通过注解@RequestParam ## 2.SpringMVC后台数据传给前台的方式以及前台取值的方式 ### 方式一:使用Model model.addattribute("",""); 相当于 request.setAttribute("",""); ----------- Spring MVC 默认采用的是转发来定位视图,如果要使用重定向,可以如下操作 1、使用RedirectView 2、使用redirect:前缀 Java代码 收藏代码 public ModelAndView login(){ RedirectView view = new RedirectView("regirst.do"); return new ModelAndView(view); } 或者用如下方法,工作中常用的方法: Java代码 收藏代码 public String login(){ return "redirect:regirst.do"; } ================================================================================- # Mybatis学习笔记 ## 持久层演变历史 ### 普通操作数据库流程 + 1.编写sql + 2.预编译 + 3.设置参数 + 4.执行sql + 5.封装结果 ### 操作数据库的工具演变 JDBC -> Dbutils(QueryRunner) -> JdbcTemplate(Spring框架) -> 框架(整套解决方案) ### 框架解决方案 #### 1.Hibernate(全自动) 框架把1.2.3.4.5全部实现了。只需要传入javaBean,最后传出结果。 定制sql 需要学习HQL Hibernate缺点 1.定制sql需要学习HQL。提高成本。 2.Hibernate自动实现sql 而Mybatis框架实现(半自动) 框架实现2.3.4.5 1由开发人员进行开发即可。 #Spring + SpringMVC + Mybatis的整合即SSM 1.整合遇到的问题 ``` /Users/njzy/Tool/tomcat8/bin/catalina.sh run [2021-01-29 10:52:41,095] Artifact BookShop_SpringMVC:war exploded: Waiting for server connection to start artifact deployment... 29-Jan-2021 22:52:41.698 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/8.5.59 29-Jan-2021 22:52:41.699 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Oct 6 2020 16:57:18 UTC 29-Jan-2021 22:52:41.699 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 8.5.59.0 29-Jan-2021 22:52:41.699 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Mac OS X 29-Jan-2021 22:52:41.699 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 10.15.7 29-Jan-2021 22:52:41.699 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: x86_64 29-Jan-2021 22:52:41.699 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/jre 29-Jan-2021 22:52:41.701 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_241-b07 29-Jan-2021 22:52:41.701 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 29-Jan-2021 22:52:41.701 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /Users/njzy/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/b9539cd5-016a-4227-a375-005a2b5cfcf3 29-Jan-2021 22:52:41.701 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /Users/njzy/Tool/tomcat8 29-Jan-2021 22:52:41.701 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/Users/njzy/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/b9539cd5-016a-4227-a375-005a2b5cfcf3/conf/logging.properties 29-Jan-2021 22:52:41.701 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote= 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.password.file=/Users/njzy/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/b9539cd5-016a-4227-a375-005a2b5cfcf3/jmxremote.password 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.access.file=/Users/njzy/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/b9539cd5-016a-4227-a375-005a2b5cfcf3/jmxremote.access 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs= 29-Jan-2021 22:52:41.702 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/Users/njzy/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/b9539cd5-016a-4227-a375-005a2b5cfcf3 29-Jan-2021 22:52:41.703 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/Users/njzy/Tool/tomcat8 29-Jan-2021 22:52:41.703 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/Users/njzy/Tool/tomcat8/temp 29-Jan-2021 22:52:41.703 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/Users/njzy/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.] 29-Jan-2021 22:52:41.779 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"] 29-Jan-2021 22:52:41.792 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 29-Jan-2021 22:52:41.803 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 406 ms 29-Jan-2021 22:52:41.820 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 29-Jan-2021 22:52:41.820 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.59 29-Jan-2021 22:52:41.825 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 29-Jan-2021 22:52:41.831 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 28 ms Connected to server [2021-01-29 10:52:42,200] Artifact BookShop_SpringMVC:war exploded: Artifact is being deployed, please wait... 29-Jan-2021 22:52:43.649 INFO [RMI TCP Connection(2)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 29-Jan-2021 22:52:43.678 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Root WebApplicationContext: initialization started 29-Jan-2021 22:52:44.371 INFO [MLog-Init-Reporter] com.mchange.v2.log.MLog. MLog clients using java 1.4+ standard logging. 29-Jan-2021 22:52:44.400 INFO [RMI TCP Connection(2)-127.0.0.1] com.mchange.v2.c3p0.C3P0Registry. Initializing c3p0-0.9.5.5 [built 11-December-2019 22:18:33 -0800; debug? true; trace: 10] 29-Jan-2021 22:52:44.619 WARNING [RMI TCP Connection(2)-127.0.0.1] org.springframework.context.support.AbstractApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloController': Unsatisfied dependency expressed through field 'helloService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloServiceImpl': Unsatisfied dependency expressed through field 'userMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userMapper' defined in file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/com/dream/mapper/UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] 29-Jan-2021 22:52:44.622 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Context initialization failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloController': Unsatisfied dependency expressed through field 'helloService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloServiceImpl': Unsatisfied dependency expressed through field 'userMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userMapper' defined in file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/com/dream/mapper/UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4689) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5155) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1719) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:286) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:286) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468) at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) at java.security.AccessController.doPrivileged(Native Method) at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408) at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) at sun.rmi.transport.Transport$1.run(Transport.java:200) at sun.rmi.transport.Transport$1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helloServiceImpl': Unsatisfied dependency expressed through field 'userMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userMapper' defined in file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/com/dream/mapper/UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 62 more Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userMapper' defined in file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/com/dream/mapper/UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1518) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1401) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 75 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1503) ... 86 more Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:613) at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:491) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ... 96 more Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml]'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123) at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95) at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:611) ... 99 more Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/njzy/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:1014) at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:970) at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:768) at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:297) at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:113) at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:138) at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:131) at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:121) ... 101 more 29-Jan-2021 22:52:44.625 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file 29-Jan-2021 22:52:44.632 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [/BookShop_SpringMVC_war_exploded] startup failed due to previous errors [2021-01-29 10:52:44,645] Artifact BookShop_SpringMVC:war exploded: Error during artifact deployment. See server log for details. 29-Jan-2021 22:52:51.829 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/Users/njzy/Tool/tomcat8/webapps/manager] 29-Jan-2021 22:52:51.862 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/Users/njzy/Tool/tomcat8/webapps/manager] has finished in [32] ms ``` + 问题关键点 Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.dream.mapper.UserMapper.selectUserById. please check mybatis/mapper/UserMapper.xml and file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/UserMapper.xml] 大概意思就是:映射语句集已经包含值了。 也就是说语句集定义重复了。 + 问题分析 由于下面两个地方都对mapper的实现进行了配置,属于配置重复。 ```xml 1.applicationContext.xml // 中的 // 就是对mapper实现进行配置的。 ``` 然而又在mybatis-config.xml中进行了配置。 ```xml ``` 分析得出: 以上定义的两个地方保留一处即可。 ## 问题2 + 日志 ``` org.apache.jasper.JasperException: An exception occurred processing [/index.jsp] at line [3] 1: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2: 3: 4: <%----%> Stacktrace: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.dream.filter.TransactionFilter.doFilter(TransactionFilter.java:22) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:544) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:616) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException ### The error may exist in file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/BookMapper.xml] ### The error may involve com.dream.dao.BookDao.queryForItems ### The error occurred while handling results ### SQL: select id,name,author,price,sales,stock,image_path imgPath,delflg,createtime,updatetime from t_book where delflg <> '1' limit ?,? ### Cause: java.lang.UnsupportedOperationException at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:713) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:462) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:387) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:315) at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:742) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:712) at org.apache.jsp.index_jsp._jspService(index_jsp.java:112) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) ... 28 more Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException ### The error may exist in file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/BookMapper.xml] ### The error may involve com.dream.dao.BookDao.queryForItems ### The error occurred while handling results ### SQL: select id,name,author,price,sales,stock,image_path imgPath,delflg,createtime,updatetime from t_book where delflg <> '1' limit ?,? ### Cause: java.lang.UnsupportedOperationException at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy20.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) at com.sun.proxy.$Proxy21.queryForItems(Unknown Source) at com.dream.service.impl.BookServiceImpl.page(BookServiceImpl.java:125) at com.dream.controller.ClientBookController.page(ClientBookController.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ... 47 more Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException ### The error may exist in file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/BookMapper.xml] ### The error may involve com.dream.dao.BookDao.queryForItems ### The error occurred while handling results ### SQL: select id,name,author,price,sales,stock,image_path imgPath,delflg,createtime,updatetime from t_book where delflg <> '1' limit ?,? ### Cause: java.lang.UnsupportedOperationException at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 69 more Caused by: java.lang.UnsupportedOperationException at org.apache.ibatis.reflection.wrapper.CollectionWrapper.findProperty(CollectionWrapper.java:48) at org.apache.ibatis.reflection.MetaObject.findProperty(MetaObject.java:85) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createAutomaticMappings(DefaultResultSetHandler.java:532) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:556) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:402) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:354) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:328) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ... 75 more org.apache.jasper.JasperException: An exception occurred processing [/index.jsp] at line [3] 1: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2: 3: 4: <%----%> Stacktrace: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:617) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.dream.filter.TransactionFilter.doFilter(TransactionFilter.java:22) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:544) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:616) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException ### The error may exist in file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/BookMapper.xml] ### The error may involve com.dream.dao.BookDao.queryForItems ### The error occurred while handling results ### SQL: select id,name,author,price,sales,stock,image_path imgPath,delflg,createtime,updatetime from t_book where delflg <> '1' limit ?,? ### Cause: java.lang.UnsupportedOperationException at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:713) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:462) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:387) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:315) at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:742) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:712) at org.apache.jsp.index_jsp._jspService(index_jsp.java:112) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) ... 28 more Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException ### The error may exist in file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/BookMapper.xml] ### The error may involve com.dream.dao.BookDao.queryForItems ### The error occurred while handling results ### SQL: select id,name,author,price,sales,stock,image_path imgPath,delflg,createtime,updatetime from t_book where delflg <> '1' limit ?,? ### Cause: java.lang.UnsupportedOperationException at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy20.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) at com.sun.proxy.$Proxy21.queryForItems(Unknown Source) at com.dream.service.impl.BookServiceImpl.page(BookServiceImpl.java:125) at com.dream.controller.ClientBookController.page(ClientBookController.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ... 47 more Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException ### The error may exist in file [/Users/zhichengfan/IdeaProjects/BookShop_SpringMVC/target/BookShop_SpringMVC/WEB-INF/classes/mybatis/mapper/BookMapper.xml] ### The error may involve com.dream.dao.BookDao.queryForItems ### The error occurred while handling results ### SQL: select id,name,author,price,sales,stock,image_path imgPath,delflg,createtime,updatetime from t_book where delflg <> '1' limit ?,? ### Cause: java.lang.UnsupportedOperationException at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 69 more Caused by: java.lang.UnsupportedOperationException at org.apache.ibatis.reflection.wrapper.CollectionWrapper.findProperty(CollectionWrapper.java:48) at org.apache.ibatis.reflection.MetaObject.findProperty(MetaObject.java:85) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createAutomaticMappings(DefaultResultSetHandler.java:532) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:556) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:402) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:354) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:328) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ... 75 more 01-Feb-2021 21:24:27.961 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/Users/zhichengfan/Tool/tomcat8/webapps/manager] 01-Feb-2021 21:24:28.028 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/Users/zhichengfan/Tool/tomcat8/webapps/manager] has finished in [62] ms ``` + 解决方案 当查询结果为List时,不能在resultType的值中写成"java.util.List",而应该写成具体的List的具体类型比如"String" + 改正前 ``` ``` + 改正后 ``` ``` ### Mapper中SQL的符号的使用方法总结 使用 例:不等于 ```xml ]]> ``` ### Mapper中返回值类型的设定和请求参数的使用 + paramType + 单个参数 1. + 复数个参数 1. JavaBean传参 2. Map传参 3. 注解@Param传参 4. 顺序传参 + resultType 1.返回值为基本数据类型 dao接口方法 int count(); 返回类型 resultType="int" 2.返回值为对象类型 dao接口方法 Book queryBookById(Integer id); 返回类型 resultType="com.dream.bean.Book" 3.返回值为List dao接口方法 List queryBooks(); 返回类型 resultType="com.dream.bean.Book" 4.返回值为Map