当前位置: 首页 > news >正文

网站建设适用税种做毕业设计资料网站

网站建设适用税种,做毕业设计资料网站,宁波建网站公司哪家好,打开网站弹出广告代码SpringMVC是一种基于Java的Web框架#xff0c;它是Spring框架的一部分。SpringMVC通过使用MVC#xff08;Model-View-Controller#xff09;设计模式来组织和管理Web应用程序的开发。 在SpringMVC中#xff0c;Model代表数据模型#xff0c;View代表用户界面#xff0c;C… SpringMVC是一种基于Java的Web框架它是Spring框架的一部分。SpringMVC通过使用MVCModel-View-Controller设计模式来组织和管理Web应用程序的开发。 在SpringMVC中Model代表数据模型View代表用户界面Controller负责处理用户请求并协调Model和View之间的交互。这种分层架构使得代码更加清晰、可维护和可扩展。 一、项目创建 创建一个Maven项目项目名称为 : CloudJunzySSM  可以根据我的项目结构进行创建包配置接口类(当然也可以根据自己的习惯创建) 如果不知如何创建可以关注本人的博客 : IDEA开发工具的安装及使用 二、相关依赖 将所有的引用依赖导入项目中以下是所有依赖配置 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdCloudJunzySSM/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingnameCloudJunzySSM Maven Webapp/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetmaven.compiler.plugin.version3.7.0/maven.compiler.plugin.version!--添加jar包依赖--!--1.spring 5.0.2.RELEASE相关--spring.version5.0.2.RELEASE/spring.version!--2.mybatis相关--mybatis.version3.4.5/mybatis.version!--mysql--mysql.version5.1.44/mysql.version!--pagehelper分页jar依赖--pagehelper.version5.1.2/pagehelper.version!--mybatis与spring集成jar依赖--mybatis.spring.version1.3.1/mybatis.spring.version!--3.dbcp2连接池相关 druid--commons.dbcp2.version2.1.1/commons.dbcp2.versioncommons.pool2.version2.4.3/commons.pool2.version!--4.log日志相关--log4j2.version2.9.1/log4j2.versionlog4j2.disruptor.version3.2.0/log4j2.disruptor.versionslf4j.version1.7.13/slf4j.version!--5.其他--junit.version4.12/junit.versionservlet.version4.0.0/servlet.versionlombok.version1.18.2/lombok.versionmybatis.ehcache.version1.1.0/mybatis.ehcache.versionehcache.version2.10.0/ehcache.versionredis.version2.9.0/redis.versionredis.spring.version1.7.1.RELEASE/redis.spring.versionjackson.version2.9.3/jackson.versionjstl.version1.2/jstl.versionstandard.version1.1.2/standard.versiontomcat-jsp-api.version8.0.47/tomcat-jsp-api.versioncommons-fileupload.version1.3.3/commons-fileupload.versionhibernate-validator.version5.0.2.Final/hibernate-validator.versionshiro.version1.3.2/shiro.version/propertiesdependencies!--1.spring相关--dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-orm/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion${spring.version}/version/dependency!--2.mybatis相关--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion${mybatis.version}/version/dependency!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependency!--pagehelper分页插件jar包依赖--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion${pagehelper.version}/version/dependency!--mybatis与spring集成jar包依赖--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion${mybatis.spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context-support/artifactIdversion${spring.version}/version/dependency!--mybatis与ehcache整合--dependencygroupIdorg.mybatis.caches/groupIdartifactIdmybatis-ehcache/artifactIdversion${mybatis.ehcache.version}/version/dependency!--ehcache依赖--dependencygroupIdnet.sf.ehcache/groupIdartifactIdehcache/artifactIdversion${ehcache.version}/version/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion${redis.version}/version/dependencydependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-redis/artifactIdversion${redis.spring.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion${jackson.version}/version/dependency!--3.dbcp2连接池相关--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-dbcp2/artifactIdversion${commons.dbcp2.version}/versionexclusionsexclusionartifactIdcommons-pool2/artifactIdgroupIdorg.apache.commons/groupId/exclusion/exclusions/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion${commons.pool2.version}/version/dependency!--springmvc依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion${spring.version}/version/dependency!--4.log日志相关依赖--!-- log4j2日志相关依赖 --!-- log配置Log4j2 Slf4j --!-- slf4j核心包--dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion${slf4j.version}/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion${slf4j.version}/versionscoperuntime/scope/dependency!--核心log4j2jar包--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion${log4j2.version}/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion${log4j2.version}/version/dependency!--用于与slf4j保持桥接--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion${log4j2.version}/version/dependency!--web工程需要包含log4j-web非web工程不需要--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion${log4j2.version}/versionscoperuntime/scope/dependency!--需要使用log4j2的AsyncLogger需要包含disruptor--dependencygroupIdcom.lmax/groupIdartifactIddisruptor/artifactIdversion${log4j2.disruptor.version}/version/dependency!--5.其他--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/versionscopetest/scope/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion${servlet.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/versionscopeprovided/scope/dependencydependencygroupIdjstl/groupIdartifactIdjstl/artifactIdversion${jstl.version}/version/dependencydependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion${standard.version}/version/dependencydependencygroupIdorg.apache.tomcat/groupIdartifactIdtomcat-jsp-api/artifactIdversion${tomcat-jsp-api.version}/version/dependencydependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion${commons-fileupload.version}/version/dependencydependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion${hibernate-validator.version}/version/dependency!--shiro依赖--dependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-core/artifactIdversion${shiro.version}/version/dependencydependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-web/artifactIdversion${shiro.version}/version/dependencydependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-spring/artifactIdversion${shiro.version}/version/dependency/dependenciesbuildfinalNameCloudJunzySSM/finalNameresources!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--resourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes/resource!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--resourcedirectorysrc/main/resources/directoryincludesinclude*.properties/includeinclude*.xml/include/includes/resource/resourcespluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion${maven.compiler.plugin.version}/versionconfigurationsource${maven.compiler.source}/sourcetarget${maven.compiler.target}/targetencoding${project.build.sourceEncoding}/encoding/configuration/pluginplugingroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-maven-plugin/artifactIdversion1.3.2/versiondependencies!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependency/dependenciesconfigurationoverwritetrue/overwrite/configuration/pluginpluginartifactIdmaven-clean-plugin/artifactIdversion3.1.0/version/plugin!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --pluginartifactIdmaven-resources-plugin/artifactIdversion3.0.2/version/pluginpluginartifactIdmaven-compiler-plugin/artifactIdversion3.8.0/version/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion2.22.1/version/pluginpluginartifactIdmaven-war-plugin/artifactIdversion3.2.2/version/pluginpluginartifactIdmaven-install-plugin/artifactIdversion2.5.2/version/pluginpluginartifactIdmaven-deploy-plugin/artifactIdversion2.8.2/version/plugin/plugins/build /project其中的项目名称需要根据自己的项目名称进行修改 三、配置文件 将项目中的web.xml配置文件修改为3.1并且增加配置 ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1display-nameArchetype Created Web Application/display-name!-- Spring和web项目集成start --!-- spring上下文配置文件 --context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-context.xml/param-value/context-param!-- 读取Spring上下文的监听器 --listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener!-- Spring和web项目集成end --!-- 中文乱码处理 --filterfilter-nameencodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classasync-supportedtrue/async-supportedinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameencodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping!-- Spring MVC servlet --servletservlet-nameSpringMVC/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!--此参数可以不配置默认值为/WEB-INF/springmvc-servlet.xml--init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup!--web.xml 3.0的新特性是否支持异步--async-supportedtrue/async-supported/servletservlet-mappingservlet-nameSpringMVC/servlet-nameurl-pattern//url-pattern/servlet-mapping /web-app 以上代码会有部分报出编译错误无需担心只要把以下所有配置文件配置完成即可 3.1 generatorConfig.xml  ?xml version1.0 encodingUTF-8 ? !DOCTYPE generatorConfiguration PUBLIC -//mybatis.org//DTD MyBatis Generator Configuration 1.0//ENhttp://mybatis.org/dtd/mybatis-generator-config_1_0.dtd generatorConfiguration!-- 引入配置文件 --properties resourcejdbc.properties/!--指定数据库jdbc驱动jar包的位置--classPathEntry locationD:\\temp\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar/!-- 一个数据库一个context --context idinfoGuardian!-- 注释 --commentGeneratorproperty namesuppressAllComments valuetrue/!-- 是否取消注释 --property namesuppressDate valuetrue/ !-- 是否生成注释代时间戳 --/commentGenerator!-- jdbc连接 --jdbcConnection driverClass${jdbc.driver}connectionURL${jdbc.url} userId${jdbc.username} password${jdbc.password}/!-- 类型转换 --javaTypeResolver!-- 是否使用bigDecimal false可自动转化以下类型Long, Integer, Short, etc. --property nameforceBigDecimals valuefalse//javaTypeResolver!-- 01 指定javaBean生成的位置 --!-- targetPackage指定生成的model生成所在的包名 --!-- targetProject指定在该项目下所在的路径 --javaModelGenerator targetPackagecom.CloudJun.modeltargetProjectsrc/main/java!-- 是否允许子包即targetPackage.schemaName.tableName --property nameenableSubPackages valuefalse/!-- 是否对model添加构造函数 --property nameconstructorBased valuetrue/!-- 是否针对string类型的字段在set的时候进行trim调用 --property nametrimStrings valuefalse/!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法只有构造方法 --property nameimmutable valuefalse//javaModelGenerator!-- 02 指定sql映射文件生成的位置 --sqlMapGenerator targetPackagecom.CloudJun.mappertargetProjectsrc/main/java!-- 是否允许子包即targetPackage.schemaName.tableName --property nameenableSubPackages valuefalse//sqlMapGenerator!-- 03 生成XxxMapper接口 --!-- typeANNOTATEDMAPPER,生成Java Model 和基于注解的Mapper对象 --!-- typeMIXEDMAPPER,生成基于注解的Java Model 和相应的Mapper对象 --!-- typeXMLMAPPER,生成SQLMap XML文件和独立的Mapper接口 --javaClientGenerator targetPackagecom.CloudJun.mappertargetProjectsrc/main/java typeXMLMAPPER!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model true:com.oop.eksp.user.model.[schemaName] --property nameenableSubPackages valuefalse//javaClientGenerator!-- 配置表信息 --!-- schema即为数据库名 --!-- tableName为对应的数据库表 --!-- domainObjectName是要生成的实体类 --!-- enable*ByExample是否生成 example类 --!--table schema tableNamet_book domainObjectNameBook--!--enableCountByExamplefalse enableDeleteByExamplefalse--!--enableSelectByExamplefalse enableUpdateByExamplefalse--!--lt;!ndash; 忽略列不生成bean 字段 ndash;gt;--!--lt;!ndash; ignoreColumn columnFRED / ndash;gt;--!--lt;!ndash; 指定列的java数据类型 ndash;gt;--!--lt;!ndash; columnOverride columnLONG_VARCHAR_FIELD jdbcTypeVARCHAR / ndash;gt;--!--/table--table schema tableNamet_hotel domainObjectNameHotelenableCountByExamplefalse enableDeleteByExamplefalseenableSelectByExamplefalse enableUpdateByExamplefalse/table/context /generatorConfiguration其中          table schema tableNamet_hotel domainObjectNameHotel                enableCountByExamplefalse enableDeleteByExamplefalse                enableSelectByExamplefalse enableUpdateByExamplefalse         /table tableNamet_hotel中的t_hotel是数据库的表名称 domainObjectNameHotel中的Hotel是需要自动生成的实体名称。 3.2 jdbc.properties jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/mybatis_ssm?useUnicodetruecharacterEncodingUTF-8 jdbc.usernameroot jdbc.password1234563.3 log4j2.xml ?xml version1.0 encodingUTF-8?!-- status : 指定log4j本身的打印日志的级别.ALL Trace DEBUG INFO WARN ERROR FATAL OFF。 monitorInterval : 用于指定log4j自动重新配置的监测间隔时间单位是s,最小是5s. -- Configuration statusWARN monitorInterval30Properties!-- 配置日志文件输出目录 ${sys:user.home} --Property nameLOG_HOME/root/workspace/lucenedemo/logs/Propertyproperty nameERROR_LOG_FILE_NAME/root/workspace/lucenedemo/logs/error/propertyproperty nameWARN_LOG_FILE_NAME/root/workspace/lucenedemo/logs/warn/propertyproperty namePATTERN%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n/property/PropertiesAppenders!--这个输出控制台的配置 --Console nameConsole targetSYSTEM_OUT!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --ThresholdFilter leveltrace onMatchACCEPTonMismatchDENY /!-- 输出日志的格式 --!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称 %m : 日志内容即 logger.info(message) %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M : 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 --PatternLayout pattern${PATTERN} //Console!--文件会打印出所有信息这个log每次运行程序会自动清空由append属性决定这个也挺有用的适合临时测试用 --!--append为TRUE表示消息增加到指定文件中false表示消息覆盖指定的文件内容默认值是true --File namelog fileNamelogs/test.log appendfalsePatternLayoutpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n //File!-- 这个会打印出所有的info及以下级别的信息每次大小超过size 则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩作为存档 --RollingFile nameRollingFileInfo fileName${LOG_HOME}/info.logfilePattern${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch --ThresholdFilter levelinfo onMatchACCEPTonMismatchDENY /PatternLayoutpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n /Policies!-- 基于时间的滚动策略interval属性用来指定多久滚动一次默认是1 hour。 modulatetrue用来调整时间比如现在是早上3aminterval是4那么第一次滚动是在4am接着是8am12am...而不是7am. --!-- 关键点在于 filePattern后的日期格式以及TimeBasedTriggeringPolicy的interval 日期格式精确到哪一位interval也精确到哪一个单位 --!-- log4j2的按天分日志文件 : info-%d{yyyy-MM-dd}-%i.log --TimeBasedTriggeringPolicy interval1modulatetrue /!-- SizeBasedTriggeringPolicy:Policies子节点 基于指定文件大小的滚动策略size属性用来定义每个日志文件的大小. --!-- SizeBasedTriggeringPolicy size2 kB / --/Policies/RollingFileRollingFile nameRollingFileWarn fileName${WARN_LOG_FILE_NAME}/warn.logfilePattern${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.logThresholdFilter levelwarn onMatchACCEPTonMismatchDENY /PatternLayoutpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n /PoliciesTimeBasedTriggeringPolicy /SizeBasedTriggeringPolicy size2 kB //Policies!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件这里设置了20 --DefaultRolloverStrategy max20 //RollingFileRollingFile nameRollingFileError fileName${ERROR_LOG_FILE_NAME}/error.logfilePattern${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.logThresholdFilter levelerror onMatchACCEPTonMismatchDENY /PatternLayoutpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n /Policies!-- log4j2的按分钟 分日志文件 : warn-%d{yyyy-MM-dd-HH-mm}-%i.log --TimeBasedTriggeringPolicy interval1modulatetrue /!-- SizeBasedTriggeringPolicy size10 MB / --/Policies/RollingFile/Appenders!--然后定义logger只有定义了logger并引入的appenderappender才会生效 --Loggers!--过滤掉spring和mybatis的一些无用的DEBUG信息 --logger nameorg.springframework levelINFO/loggerlogger nameorg.mybatis levelINFO/logger!-- 第三方日志系统 --logger nameorg.springframework levelERROR /logger nameorg.hibernate levelERROR /logger nameorg.apache.struts2 levelERROR /logger namecom.opensymphony.xwork2 levelERROR /logger nameorg.jboss levelERROR /!-- 配置日志的根节点 --root levelallappender-ref refConsole /appender-ref refRollingFileInfo /appender-ref refRollingFileWarn /appender-ref refRollingFileError //root/Loggers/Configuration 3.4 spring-context.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!-- spring框架和mybatis进行整合的配置文件加载到spring的上下文中-- import resourceclasspath:spring-mybatis.xml/import/beans 3.5 spring-mybatis.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/txxmlns:aophttp://www.springframework.org/schema/aopxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd!--1. 注解式开发 --!-- 注解驱动 --context:annotation-config/!-- 用注解方式注入bean并指定查找范围com.CloudJun及子子孙孙包--context:component-scan base-packagecom.CloudJun/context:property-placeholder locationclasspath:jdbc.properties/bean iddataSource classorg.apache.commons.dbcp2.BasicDataSourcedestroy-methodcloseproperty namedriverClassName value${jdbc.driver}/property nameurl value${jdbc.url}/property nameusername value${jdbc.username}/property namepassword value${jdbc.password}/!--初始连接数--property nameinitialSize value10/!--最大活动连接数--property namemaxTotal value100/!--最大空闲连接数--property namemaxIdle value50/!--最小空闲连接数--property nameminIdle value10/!--设置为-1时如果没有可用连接连接池会一直无限期等待直到获取到连接为止。--!--如果设置为N毫秒则连接池会等待N毫秒等待不到则抛出异常--property namemaxWaitMillis value-1//bean!--4. spring和MyBatis整合 --!--1) 创建sqlSessionFactory--bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean!-- 指定数据源 --property namedataSource refdataSource/!-- 自动扫描XxxMapping.xml文件**是任意路径 --property namemapperLocations valueclasspath*:com/CloudJun/**/mapper/*.xml/!-- 指定别名 --property nametypeAliasesPackage valuecom/CloudJun/**/model/!--配置pagehelper插件--property namepluginsarraybean classcom.github.pagehelper.PageInterceptorproperty namepropertiesvaluehelperDialectmysql/value/property/bean/array/property/bean!--2) 自动扫描com/CloudJun/**/mapper下的所有XxxMapper接口(其实就是DAO接口)并实现这些接口--!-- 即可直接在程序中使用dao接口不用再获取sqlsession对象--bean classorg.mybatis.spring.mapper.MapperScannerConfigurer!--basePackage 属性是映射器接口文件的包路径。--!--你可以使用分号或逗号 作为分隔符设置多于一个的包路径--property namebasePackage valuecom/CloudJun/**/mapper/property namesqlSessionFactoryBeanName valuesqlSessionFactory//beanbean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource //beantx:annotation-driven transaction-managertransactionManager /aop:aspectj-autoproxy/ /beans3.6 spring-mvc.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvc xmlns:aophttp://www.springframework.org/schema/aopxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.3.xsd!--1) 扫描com.CloudJun及子子孙孙包下的控制器(扫描范围过大耗时)--context:component-scan base-packagecom.CloudJun/!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --mvc:annotation-driven /!--3) 创建ViewResolver视图解析器 --bean classorg.springframework.web.servlet.view.InternalResourceViewResolver!-- viewClass需要在pom中引入两个包standard.jar and jstl.jar --property nameviewClassvalueorg.springframework.web.servlet.view.JstlView/propertyproperty nameprefix value/WEB-INF/jsp//property namesuffix value.jsp//bean!--4) 单独处理图片、样式、js等资源 --!-- mvc:resources location/css/ mapping/css/**/mvc:resources location/js/ mapping/js/**/mvc:resources locationWEB-INF/images/ mapping/images/**/--!-- 处理static包里的所有静态资源 --mvc:resources location/static/ mapping/static/**/!--处理controller层发送请求到biz层会经过切面拦截处理--aop:aspectj-autoproxy/ /beans 其中有些会报编译错误需要将后端代码完成即可 创建名为CloudJun.tld (自定义分页并且配置)的配置文件 ?xml version1.0 encodingUTF-8 ?taglib xmlnshttp://java.sun.com/xml/ns/j2eexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsdversion2.0descriptionCloudJun 1.1 core library/descriptiondisplay-nameCloudJun core/display-nametlib-version1.1/tlib-versionshort-nameCloudJun/short-nameurihttp://jsp.veryedu.cn/uritagnamepage/nametag-classcom.CloudJun.tag.PageTag/tag-classbody-contentJSP/body-contentattributenamepageBean/namerequiredtrue/requiredrtexprvaluetrue/rtexprvalue/attribute/tag/taglib四、后端代码 配置完成在右侧的maven中找到相应的配置文件进行自动生成接口及实体和配置文件 不知道的可以根据我博客中的进行学习 : mybatis入门的环境搭建 PagerAspect 创建切面类 package com.CloudJun.aspect;import com.CloudJun.utils.PageBean; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component;import java.util.List;/*** author CloudJun* create  2023-08-25 16:26*/ Component Aspect public class PagerAspect {/** * *..*Service.*Pager(..)* * : 任何返回值* *.. : 任何包不限层级* *biz : 以Biz结尾的类或者接口* *Pager : 以Pager结尾的方法* (..) : 方法里有任意参数* 符合上述条件即为目标类或者方法*/Around(execution(* *..*biz.*Page(..)))public Object invoke(ProceedingJoinPoint args) throws Throwable {Object[] params args.getArgs();PageBean pageBean null;for (Object param : params) {if(param instanceof PageBean){pageBean (PageBean)param;break;}}if(pageBean ! null pageBean.isPagination())PageHelper.startPage(pageBean.getPage(),pageBean.getRows());Object list args.proceed(params);if(null ! pageBean pageBean.isPagination()){PageInfo pageInfo new PageInfo((List) list);pageBean.setTotal(pageInfo.getTotal());}return list;}}在自动生成的配置文件 HotelMapper.xml 中增加以下代码 select idselectHotelPage resultTypecom.CloudJun.model.Hotel parameterTypecom.CloudJun.model.Hotel select * from t_hotelwhereif testhname ! nulland hname like concat(%,#{hname},%)/if/where/select 在自动生成的接口 HotelMapper 中增加以下代码 ListHotel selectHotelPage(Hotel hotel); 在自动生成的实体类中重写ToString方法 在创建一个接口 Hotelbiz package com.CloudJun.biz;import com.CloudJun.model.Hotel; import com.CloudJun.utils.PageBean;import java.util.List;public interface Hotelbiz {int deleteByPrimaryKey(Long hid);int insert(Hotel record);int insertSelective(Hotel record);Hotel selectByPrimaryKey(Long hid);int updateByPrimaryKeySelective(Hotel record);int updateByPrimaryKey(Hotel record);ListHotel selectHotelPage(Hotel clazz, PageBean pageBean);} 自己在项目中共创建一个接口实现类 HotelbizImpl  package com.CloudJun.biz.impl;import com.CloudJun.biz.Hotelbiz; import com.CloudJun.mapper.HotelMapper; import com.CloudJun.model.Hotel; import com.CloudJun.utils.PageBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;/*** author CloudJun* create  2023-09-07 14:22*/ Service public class HotelbizImpl implements Hotelbiz {Autowiredprivate HotelMapper hotelMapper;Overridepublic int deleteByPrimaryKey(Long hid) {return hotelMapper.deleteByPrimaryKey(hid);}Overridepublic int insert(Hotel record) {return hotelMapper.insert(record);}Overridepublic int insertSelective(Hotel record) {return hotelMapper.insert(record);}Overridepublic Hotel selectByPrimaryKey(Long hid) {return hotelMapper.selectByPrimaryKey(hid);}Overridepublic int updateByPrimaryKeySelective(Hotel record) {return hotelMapper.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(Hotel record) {return hotelMapper.updateByPrimaryKey(record);}Overridepublic ListHotel selectHotelPage(Hotel hotel, PageBean pageBean) {return hotelMapper.selectHotelPage(hotel);}}PageBean创建一个分页工具类 package com.CloudJun.utils;import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.Map;public class PageBean implements Serializable {private static final long serialVersionUID 2422581023658455731L;//页码private int page1;//每页显示记录数private int rows10;//总记录数private int total0;//是否分页private boolean isPaginationtrue;//上一次的请求路径private String url;//获取所有的请求参数private MapString,String[] map;public PageBean() {super();}//设置请求参数public void setRequest(HttpServletRequest req) {String pagereq.getParameter(page);String rowsreq.getParameter(rows);String paginationreq.getParameter(pagination);this.setPage(page);this.setRows(rows);this.setPagination(pagination);this.urlreq.getContextPath()req.getServletPath();this.mapreq.getParameterMap();}public String getUrl() {return url;}public void setUrl(String url) {this.url url;}public MapString, String[] getMap() {return map;}public void setMap(MapString, String[] map) {this.map map;}public int getPage() {return page;}public void setPage(int page) {this.page page;}public void setPage(String page) {if(null!page!.equals(page.trim()))this.page Integer.parseInt(page);}public int getRows() {return rows;}public void setRows(int rows) {this.rows rows;}public void setRows(String rows) {if(null!rows!.equals(rows.trim()))this.rows Integer.parseInt(rows);}public int getTotal() {return total;}public void setTotal(int total) {this.total total;}public void setTotal(String total) {this.total Integer.parseInt(total);}public boolean isPagination() {return isPagination;}public void setPagination(boolean isPagination) {this.isPagination isPagination;}public void setPagination(String isPagination) {if(null!isPagination!.equals(isPagination.trim()))this.isPagination Boolean.parseBoolean(isPagination);}/*** 获取分页起始标记位置* return*/public int getStartIndex() {//(当前页码-1)*显示记录数return (this.getPage()-1)*this.rows;}/*** 末页* return*/public int getMaxPage() {int totalpagethis.total/this.rows;if(this.total%this.rows!0)totalpage;return totalpage;}/*** 下一页* return*/public int getNextPage() {int nextPagethis.page1;if(this.pagethis.getMaxPage())nextPagethis.getMaxPage();return nextPage;}/*** 上一页* return*/public int getPreivousPage() {int previousPagethis.page-1;if(previousPage1)previousPage1;return previousPage;}Overridepublic String toString() {return PageBean [page page , rows rows , total total , isPagination isPagination ];} }创建一个分页标签工具类 PageTag package com.CloudJun.tag;import com.CloudJun.utils.PageBean;import java.io.IOException; import java.util.Map; import java.util.Map.Entry; import java.util.Set;import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport;public class PageTag extends BodyTagSupport{private PageBean pageBean;// 包含了所有分页相关的元素public PageBean getPageBean() {return pageBean;}public void setPageBean(PageBean pageBean) {this.pageBean pageBean;}Overridepublic int doStartTag() throws JspException { // 没有标签体要输出内容JspWriter out pageContext.getOut();try {out.print(toHTML());} catch (IOException e) {e.printStackTrace();}return super.doStartTag();}private String toHTML() {StringBuffer sb new StringBuffer(); // 隐藏的form表单---这个就是上一次请求下次重新发的奥义所在 // 上一次请求的URLsb.append(form actionpageBean.getUrl() idpageBeanForm methodpost);sb.append( input typehidden namepage); // 上一次请求的参数MapString, String[] paramMap pageBean.getMap();if(paramMap ! null paramMap.size() 0) {SetEntryString, String[] entrySet paramMap.entrySet();for (EntryString, String[] entry : entrySet) { // 参数名String key entry.getKey(); // 参数值for (String value : entry.getValue()) { // 上一次请求的参数再一次组装成了新的Form表单 // 注意page参数每次都会提交我们需要避免if(!page.equals(key)) {sb.append( input typehidden namekey valuevalue );}}}}sb.append(/form);// 分页条sb.append(ul classpagination justify-content-center);sb.append( li classpage-item (pageBean.getPage() 1 ? disabled : )a classpage-link);sb.append( hrefjavascript:gotoPage(1)首页/a/li);sb.append( li classpage-item (pageBean.getPage() 1 ? disabled : )a classpage-link);sb.append( hrefjavascript:gotoPage(pageBean.getPreivousPage())lt;/a/li);// less than 小于号 // sb.append( li classpage-itema classpage-link href#1/a/li); // sb.append( li classpage-itema classpage-link href#2/a/li);sb.append( li classpage-item activea classpage-link href#pageBean.getPage()/a/li);sb.append( li classpage-item (pageBean.getPage() pageBean.getMaxPage() ? disabled : )a classpage-link hrefjavascript:gotoPage(pageBean.getNextPage())gt;/a/li);sb.append( li classpage-item (pageBean.getPage() pageBean.getMaxPage() ? disabled : )a classpage-link hrefjavascript:gotoPage(pageBean.getMaxPage())尾页/a/li);sb.append( li classpage-item go-inputb到第/binput classpage-link);sb.append( typetext idskipPage name /b页/b/li);sb.append( li classpage-item goa classpage-link);sb.append( hrefjavascript:skipPage()确定/a/li);sb.append( li classpage-itemb共pageBean.getTotal()条/b/li);sb.append(/ul);// 分页执行的JS代码sb.append(script typetext/javascript);sb.append( function gotoPage(page) {);sb.append( document.getElementById(pageBeanForm).page.value page;);sb.append( document.getElementById(pageBeanForm).submit(););sb.append( });sb.append( function skipPage() {);sb.append( var page document.getElementById(skipPage).value;);sb.append( if (!page || isNaN(page) || parseInt(page) 1 || parseInt(page) pageBean.getMaxPage()) {);sb.append( alert(请输入1~pageBean.getMaxPage()的数字););sb.append( return;);sb.append( });sb.append( gotoPage(page););sb.append( });sb.append(/script);return sb.toString();} }最后创建一个控制器 HotelController package com.CloudJun.web;import com.CloudJun.biz.Hotelbiz; import com.CloudJun.model.Hotel; import com.CloudJun.utils.PageBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest; import java.util.List;/*** author CloudJun* create  2023-09-07 14:24*/ Controller RequestMapping(/hot) public class HotelController {Autowiredprivate Hotelbiz hotelbiz;RequestMapping(/list)public String list(Hotel hotel, HttpServletRequest request){PageBean pageBean new PageBean();pageBean.setRequest(request);ListHotel hotels hotelbiz.selectHotelPage(hotel, pageBean);request.setAttribute(list,hotels);request.setAttribute(pageBean,pageBean);return hot/index;}RequestMapping(/del)public String del(Hotel hotel,HttpServletRequest request){hotelbiz.deleteByPrimaryKey(hotel.getHid());return redirect:list;}RequestMapping(/edit)public String edit(Hotel hotel,HttpServletRequest request){hotelbiz.updateByPrimaryKeySelective(hotel);return redirect:list;}RequestMapping(/add)public String add(Hotel hotel,HttpServletRequest request){hotelbiz.insertSelective(hotel);return redirect:list;}RequestMapping(/revise)public String getHid(Hotel hotel,HttpServletRequest request){if (hotel ! null hotel.getHid() ! null hotel.getHid() ! 0){Hotel h hotelbiz.selectByPrimaryKey(hotel.getHid());request.setAttribute(h,h);}return hot/edit;}}五、前端代码 在WEB-INF文件中创建一个static包以免配置文件报错 再创建一个JSP后台显示界面 名为: index.jsp % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8% % taglib urihttp://jsp.veryedu.cn prefixz% % taglib urihttp://java.sun.com/jsp/jstl/core prefixc% !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html headmeta http-equivContent-Type contenttext/html; charsetUTF-8linkhrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.cssrelstylesheetscriptsrchttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js/scripttitle酒店后台管理系统/titlestyle typetext/css.page-item input {padding: 0;width: 40px;height: 100%;text-align: center;margin: 0 6px;}.page-item input, .page-item b {line-height: 38px;float: left;font-weight: 400;}.page-item.go-input {margin: 0 10px;}/style /head body form classform-inlineaction${pageContext.request.contextPath }/hot/list methodpostdiv classform-group mb-2input typetext classform-control-plaintext namehnameplaceholder请输入书籍名称 %-- input namerows value10 typehidden--%!-- 不想分页 -- %-- input namepagination valuefalse typehidden--%/divbutton typesubmit classbtn btn-primary mb-2查询/buttona classbtn btn-primary mb-2 href${pageContext.request.contextPath }/hot/revise新增/a /formtable classtable table-stripedtheadtrth scopecol房间编号/thth scopecol房间名称/thth scopecol房间类型/thth scopecol操作/th/tr/theadtbodyc:forEach varh items${list }trtd${h.hid }/tdtd${h.hname }/tdtd${h.htype }/tdtda href${pageContext.request.contextPath }/hot/revise?hid${h.hid}修改/aa href${pageContext.request.contextPath }/hot/del?hid${h.hid}删除/a/td/tr/c:forEach/tbody /table !-- 这一行代码就相当于前面分页需求前端的几十行了 -- z:page pageBean${pageBean }/z:page/body /html 创建一个jsp编辑界面名称为 edit.jsp % page contentTypetext/html;charsetUTF-8 languagejava % % taglib urihttp://java.sun.com/jsp/jstl/core prefixc% html headtitle酒店管理编辑界面/title /head body form action${pageContext.request.contextPath }/hot/${empty h ? add : edit} methodpost房间编号:input typetext ${h!null?disabled:} namehid value${h.hid }br房间名称:input typetext namehname value${h.hname }br房间类型:input typetext namehtype value${h.htype }brinput typesubmit /form /body /html六、功能测试 最后开启服务器在浏览器中请求以下地址( 请求地址是根据自己配置来进行访问的 ):                                         http://localhost:8080/ssm/hot/list 访问后的显示效果为以下界面 :  增 修 删 查 给我们带来的收获 学习使用SpringMVC完成CRUD可以给我们带来以下收获 1. 理解MVC架构SpringMVC是基于MVCModel-View-Controller架构的框架通过学习使用SpringMVC完成CRUD可以更加深入地理解MVC架构的原理和优势。2. 掌握Web开发的基本原理SpringMVC是一种用于构建Web应用程序的框架学习使用SpringMVC完成CRUD可以帮助我们掌握Web开发的基本原理包括请求-响应模型、URL映射、请求参数处理等。3. 提高代码的可维护性SpringMVC提供了一套规范和约定通过学习使用SpringMVC完成CRUD可以帮助我们编写更加结构化和可维护的代码提高代码的可读性和可维护性。4. 学习使用Spring框架的其他功能SpringMVC是Spring框架的一部分学习使用SpringMVC完成CRUD可以帮助我们了解和使用Spring框架的其他功能如依赖注入、AOP等。5. 提高开发效率SpringMVC提供了很多便捷的功能和工具如数据绑定、表单验证、异常处理等学习使用SpringMVC完成CRUD可以提高开发效率减少重复劳动。 总之学习使用SpringMVC完成CRUD可以帮助我们提升自己的Web开发能力掌握一种流行的Web框架并且提高代码的可维护性和开发效率。
http://icebutterfly214.com/news/22224/

相关文章:

  • 2025年200元左右美白精华产品推荐:基于成分与肤感的深度评测排行榜
  • 中电金信​​:「AI智变」这个AI自动化工厂,助力模型高质效落地
  • 英伟达DCGM说明和安装
  • 手把手教你在unity中实现一个视觉小说系统(一)
  • 微信银行组件接口
  • 2025年无火焰泄压阀厂家权威推荐榜单:无火焰泄爆装置/重复式无火焰泄爆装置/重复式无火焰泄爆阀源头厂家精选
  • 2025 年 11 月机制板厂家推荐排行榜,机制板,机制板厂家,机制板销售厂家,机制板公司推荐,专业品质与高效供应口碑之选
  • 2025年健身房泳池优质厂家权威推荐榜单:泳池水循环设备/会所泳池/泳池恒温恒湿设备源头厂家精选
  • BSP的概念
  • 2025年不锈钢塑料颗粒料仓权威推荐榜单:不锈钢储料仓/镁铝合金料仓/大容量卧式储料仓源头厂家精选
  • 2025年无刷电机侧绕机权威推荐榜单:VCM侧绕机/电机绕线机/无刷电机绕线机源头厂家精选
  • 2025年11月中国AI关键词排名优化公司榜:五强实测数据与口碑排名
  • 初学:运用工具进行SQL注入
  • 2025年中频熔炼炉厂家推荐:浙江湘达机电,铜中频熔炼炉/铝中频熔炼炉/金中频熔炼炉/银中频熔炼炉/覆盖多金属加工场景
  • 爱思益联系方式: 理性评估服务与费用
  • 2025年升降压充电管理IC权威推荐榜单:镍氢电池充电管理IC/铅酸电池充电管理IC/升压充电芯片源头厂家精选
  • 损失函数之焦点损失函数
  • 2025年广东叛逆机构权威推荐榜单:素质教育/早恋教育/厌学源头机构精选
  • 2025年比较好的武汉钢模板品牌厂家排行榜
  • 2025年评价高的数据中心展观众登记
  • 2025年优质的冷拔丝优质厂家推荐榜单
  • 总部与分支机构文件传输的高效管理与安全保障策略
  • 小程序 事件管理
  • 2025年质量好的净化工程厂家推荐及选购参考榜
  • 人工智能:大语言模型或为死胡同?拆解AI发展的底层逻辑、争议与未来方向
  • 【系列开篇】从零构建智能字幕校准系统:一个AI+微服务的完整实战之旅
  • 发现的工具以及网页
  • 2025年比较好的工业高速相机热门厂家推荐榜单
  • 量化选股与量化交易第849篇:通达信随主沉浮 - Leone
  • 2025年口碑好的医用净化板TOP实力厂家推荐榜