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

网站搭建招标方案门户网站构建

网站搭建招标方案,门户网站构建,哪个网站可以做问卷调查,文化建设网站目录 一、概述 二、集成 ( 1 ) 为什么 ( 2 ) 优点 ( 3 ) 实例 三、整合 3.1 讲述 3.2 整合进行分页 带我们带来的收获 一、概述 集成是指将不同的组件、系统或框架整合在一起#xff0c;使它们能够协同工作#xff0c;共同完成某个功能或提供某种服务。在软件开发中使它们能够协同工作共同完成某个功能或提供某种服务。在软件开发中集成通常指的是将多个独立的模块或组件整合在一起形成一个完整的系统。 数据集成将来自不同数据源的数据整合在一起使其能够共享和共同使用。例如将多个数据库的数据整合到一起或将外部系统的数据与本地系统的数据整合。 系统集成将不同的软件系统或模块整合在一起使其能够协同工作共同完成某个功能或提供某种服务。例如将前端界面与后端逻辑进行集成或将多个独立的微服务整合成一个完整的系统。 框架集成将不同的开发框架整合在一起以提供更加便捷和灵活的开发方式。例如将Spring框架与Mybatis框架进行集成以实现依赖注入和数据库操作的统一管理。 服务集成将不同的服务整合在一起以提供更加全面和综合的服务。例如将支付服务、物流服务和用户认证服务整合在一起形成一个完整的电商平台。 集成的目的是提高系统的功能性、可扩展性和可维护性减少重复开发和冗余代码提高开发效率和系统性能。通过集成不同的组件或系统可以共享资源和功能实现更好的协同工作和互操作性。  二、集成 ( 1 ) 为什么 当Spring与Mybatis集成时可以通过Spring的IoCInversion of Control容器来管理Mybatis的Mapper接口并且可以通过依赖注入的方式将Mapper接口注入到其他Spring管理的组件中实现组件之间的解耦和灵活的配置。 在集成过程中可以使用Spring的配置文件来配置Mybatis的SqlSessionFactory和数据源等信息。通过配置文件可以指定Mybatis的Mapper接口所对应的Mapper.xml文件以及其他的Mybatis相关配置如数据库连接信息、事务管理等。Spring会根据配置文件中的信息来创建SqlSessionFactory并将其注入到Spring的IoC容器中。 在使用Mybatis进行数据库操作时可以直接使用注入的Mapper接口进行操作而不需要手动创建和管理Mapper接口的实例。Spring会在需要使用Mapper接口时自动从IoC容器中获取实例并将其注入到需要使用的地方。 同时Spring框架还提供了事务管理的功能。可以通过在Spring的配置文件中配置事务管理器并将其应用到Mybatis的数据库操作中。这样就可以方便地对数据库操作进行事务管理保证数据的一致性和完整性。 此外Spring框架还提供了AOPAspect-Oriented Programming的支持。可以通过AOP来对Mybatis的数据库操作进行拦截和增强例如可以在数据库操作前后记录日志、进行性能监控等操作而不需要修改原有的代码。 最后Spring框架还提供了缓存管理的功能。Mybatis框架本身提供了一定的缓存功能但是Spring框架提供了更加灵活和强大的缓存支持。通过集成可以方便地使用Spring的缓存管理功能提高系统的性能和响应速度。 综上所述Spring与Mybatis的集成可以提供更加便捷和灵活的开发方式同时也能够充分发挥Spring框架的优势提高系统的性能和可维护性。 ( 2 ) 优点 集成Spring与Mybatis的优点有以下几点 1. 事务管理Spring框架提供了强大的事务管理功能可以对Mybatis的数据库操作进行事务管理。通过集成可以方便地使用Spring的事务管理功能保证数据的一致性和完整性。2. 依赖注入Spring框架提供了依赖注入的功能可以方便地将Mybatis的Mapper接口注入到Spring容器中实现解耦和灵活的配置。通过依赖注入可以方便地在不同的组件中使用Mapper接口而不需要手动创建和管理Mapper接口的实例。3. AOP支持Spring框架提供了AOP面向切面编程的支持可以方便地对Mybatis的数据库操作进行拦截和增强。通过AOP可以在不修改原有代码的情况下对数据库操作进行统一的日志记录、性能监控等操作。4. 缓存管理Mybatis框架本身提供了一定的缓存功能但是Spring框架提供了更加灵活和强大的缓存支持。通过集成可以方便地使用Spring的缓存管理功能提高系统的性能和响应速度。5. 统一管理通过集成可以将Mybatis的数据库操作和其他组件的管理统一交给Spring框架来处理减少了系统中的重复代码和配置提高系统的可维护性和可扩展性。6. 整合其他框架Spring框架是一个综合性的框架可以与其他框架如Spring MVC、Spring Boot等进行集成。通过集成可以方便地整合多个框架提高开发效率。7. 简化配置和管理Spring框架提供了更加便捷的配置和管理方式可以将Mybatis的配置和管理交给Spring来处理。通过集成可以减少开发人员需要关注的细节提高开发效率。 综上所述集成Spring与Mybatis可以提供更加便捷和灵活的开发方式同时也能够充分发挥Spring框架的优势提高系统的性能和可维护性。 ( 3 ) 实例 创建一个maven项目 名称为 Spring-mybatis 以下为项目结构可以根据我的项目结构进行创建包及类(也可以根据自己习惯修改) 在找到项目中pom.xml配置文件配置引用插件pom.xml配置如下 : ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersiongroupIdorg.example/groupId artifactIdSpring-mybatis/artifactId version1.0-SNAPSHOT/versionpropertiesproject.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.version!--5.其他--junit.version4.12/junit.versionservlet.version4.0.0/servlet.versionlombok.version1.18.2/lombok.version /propertiesdependencies!--1.spring相关--dependencygroupIdorg.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/dependency!--3.dbcp2连接池相关--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-dbcp2/artifactIdversion${commons.dbcp2.version}/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion${commons.pool2.version}/version/dependency!--4.log日志相关依赖--!--核心log4j2jar包--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion${log4j2.version}/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion${log4j2.version}/version/dependency!--web工程需要包含log4j-web非web工程不需要--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion${log4j2.version}/version/dependency!--5.其他--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/version!-- scopetest/scope--/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion${servlet.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/versionscopeprovided/scope/dependency/dependenciesbuildfinalNameSpring-mybatis/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/directoryincludesincludejdbc.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 创建 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 创建 jdbc.properties 文件辅助mysql数据库的连接 jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://47.100.191.44:3308/mybatis_ssm?useUnicodetruecharacterEncodingUTF-8 jdbc.usernametest01 jdbc.passwordtest01创建 generatorConfig.xml 配置文件用来引用插件自动生成类接口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_mvc_book domainObjectNameBookenableCountByExamplefalse enableDeleteByExamplefalseenableSelectByExamplefalse enableUpdateByExamplefalse!-- 忽略列不生成bean 字段 --!-- ignoreColumn columnFRED / --!-- 指定列的java数据类型 --!-- columnOverride columnLONG_VARCHAR_FIELD jdbcTypeVARCHAR / --/table/context /generatorConfiguration创建 spring-context.xml  配置文件用来配置文件加载到spring的上下文配置如下 :  ?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 创建 spring-mybatis.xml 配置文件用来spring和MyBatis整合及自动识别类及方法 ?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/ /beans配置完之后现在即可依图生成代码 :  为生成的增删改查进行测试我们创建一个接口名为 : BookBiz(跟自动生成的接口一致代码) package com.CloudJun.biz;import com.CloudJun.model.Book; import com.CloudJun.utils.PageBean;import java.util.List;/*** author CloudJun* create  2023-08-25 14:33*/ public interface BookBiz {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);}创建一个实现类实现自己创建的接口 名称为 : BookBizImpl package com.CloudJun.biz.impl;import com.CloudJun.biz.BookBiz; import com.CloudJun.mapper.BookMapper; import com.CloudJun.model.Book; import com.CloudJun.utils.PageBean; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List; import java.util.Map;/*** author CloudJun* create  2023-08-25 14:34*/ Service public class BookBizImpl implements BookBiz {//相当于set及getAutowiredprivate BookMapper bookMapper;private Book book;private PageBean pageBean;Overridepublic int deleteByPrimaryKey(Integer bid) {return bookMapper.deleteByPrimaryKey(bid);}Overridepublic int insert(Book record) {return bookMapper.insert(record);}Overridepublic int insertSelective(Book record) {return bookMapper.insertSelective(record);}Overridepublic Book selectByPrimaryKey(Integer bid) {return bookMapper.selectByPrimaryKey(bid);}Overridepublic int updateByPrimaryKeySelective(Book record) {return bookMapper.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(Book record) {return bookMapper.updateByPrimaryKey(record);}}鼠标放到BookBizImpl 按AltEnter(回车键) 创建测试类 名称为 : BookBizImplTest  进行方法的测试  package com.CloudJun.biz.impl;import com.CloudJun.biz.BookBiz; import com.CloudJun.model.Book; import com.CloudJun.utils.PageBean; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.*;/*** author CloudJun* create  2023-08-25 14:39*/ RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations{classpath:spring-context.xml}) public class BookBizImplTest {Autowiredprivate BookBiz bookBiz;Beforepublic void setUp() throws Exception {}Afterpublic void tearDown() throws Exception {}Testpublic void deleteByPrimaryKey() {System.out.println(bookBiz.deleteByPrimaryKey(1));}Testpublic void insertSelective() {int i bookBiz.insertSelective(new Book(1, 第一章开局送老婆, 99.9f));System.out.println(i);}Testpublic void selectByPrimaryKey() {System.out.println(bookBiz.selectByPrimaryKey(63));}Testpublic void updateByPrimaryKeySelective() {int i bookBiz.updateByPrimaryKeySelective(new Book(1, 第一章开局送老婆和房子, 999.9f));//修改后进行查看System.out.println(bookBiz.selectByPrimaryKey(1));}} 我们执行以上的 insertSelective() 方法 进行书籍的新增 执行结果为如图 :  我们执行以上的 updateByPrimaryKeySelective() 方法 进行书籍的修改 执行结果为如图 :  我们执行以上的 selectByPrimaryKey() 方法 进行书籍的查询 执行结果为如图 :  我们执行以上的 deleteByPrimaryKey() 方法 进行书籍的删除 执行结果为如图 :  三、整合 3.1 讲述 AOP面向切面编程和PageHelper插件的整合可以提供更加灵活和便捷的分页功能。下面是一些使用AOP整合PageHelper插件的好处 1. 代码解耦通过AOP将分页逻辑与业务逻辑分离使得代码更加清晰和可维护。不需要在每个需要分页的方法中手动添加分页代码而是通过AOP切面统一处理。2. 代码复用通过AOP切面可以将分页逻辑抽象成一个可复用的切面可以在多个方法中共享该切面减少了代码的冗余。3. 统一管理通过AOP切面可以将分页逻辑集中管理方便对分页行为进行统一的配置和修改。例如可以在切面中设置默认的分页参数或者根据不同的业务需求进行不同的分页配置。4. 简化开发通过AOP整合PageHelper插件可以简化开发人员的工作量。不需要在每个分页方法中手动调用PageHelper的相关方法而是通过AOP自动拦截并添加分页逻辑。 总之通过AOP整合PageHelper插件可以提高代码的可维护性、可复用性和可读性减少了代码的冗余简化了开发流程提高了开发效率。 3.2 整合进行分页 创建一个分页工具类 名为 : PageBean package com.CloudJun.utils;import java.io.Serializable; import java.util.Map;import javax.servlet.http.HttpServletRequest;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 ];} }在自动生成的BookMapper.xml配置动态SQL中进行增加一个动态SQL   增加一下动态SQL select idBookPage resultTypecom.CloudJun.model.Book parameterTypecom.CloudJun.model.Book selectinclude refidBase_Column_List /from t_mvc_bookwhereif testbname ! nullbname like concat(%,#{bname},%)/if/where/select 在自动生成的接口中增加以下代码创建这个动态SQL的方法 ListBook BookPage(Book book); 在自己创建的接口 (BookBiz) 中增加以下方法 ListBook BookPage(Book book, PageBean pageBean); 在自己创建的实现类中重写方法  Overridepublic ListBook BookPage(Book book, PageBean pageBean) {return bookMapper.BookPage(book);} 我们创建一个 名为 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.*Page(..)* * : 任何返回值* *.. : 任何包不限层级* *Biz : 以Biz结尾的类或者接口* *Pager : 以Pager结尾的方法* (..) : 方法里有任意参数* 符合上述条件即为目标类或者方法*/Around(execution(* *..*Biz.*Pager(..)))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;}}Around(execution(* *..*Biz.*Pager(..)))      其中的  * *..*Service.*Pager(..)  以下为讲解            *    : 任何返回值            *..  : 任何包不限层级            *Biz  : 以Biz结尾的类或者接口            *Pager  : 以Pager结尾的方法            (..)   : 方法里有任意参数 最后在测试类 ( BookBizImplTest ) 中 测试该方法测试方法的代码如下  Testpublic void bookPage() {Book book new Book();book.setBname(圣墟);PageBean pageBean new PageBean();pageBean.setPage(2);pageBean.setRows(20);bookBiz.BookPage(book,pageBean).forEach(System.out::println);} 最后执行该分页方法测试结果为 :  带我们带来的收获 学习Spring与Mybatis集成并且AOP整合PageHelper插件可以给我们带来以下收获 1. 统一的开发框架Spring与Mybatis的集成可以提供一个统一的开发框架使得开发人员能够更加方便地进行数据库操作。Spring提供了事务管理、依赖注入等功能而Mybatis提供了强大的SQL映射和数据库访问能力两者的结合可以使开发更加高效和便捷。2. 数据库访问的灵活性Mybatis作为一种灵活的ORM对象-关系映射框架可以通过XML或注解的方式进行SQL映射使得开发人员能够更加灵活地控制SQL的编写和执行。同时Mybatis还提供了丰富的查询功能和缓存机制可以提高数据库访问的性能。3. 分页功能的增强通过AOP整合PageHelper插件可以在需要分页的方法中自动添加分页逻辑减少了手动编写分页代码的工作量。PageHelper插件提供了丰富的分页功能和配置选项可以满足不同业务场景下的分页需求提高了系统的可扩展性和性能。4. 代码的可维护性和可复用性通过Spring的依赖注入和AOP功能可以将业务逻辑和非业务逻辑如事务管理、日志记录等进行解耦使得代码更加清晰和易于维护。同时通过AOP的切面功能可以将一些通用的功能抽象成切面实现代码的复用提高了开发效率。5. 提高开发效率和系统性能集成Spring和Mybatis可以提供一套完整的开发框架和工具链包括事务管理、依赖注入、数据库访问、缓存等功能可以减少开发人员的工作量提高开发效率。同时通过PageHelper插件的分页功能可以优化数据库查询提高系统的性能和响应速度。 总之学习Spring与Mybatis集成并且AOP整合PageHelper插件可以使我们掌握一套强大的开发工具提高开发效率提升系统的性能和可维护性为我们的开发工作带来很大的便利和收益。
http://www.sadfv.cn/news/192583/

相关文章:

  • 网站小程序怎么做html模板网
  • 建立中国近代美育体系的人是谁东莞seo网站推广建设
  • 静态网站建设报告建立一平台个网站需要多少钱
  • 怎样做艾条艾柱网站c 做游戏的网站教学
  • 广州做网站报价鄂尔多斯网站制作 建设
  • 自适应 网站网站建设的经验总结
  • 在线销售型的网站WordPress套壳
  • 简述网站的设计流程成都网站开发的公司
  • 中国常用网站网址搜狗推广找谁
  • 江西企业网站定制做网站时尺寸多大
  • 新网站开发企业移动网站建设商
  • 华为网站推广策略wordpress 导航图片
  • 晋江建设局网站中国十大品牌策划机构
  • 网站开发语言有哪几种photoshop免费下载
  • 怀柔网站建设公司请网络推广外包公司有用吗
  • 中国建设银行招聘网站甘肃分行建站公司论坛
  • 潍坊建设网站多少钱wordpress wp query
  • 地图网站抓取广州黄埔做网站
  • js做音乐网站酒店官方网站建设书
  • 中介做哪些网站西安正规网站建设报价
  • 广告网站建设制作设计分栏型网站
  • jsp网站建设 书籍长春网站优化页面
  • 找工程分包网站福建微网站建设公司
  • icp备案 网站负责人新手做网站的几个必要步骤
  • 杭州网站网络 科技公司wordpress房地产
  • 音乐分享网站开发当当网站开发系统说明
  • 网站建设的一般流程是网站模板之家
  • 深圳大型论坛网站建设怎样用dede搭建网站
  • 用wordpress仿一个网站wordpress模板制作兼职
  • 做购物商城网站最新首码项目网