96SEO 2026-02-23 11:50 8
向生成增删改查2.2.aspect切面层2.3.Mybatis

generator逆向生成2.4.根据生成代码编写Biz层与实现类
三、controller层代码编写四、前台代码与分页代码五、案例测试
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/modelVersiongroupIdcom.niyin/groupIdartifactIdzjlzy_ssm/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingnamezjlzy_ssm
--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日志相关依赖--!--
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/dependenciesbuildfinalNamezjlzy_ssm/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!--
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
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://47.100.191.44:3308/mybatis_ssm?useUnicodetruecharacterEncodingUTF-8
1.0//ENhttp://mybatis.org/dtd/mybatis-generator-config_1_0.dtd
resourcejdbc.properties/!--指定数据库jdbc驱动jar包的位置--classPathEntry
locationD:\\temp1\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar/!--
driverClass${jdbc.driver}connectionURL${jdbc.url}
valuefalse//javaTypeResolver!--
targetPackagecom.niyin.modeltargetProjectsrc/main/java!--
是否允许子包即targetPackage.schemaName.tableName
valuefalse//javaModelGenerator!--
targetPackagecom.niyin.mappertargetProjectsrc/main/java!--
是否允许子包即targetPackage.schemaName.tableName
targetPackagecom.niyin.mappertargetProjectsrc/main/java
是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model
true:com.oop.eksp.user.model.[schemaName]
valuefalse//javaClientGenerator!--
domainObjectNameBook--!--enableCountByExamplefalse
enableDeleteByExamplefalse--!--enableSelectByExamplefalse
enableUpdateByExamplefalse--!--lt;!ndash;
domainObjectNamebookenableCountByExamplefalse
enableDeleteByExamplefalseenableSelectByExamplefalse
enableUpdateByExamplefalse/table!--table
tableNamet_hibernate_book_category
domainObjectNameHBookCategoryenableCountByExamplefalse
enableDeleteByExamplefalseenableSelectByExamplefalse
enableUpdateByExamplefalse/tabletable
domainObjectNameOrderenableCountByExamplefalse
enableDeleteByExamplefalseenableSelectByExamplefalse
enableUpdateByExamplefalse/tabletable
tableNamet_hibernate_order_item
domainObjectNameOrderitemenableCountByExamplefalse
enableDeleteByExamplefalseenableSelectByExamplefalse
enableUpdateByExamplefalse/table
/generatorConfiguration③log4j2.xml
用于指定log4j自动重新配置的监测间隔时间单位是s,最小是5s.
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
%msg%n/property/PropertiesAppenders!--这个输出控制台的配置
控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
//Console!--文件会打印出所有信息这个log每次运行程序会自动清空由append属性决定这个也挺有用的适合临时测试用
--!--append为TRUE表示消息增加到指定文件中false表示消息覆盖指定的文件内容默认值是true
appendfalsePatternLayoutpattern%d{yyyy-MM-dd
这个会打印出所有的info及以下级别的信息每次大小超过size
则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩作为存档
fileName${LOG_HOME}/info.logfilePattern${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch
/PatternLayoutpattern%d{yyyy-MM-dd
基于时间的滚动策略interval属性用来指定多久滚动一次默认是1
modulatetrue用来调整时间比如现在是早上3aminterval是4那么第一次滚动是在4am接着是8am12am...而不是7am.
filePattern后的日期格式以及TimeBasedTriggeringPolicy的interval
SizeBasedTriggeringPolicy:Policies子节点
基于指定文件大小的滚动策略size属性用来定义每个日志文件的大小.
--/Policies/RollingFileRollingFile
fileName${WARN_LOG_FILE_NAME}/warn.logfilePattern${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.logThresholdFilter
/PatternLayoutpattern%d{yyyy-MM-dd
/PoliciesTimeBasedTriggeringPolicy
DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件这里设置了20
fileName${ERROR_LOG_FILE_NAME}/error.logfilePattern${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.logThresholdFilter
/PatternLayoutpattern%d{yyyy-MM-dd
warn-%d{yyyy-MM-dd-HH-mm}-%i.log
--/Policies/RollingFile/Appenders!--然后定义logger只有定义了logger并引入的appenderappender才会生效
--Loggers!--过滤掉spring和mybatis的一些无用的DEBUG信息
//root/Loggers/Configuration④spring-mybatis.xml
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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd!--1.
--context:annotation-config/!--
用注解方式注入bean并指定查找范围com.javaxl.ssm及子子孙孙包--context:component-scan
base-packagecom.niyin/context:property-placeholder
locationclasspath:jdbc.properties/bean
classorg.apache.commons.dbcp2.BasicDataSourcedestroy-methodcloseproperty
value${jdbc.password}/!--初始连接数--property
value10/!--设置为-1时如果没有可用连接连接池会一直无限期等待直到获取到连接为止。
--!--如果设置为N毫秒则连接池会等待N毫秒等待不到则抛出异常--property
classorg.mybatis.spring.SqlSessionFactoryBean!--
valueclasspath*:com/niyin/**/mapper/*.xml/!--
valuecom/niyin/**/model/!--配置pagehelper插件--property
classcom.github.pagehelper.PageInterceptorproperty
namepropertiesvaluehelperDialectmysql/value/property/bean/array/property/bean!--2)
自动扫描com/javaxl/ssm/**/mapper下的所有XxxMapper接口(其实就是DAO接口)并实现这些接口--!--
即可直接在程序中使用dao接口不用再获取sqlsession对象--bean
classorg.mybatis.spring.mapper.MapperScannerConfigurer!--basePackage
valuecom/niyin/**/mapper/property
valuesqlSessionFactory//beanbean
classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty
transaction-managertransactionManager
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.xsdimport
resourceclasspath:spring-mybatis.xml/import
xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:aophttp://www.springframework.org/schema/aopxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd!--1)
扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大耗时)--context:component-scan
此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter
classorg.springframework.web.servlet.view.InternalResourceViewResolver!--
viewClass需要在pom中引入两个包standard.jar
nameviewClassvalueorg.springframework.web.servlet.view.JstlView/propertyproperty
mapping/static/**/--aop:aspectj-autoproxy//beans
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
--context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-context.xml/param-value/context-param!--
--listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener!--
--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!--
--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
javax.servlet.http.HttpServletRequest;
2422581023658455731L;//页码private
isPaginationtrue;//上一次的请求路径private
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
{if(null!page!.equals(page.trim()))this.page
{if(null!rows!.equals(rows.trim()))this.rows
Integer.parseInt(total);}public
{if(null!isPagination!.equals(isPagination.trim()))this.isPagination
Boolean.parseBoolean(isPagination);}/***
(this.getPage()-1)*this.rows;}/***
totalpagethis.total/this.rows;if(this.total%this.rows!0)totalpage;return
nextPagethis.page1;if(this.pagethis.getMaxPage())nextPagethis.getMaxPage();return
previousPagethis.page-1;if(previousPage1)previousPage1;return
com.github.pagehelper.PageHelper;
com.github.pagehelper.PageInfo;
org.aspectj.lang.ProceedingJoinPoint;
org.aspectj.lang.annotation.Around;
org.aspectj.lang.annotation.Aspect;
org.springframework.stereotype.Component;import
PageBean){pageBean(PageBean)param;break;
pageBean.isPagination()){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());}Object
args.proceed();if(pageBean!null
pageBean.isPagination()){PageInfo
http://mybatis.org/dtd/mybatis-3-mapper.dtd
namespacecom.niyin.mapper.bookMapper
#{bid,jdbcTypeINTEGER}/selectdelete
#{bid,jdbcTypeINTEGER}/deleteinsert
parameterTypecom.niyin.model.book
#{price,jdbcTypeREAL})/insertinsert
parameterTypecom.niyin.model.book
#{price,jdbcTypeREAL},/if/trim/insertupdate
parameterTypecom.niyin.model.book
#{price,jdbcTypeREAL},/if/setwhere
#{bid,jdbcTypeINTEGER}/updateupdate
parameterTypecom.niyin.model.book
#{bid,jdbcTypeINTEGER}/updateselect
parameterTypecom.niyin.model.book
concat(%,#{bname},%)/if/where/select/mapperpackage
org.springframework.stereotype.Repository;import
updateByPrimaryKeySelective(book
com.niyin.utils.PageBean;import
updateByPrimaryKeySelective(book
org.springframework.beans.factory.annotation.Autowired;
org.springframework.stereotype.Service;import
bookMapper.deleteByPrimaryKey(bid);}Overridepublic
bookMapper.insert(record);}Overridepublic
bookMapper.insertSelective(record);}Overridepublic
bookMapper.selectByPrimaryKey(bid);}Overridepublic
updateByPrimaryKeySelective(book
bookMapper.updateByPrimaryKeySelective(record);}Overridepublic
bookMapper.updateByPrimaryKeySelective(record);}Overridepublic
org.springframework.beans.factory.annotation.Autowired;
org.springframework.stereotype.Controller;
org.springframework.web.bind.annotation.*;import
javax.servlet.http.HttpServletRequest;
bookBiz;RequestMapping(/list)public
PageBean();pageBeanage.setRequest(request);Listbook
pageBeanage);request.setAttribute(lst,books);request.setAttribute(pageBean,pageBeanage);return
list;};RequestMapping(/add)public
bookBiz.insertSelective(b);return
redirect:list;};RequestMapping(/del)public
b){bookBiz.deleteByPrimaryKey(b.getBid());return
redirect:list;};RequestMapping(/edit)public
b){bookBiz.updateByPrimaryKeySelective(b);return
redirect:list;};RequestMapping(/preSave)public
(b!nullb.getBid()!nullb.getBid()!0){book
bookBiz.selectByPrimaryKey(b.getBid());model.addAttribute(bs,bs);}return
org.springframework.stereotype.Controller;
org.springframework.web.bind.annotation.PathVariable;
org.springframework.web.bind.annotation.RequestMapping;Controller
}RequestMapping(/page/{dir}{page})public
page;}RequestMapping(/order/presave)public
/order/presave;}RequestMapping(/clz/presave)public
javax.servlet.jsp.JspException;
javax.servlet.jsp.tagext.BodyTagSupport;import
com.niyin.utils.PageBean;public
隐藏的form表单---这个就是上一次请求下次重新发的奥义所在
注意page参数每次都会提交我们需要避免if(!page.equals(key))
justify-content-center);sb.append(
hrefjavascript:gotoPage(1)首页/a/li);sb.append(
hrefjavascript:gotoPage(pageBean.getPreivousPage())lt;/a/li);//
href#pageBean.getPage()/a/li);sb.append(
hrefjavascript:gotoPage(pageBean.getNextPage())gt;/a/li);sb.append(
hrefjavascript:gotoPage(pageBean.getMaxPage())尾页/a/li);sb.append(
hrefjavascript:skipPage()确定/a/li);sb.append(
classpage-itemb共pageBean.getTotal()条/b/li);sb.append(/ul);//
typetext/javascript);sb.append(
document.getElementById(pageBeanForm).page.value
document.getElementById(pageBeanForm).submit(););sb.append(
document.getElementById(skipPage).value;);sb.append(
alert(请输入1~pageBean.getMaxPage()的数字););sb.append(
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.0descriptionzking
library/descriptiondisplay-namezking
core/display-nametlib-version1.1/tlib-versionshort-namezking/short-nameurihttp://jsp.veryedu.cn/uritagnamepage/nametag-classcom.niyin.tag.PageTag/tag-classbody-contentJSP/body-contentattributenamepageBean/namerequiredtrue/requiredrtexprvaluetrue/rtexprvalue/attribute/tag/taglib
urihttp://java.sun.com/jsp/jstl/core
http://www.w3.org/TR/html4/loose.dtd
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
classform-inlineaction${pageContext.request.contextPath
href${pageContext.request.contextPath
scopecol操作/th/tr/***adtbodyc:forEach
href${pageContext.request.contextPath
href${pageContext.request.contextPath
}/clz/del?bid${b.bid}删除/a/td/tr/c:forEach/tbody
http://www.w3.org/TR/html4/loose.dtd
action${pageContext.request.contextPath
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback