为开发一个测试程序,特搭建一个简单的ssm框架,因为网上看到很多都是比较老旧的教程,很多包都不能用了,eclipes搭建并且其中还附带了很多的其他东西,所以特此记录一下mac中idea搭建过程。
以下为一步步操作,详细可循,完全学习了白居易写诗的风格,堪称傻瓜教程。
一、搭建背景及准备条件
不是必须的,保证项目运行只要有这些东西就行,可以不一样
mac下idea,maven3.6.0,jdk1.8,tomcat8,mysql5.7
二、搭建开始——新建项目
file -> new -> project
新建maven项目,如图勾选 create from archetype,并选择 maven-archetype-webapp,next
输入坐标及项目名,next
选择maven配置,选择你自己的maven,next
确定项目名,finish
成功后的项目结构
三、完善项目结构
新建java目录 src/main/java
新建资源目录 resources
新建webapp目录 webapp,同样的方法,不过idea会自动创建里边的WEB-INF等文件
现在基本目录结构已建成,让我们对比一下看是不是一样的,见证奇迹
将响应目录 右键 设置为对应属性 java标记为Soures Rootresources标记为Resources Root
设置为web项目,标记webapp为 webfile -> Project Structure -> Models
在上图标记的 1,2 处 编辑修改路径 为 自己webapp的路径
此时目录结构已经完善完成,移步下图
四、初步配置启动tomcat服务
导入项目包 test2:war explodedfile -> Project Structure -> Models
选择你的项目,点击右下角 open
选择maven,一路next下去,最后点击神圣的finish按钮,OK。(可能无此步骤,没有则忽略)
还是刚才的界面,选择 Artifacts 此时第一次是会默认有两个包,如果没有则进行此步操作file -> Project Structure -> Artifacts
选择,点击右下 OK按钮
最终想要得到的结果如下图:
进行了上述每一步操作后,很关键的要保存,点击apply 或者ok,apply按钮是不可点击状态才能关闭此面板哦,不然刚才所有操作都白费了
添加tomcat,进行相关配置 点击面板右上角
添加配置tomcat
添加刚才生成的包
最后点击,apply,ok,好了完事了,准备运行吧
运行tomcat 右上角面板选择debug模式运行(也可以普通模式)
运行成功,页面显示默认生成的index.jsp的内容
五、配置spring容器等相关配置文件
在poom.xml(位置:项目的根目录下)中引入必要的poom依赖(其中包括了spring、springmvc、jdbc、mysql、druid连接池、mybatis、lombok插件、juni他、其他工具包 )
<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.test</groupId><artifactId>test</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><org.springframework.version>4.3.7.RELEASE</org.springframework.version><mybatis.version>3.5.0</mybatis.version></properties><dependencies><!--Spring最新的包--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework.version}</version></dependency><!--Spriingjdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.7.4</version></dependency><!--mysql连接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency><!--数据库连接池druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.11</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!--事务的配置标签--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.7.RELEASE</version></dependency><!--json--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.0</version></dependency><!--lombok插件通过@data注解实现省略写getset方法--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.0</version></dependency><!--json包fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.39</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--log日志--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.1</version></dependency><!--文件上传下载commons--><!--<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.2</version></dependency>--></dependencies><build><resources><resource><directory>src/main/java</directory><excludes><exclude>**/*.java</exclude></excludes></resource><resource><directory>src/main/resources</directory><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><!--编译代码插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><!--设置JDK版本--><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><fork>false</fork></configuration></plugin></plugins></build></project>
如果想要自己添加jar包,可以在WEB-INF中新建lib文件夹,然后放入你的jar包(poom依赖下载的jar包编译过后其实也就是在编译包下的lib文件夹中)
每次更改poom依赖后,记得更新jar包,一般右下角都会弹出更新提示
配置web.xml文件(位置:webapp下的WEB-INF中)tomcat启动时,会加载此文件,从而扫描加载其他的配置文件
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!--编码过滤器--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--Spring监听器监听加载相关配置文件--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--防止Spring内存溢出监听器--><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!--spring的其他配置文件(包括mybatis配置文件)--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-applicationContext.xml</param-value></context-param><!--log4j日志--><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.xml</param-value></context-param><!--SpringMVCservlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--访问根路径时的默认访问页面,从上到下匹配--><welcome-file-list><welcome-file>/index.jsp</welcome-file><welcome-file>/index.html</welcome-file><welcome-file>/reg.html</welcome-file></welcome-file-list></web-app>
其中包括了编码过滤、监听器、springmvc配置、spring容器中其他配置包括mybatis等、log4j配置、项目访问默认欢迎页,如需添加自定义过滤器,也许在此配置
新建其他配置文件(位置:resoures下) applicationContext.xml、springmvc.xml、mybatis.xml、jdbc.properties、日志配置(log4j.properties和log4j.xml二选一,我用的log4j.xml)
spring-mvc.xml
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xmlns:aop="/schema/aop"xmlns:task="/schema/task"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/mvc/schema/mvc/spring-mvc.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/task/schema/task/spring-task-3.0.xsd"><!--开启springMVC注解模式--><mvc:annotation-driven/><aop:aspectj-autoproxyproxy-target-class="true"/><!--自动扫描,完成bean创建和自动依赖注入--><context:component-scanbase-package="com.test"/><!--避免IE执行AJAX时,返回JSON出现下载文件--><beanid="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><propertyname="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!--启动SpringMVC的注解功能,完成请求和注解POJO的映射--><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><propertyname="messageConverters"><list><beanclass="org.springframework.http.converter.ByteArrayHttpMessageConverter"/><refbean="mappingJacksonHttpMessageConverter"/><!--JSON转换器--></list></property></bean><!--对模型视图名称的解析,即在模型视图名称添加前后缀--><beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--查找视图页面的前缀和后缀--><propertyname="prefix"value="/"/><propertyname="suffix"value=".html"/></bean><!--<!–对上传文件的支持,springMVC其实是用common-upload来实现–><beanid="multipartResolver"class="org.springframework.monsMultipartResolver"><!–设置上传文件的最大值,这里是字节–><propertyname="maxUploadSize"value="102400000"></property><!–100M–><propertyname="defaultEncoding"value="utf-8"></property></bean>--><!--总错误处理--><beanid="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><!--<propertyname="defaultErrorView"><value>/base/error</value></property>--><propertyname="defaultStatusCode"><value>500</value></property><propertyname="warnLogCategory"><value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value></property></bean><!--静态资源配置--><mvc:default-servlet-handler/><!--定时器配置--><task:executorid="executor"pool-size="5"/><task:schedulerid="scheduler"pool-size="10"/><task:annotation-drivenexecutor="executor"scheduler="scheduler"/></beans>
spring-applicationContext 后来的其他配置文件也可以在这个里边引入比如:shiro、redis集群、cache-redis缓存、自定义组件等等(优点:不用再去动web.xml的配置)
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.0.xsd"><!--mybatis配置--><importresource="classpath*:spring-mybatis.xml"/></beans>
spring-mybatis.xml
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.0.xsd/schema/context/schema/context/spring-context-4.0.xsd/schema/tx/schema/tx/spring-tx-4.0.xsd/schema/aop/schema/aop/spring-aop-4.0.xsd"><!--自动扫描,Bean注入--><context:component-scanbase-package="com.test"/><!--读取配置文件信息--><context:property-placeholderignore-unresolvable="true"location="classpath:jdbc.properties"/><beanname="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><!--数据库基本配置--><propertyname="driverClassName"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/><!--初始化连接数量--><propertyname="initialSize"value="${jdbc.initialSize}"/><!--最大并发连接数量--><propertyname="maxActive"value="${jdbc.maxActive}"/><!--最小空闲连接数--><propertyname="minIdle"value="${jdbc.minIdle}"/><!--配置获取连接等待超时的时间--><propertyname="maxWait"value="${jdbc.maxWait}"/><!--超过时间限制是否回收--><propertyname="removeAbandoned"value="${jdbc.removeAbandoned}"/><!--超过时间限制多长--><propertyname="removeAbandonedTimeout"value="${jdbc.removeAbandonedTimeout}"/><!--配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒--><propertyname="timeBetweenEvictionRunsMillis"value="${jdbc.timeBetweenEvictionRunsMillis}"/><!--配置一个连接在池中最小生存的时间,单位是毫秒--><propertyname="minEvictableIdleTimeMillis"value="${jdbc.minEvictableIdleTimeMillis}"/><!--用来检测连接是否有效的sql,要求是一个查询语句--><propertyname="validationQuery"value="${jdbc.validationQuery}"/><!--申请连接的时候检测--><propertyname="testWhileIdle"value="${jdbc.testWhileIdle}"/><!--申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能--><propertyname="testOnBorrow"value="${jdbc.testOnBorrow}"/><!--归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能--><propertyname="testOnReturn"value="${jdbc.testOnReturn}"/><propertyname="logAbandoned"value="true"/><!--配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析--><propertyname="filters"value="stat"/></bean><!--MyBatisSqlSessionFactoryBean配置--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><!--自动扫描Mapping.xml文件--><propertyname="mapperLocations"value="classpath:com/test/mapper/xml/*.xml"/><!--配置MyBaties全局配置文件:mybatis-config.xml--><propertyname="configLocation"value="classpath:mybatis-config.xml"/><!--扫描model包xml中parameterType就可以使用类名,不用全路径--><propertyname="typeAliasesPackage"value="com.test.model"/></bean><!--加载mapper.xml对应的接口配置文件--><beanid="mapperScannerConfigurer"class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--给出需要扫描mapper接口包--><propertyname="basePackage"value="com.test.mapper"/><!--注入sqlSessionFactory--><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/></bean><!--(事务管理)transactionmanager,useJtaTransactionManagerforglobaltx--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean><tx:annotation-driventransaction-manager="transactionManager"/></beans>
mybatis-config.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-////DTDSQLMapConfig3.0//EN""/dtd/mybatis-3-config.dtd"><!--|plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:|properties?,settings?,|typeAliases?,typeHandlers?,|objectFactory?,objectWrapperFactory?,|plugins?,|environments?,databaseIdProvider?,mappers?|--><configuration><!--|全局配置设置||可配置选项默认值,描述||aggressiveLazyLoadingtrue,当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。|multipleResultSetsEnabledtrue,允许和不允许单条语句返回多个数据集(取决于驱动需求)|useColumnLabeltrue, 使用列标签代替列名称。不同的驱动器有不同的作法。参考一下驱动器文档,或者用这两个不同的选项进行测试一下。|useGeneratedKeysfalse, 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。| autoMappingBehavior PARTIAL, 指定MyBatis 是否并且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,没有嵌套的结果。FULL 将自动映射所有复杂的结果。| defaultExecutorType SIMPLE, 配置和设定执行器,SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新。|defaultStatementTimeoutnull,设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时|--><settings><!--这个配置使全局的映射器启用或禁用缓存--><settingname="cacheEnabled"value="true"/><!--全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载--><settingname="lazyLoadingEnabled"value="true"/><settingname="multipleResultSetsEnabled"value="true"/><settingname="useColumnLabel"value="true"/><settingname="defaultExecutorType"value="REUSE"/><settingname="defaultStatementTimeout"value="25000"/><!--让控制台打印sql语句,注释掉则没有--><settingname="logImpl"value="STDOUT_LOGGING"/><settingname="callSettersOnNulls"value="true"/></settings></configuration>
jdbc.properties
#mysqljdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://192.168.0.156:3306/test?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=rootjdbc.initialSize=3jdbc.maxActive=1000jdbc.minIdle=0jdbc.maxWait=6000jdbc.removeAbandoned=truejdbc.removeAbandonedTimeout=1800jdbc.timeBetweenEvictionRunsMillis=60000jdbc.minEvictableIdleTimeMillis=25200000jdbc.validationQuery=selectgetdate()jdbc.testWhileIdle=falsejdbc.testOnBorrow=falsejdbc.testOnReturn=false
log4j.xml
<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPElog4j:configurationSYSTEM"log4j.dtd"><log4j:configurationxmlns:log4j='/log4j/'><!--ConsoleAppender:输出到控制台--><appendername="STDOUT"class="org.apache.log4j.ConsoleAppender"><!--<paramname="encoding"value="UTF-8"/>--><layoutclass="org.apache.log4j.PatternLayout"><paramname="ConversionPattern"value="%d[%t]%p-%m%n"/></layout><filterclass="org.apache.log4j.varia.LevelRangeFilter"><!--设置日志输出的最小级别--><paramname="levelMin"value="DEBUG"/><!--设置日志输出的最大级别--><paramname="levelMax"value="FATAL"/><!--设置日志输出的xxx,默认是false--><paramname="AcceptOnMatch"value="true"/></filter></appender><!--输出到日志文件--><appendername="PROJECT"class="org.apache.log4j.DailyRollingFileAppender"><!--设置日志信息输出文件全路径名--><paramname="file"value="${catalina.home}/logs/ceshi/info.log"/><!--日志文件编码--><paramname="encoding"value="UTF-8"/><!--此日志文件级别--><paramname="threshold"value="info"/><!--设置是否在重新启动服务时,在原有日志的基础添加新日志--><paramname="Append"value="true"/><!--设置保存备份回滚日志的最大个数--><paramname="MaxBackupIndex"value="10"/><!--设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB--><paramname="MaxFileSize"value="50MB"/><!--设置日志输出的样式--><layoutclass="org.apache.log4j.PatternLayout"><paramname="ConversionPattern"value="%d[%X{requestURIWithQueryString}]%-5p%c{2}-%m%n"/></layout></appender><appendername="PROJECT-ERROR"class="org.apache.log4j.DailyRollingFileAppender"><paramname="file"value="${catalina.home}/logs/ceshi/error.log"/><paramname="append"value="true"/><paramname="encoding"value="UTF-8"/><paramname="threshold"value="error"/><paramname="MaxBackupIndex"value="10"/><paramname="MaxFileSize"value="50MB"/><layoutclass="org.apache.log4j.PatternLayout"><paramname="ConversionPattern"value="%d[%X{requestURIWithQueryString}]%-5p%c{2}-%m%n"/></layout></appender><!--开发测试使用debug级别--><appendername="PROJECT-DEBUG"class="org.apache.log4j.DailyRollingFileAppender"><paramname="file"value="${catalina.home}/logs/ceshi/debug.log"/><paramname="append"value="false"/><paramname="encoding"value="UTF-8"/><paramname="threshold"value="debug"/><paramname="MaxBackupIndex"value="10"/><paramname="MaxFileSize"value="50MB"/><layoutclass="org.apache.log4j.PatternLayout"><paramname="ConversionPattern"value="%d[%X{requestURIWithQueryString}]%-5p%c{2}-%m%n"/></layout></appender><!--总的日志级别--><root><levelvalue="DEBUG"/><appender-refref="PROJECT"/><appender-refref="PROJECT-DEBUG"/><appender-refref="PROJECT-ERROR"/><appender-refref="STDOUT"/></root></log4j:configuration>
好了,经过以上一套噼里啪啦的操作,配置基本算是好了,接下来让我们写代码检验一下我们的配置到底对不对呢,激动人心的时刻就要来了
六、编写代码测试
java文件夹下,新建package包com.test,另外再新建包括controller、mapper、model、service的四个包
新建完结构如图所示
在每个包下分别新建代码文件:TestController.java、TpmTestLogService.java、TpmTestLogServiceImpl.java、TpmTestLogMapper.java、TpmTestLogMapper.xml、TpmTestLog
实体类:TpmTestLog.java
packagecom.test.model;importlombok.Data;importjava.io.Serializable;/***@TpmTestLog*@(TPM_TEST_LOG)*@version:Ver1.0*/@DatapublicclassTpmTestLogimplementsSerializable{/***@备注:主键*@字段:LOG_UUIDbigint*/privateLonglogUuid;/***@备注:*@字段:TESTMAIN_UUIDCHAR(32)*/privateStringtestmainUuid;/***@备注:*@字段:OPERATIONVARCHAR(20)*/privateStringoperation;/***@备注:*@字段:SYSCREATEDATEVARCHAR(25)*/privateStringsyscreatedate;}
数据库交互层dao接口:TpmTestLogMapper.java
packagecom.test.mapper;importcom.test.model.TpmTestLog;/***@TpmTestLogMapper*@Mapper*@version:Ver1.0*/publicinterfaceTpmTestLogMapper{Longinsert(TpmTestLogtpmTestLog);}
对应的xml:TpmTestLogMapper.xml
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.test.mapper.TpmTestLogMapper"><resultMaptype="com.test.model.TpmTestLog"id="mTpmTestLog"autoMapping="true"></resultMap><sqlid="mTpmTestLogSql">LOG_UUIDASlogUuid,TESTMAIN_UUIDAStestmainUuid,OPERATIONASoperation,SYSCREATEDATEASsyscreatedate</sql><insertid="insert"parameterType="TpmTestLog"useGeneratedKeys="true"keyProperty="logUuid">INSERTINTOTPM_TEST_LOG(LOG_UUID,TESTMAIN_UUID,OPERATION,SYSCREATEDATE)VALUES(#{logUuid},#{testmainUuid},#{operation},#{syscreatedate})</insert></mapper>
业务层接口类sercice:TpmTestLogService.java
packagecom.test.service;importcom.test.model.TpmTestLog;/***@TpmTestLogService*@Service*@version:Ver1.0*/publicinterfaceTpmTestLogService{Longceshi(TpmTestLogtpmTestLog);}
业务层的实现类impl:TpmTestLogServiceImpl.java
packagecom.test.service.impl;importcom.test.mapper.TpmTestLogMapper;importcom.test.model.TpmTestLog;importcom.test.service.TpmTestLogService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;/***@TpmTestLogServiceImpl*@ServiceImpl*@version:Ver1.0*/@Service@TransactionalpublicclassTpmTestLogServiceImplimplementsTpmTestLogService{@AutowiredprivateTpmTestLogMappertpmTestLogMapper;@OverridepublicLongceshi(TpmTestLogtpmTestLog){returntpmTestLogMapper.insert(tpmTestLog);}}
接口逻辑层controller:TestController.java
packagecom.test.controller;importcom.alibaba.fastjson.JSONObject;importcom.test.model.TpmTestLog;importcom.test.service.TpmTestLogService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api")publicclassTestController{@AutowiredprivateTpmTestLogServicetpmTestLogService;@GetMapping("/test")publicJSONObjecttest(){JSONObjectjsonObject=newJSONObject();TpmTestLogtpmTestLog=newTpmTestLog();tpmTestLog.setSyscreatedate("asfasgags");tpmTestLog.setTestmainUuid("fdasgassfsarew");tpmTestLog.setOperation("新增");tpmTestLogService.ceshi(tpmTestLog);jsonObject.put("title","测试成功"+tpmTestLog.getLogUuid());returnjsonObject;}}
数据库交互,测试表以及数据库连接文件jdbc中的配置(文中5.3已有配置文件) Table:TPM_TEST_LOG
SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructurefor`TPM_TEST_LOG`------------------------------DROPTABLEIFEXISTS`TPM_TEST_LOG`;CREATETABLE`TPM_TEST_LOG`(`LOG_UUID`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键',`TESTMAIN_UUID`varchar(32)COLLATEutf8_binDEFAULTNULL,`OPERATION`varchar(20)COLLATEutf8_binDEFAULTNULL,`SYSCREATEDATE`varchar(25)COLLATEutf8_binDEFAULTNULL,PRIMARYKEY(`LOG_UUID`))ENGINE=InnoDBAUTO_INCREMENT=26DEFAULTCHARSET=utf8COLLATE=utf8_bin;SETFOREIGN_KEY_CHECKS=1;
测试接口 因为是写的测试是get请求,所以可以直接在浏览器中测试,地址栏输入接口地址(4.4中你配置的地址),回车访问,如下图
七、前端页面和接口交互测试
编写前端页面测试代码(不要说你是后台,不会写前端代码,不会也没关系,直接copy吧,有问题找google)
前边生成的index.jsp我们稍加改动
<html><body><h2>HelloWorld!</h2><scriptsrc="./js/jquery.min.js"></script><script>$(function(){$(document).ready(function(){$.getJSON("/api/test",function(res){console.log(res)$("h2").text(res.title)});})})</script></body></html>
由于页面中引用了万能的jquery语法,所以在webapp下新建js文件夹,并放入jquery文件,点击下载
不要问为什么要用jquery,怎么不用原生js,因为我愿意。
好吧,其实是为了代码的简洁高效,毕竟封装了很多方法,让我们可以更注重逻辑
当然原生的也不是不能写,下面是原生的js方法,只需将此方法放入index.jsp里边的script标签中即可,如果没有引入jquery,记得注释掉原来的方法
window.onload=function(){//步骤一:创建异步对象varajax=newXMLHttpRequest();//步骤二:设置请求的url参数,参数一是请求的类型,参数二是请求的url,可以带参数,动态的传递参数starName到服务端ajax.open('get','/api/test');//步骤三:发送请求ajax.send();//步骤四:注册事件onreadystatechange状态改变就会调用ajax.onreadystatechange=function(){if(ajax.readyState==4&&ajax.status==200){//步骤五如果能够进到这个判断说明数据完美的回来了,并且请求的页面是存在的console.log(ajax.responseText);//输入相应的内容console.log(JSON.parse(ajax.responseText).title);console.log(document.getElementsByTagName("h2")[0])document.getElementsByTagName("h2")[0].innerText=JSON.parse(ajax.responseText).title;}}}
接下来见证奇迹,打开页面地址:http://localhost:8085/index.jsp
后台经过与数据库交互后,把插入数据库后生成的主键4返回给前端,前端显示在页面中
到这里这个简单的ssm框架就算搭建完成了,看起来过程很长,但实际操作起来应该是很快的,有问题欢迎留言,大家可以一起探讨!
如果觉得《springMVC——SSM整合(IDEA 搭建简单 ssm 框架最详细最简单教程)》对你有帮助,请点赞、收藏,并留下你的观点哦!