Spring+SpringMVC+MyBatis三大框架整合的SSM

xiaoxiao2021-02-28  95

1、三大框架简介

1.1、Spring

Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson创建。简单说,Spring是一个分层的Java SE/EE full-stack(一站式)轻量级开源框架。

1.2、SpringMVC

SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了创建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,从而在使用Spring进行Web开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

1.3、MyBatis

MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由Apache software foundation迁移到了Google code,并且改名为MyBatis。2013年11月迁移到GitHub。 iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Object(sDAO)。

2、整合步骤

2.1、数据库

数据库设计如下:

2.2、项目整合步骤

①如下图搭建好基本的架子; ②导入依赖包 pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ssmblog</groupId> <artifactId>SSMBlog</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>SSMBlog Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!--源jdk配置--> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.resources.version>2.5</maven.resources.version> <!--项目源码配置--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- spring版本号 --> <spring.version>4.3.9.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.4.5</mybatis.version> <mybatis-spring.version>1.3.1</mybatis-spring.version> <!-- mysql驱动版本号 --> <mysql-driver.version>5.1.43</mysql-driver.version> <!--freemarker版本号--> <freemarker.version>2.3.23</freemarker.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> <!--以下是druid版本--> <druid.version>1.1.2</druid.version> <!--fastjson版本号--> <fastjson.version>1.2.37</fastjson.version> <!--jackson-core版本号--> <jackson-core.version>2.9.0</jackson-core.version> <!--jackson-databind版本号--> <jackson-databind.version>2.9.0</jackson-databind.version> <!--jackson-mapper-asl版本号--> <jackson-mapper-asl.version>1.9.13</jackson-mapper-asl.version> <!--文件上传版本号--> <commons-fileupload.version>1.3.3</commons-fileupload.version> <!--IO依赖版本号--> <commons-io.version>2.5</commons-io.version> <!--commons-codec版本号--> <commons-codec.version>1.10</commons-codec.version> <!--jsr250-api版本号--> <jsr250-api.version>1.0</jsr250-api.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> <!-- 添加jstl依赖 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 添加spring核心依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- 添加mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- 添加mybatis-spring整合包依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!-- 添加mysql驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-driver.version}</version> </dependency> <!-- 以下是druid依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- 添加数据库连接池依赖 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- 添加日志相关jar包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 映入JSON --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-core.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-databind.version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson-mapper-asl.version}</version> </dependency> <!--文件上传依赖配置--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${commons-fileupload.version}</version> </dependency> <!--IO依赖配置--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!--加密依赖配置--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <!--以下是注解依赖--> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>${jsr250-api.version}</version> </dependency> <!--freemarker.jar包依赖--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> </dependencies> <build> <finalName>SSMBlog</finalName> <!-- 出现加载不了mapper里.xml文件就用。建议放在这 --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> <plugins> <!--mybatis 逆向工程插件--> <!--<plugin>--> <!--<groupId>org.mybatis.generator</groupId>--> <!--<artifactId>mybatis-generator-maven-plugin</artifactId>--> <!--<version>1.3.5</version>--> <!--<configuration>--> <!--<verbose>true</verbose>--> <!--<overwrite>true</overwrite>--> <!--</configuration>--> <!--</plugin>--> <!-- jetty插件 --> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.19</version> <configuration> <systemProperties> <systemProperty> <name>org.mortbay.jetty.Request.maxFormContentSize</name> <value>100000000</value> </systemProperty> </systemProperties> <!--<encoding>UTF-8</encoding>--> <!--<encoding>UTF-8</encoding>--> <scanIntervalSeconds>10</scanIntervalSeconds> <stopKey>foo</stopKey> <stopPort>9999</stopPort> <!-- 设置jetty启动该web站点的context --> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> <!-- 每2秒的间隔扫描一次,实现热部署 --> <reload>automatic</reload> <scanIntervalSeconds>2</scanIntervalSeconds> </configuration> <executions> <execution> <id>start-jetty</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <scanIntervalSeconds>0</scanIntervalSeconds> <daemon>true</daemon> </configuration> </execution> <execution> <id>stop-jetty</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> <!--maven编译源管理插件配置--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <!--maven资源管理插件配置--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>${maven.resources.version}</version> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <encoding>UTF-8</encoding> <outputDirectory>${project.build.directory}/lantooease/WEB-INF/ </outputDirectory> <resources> <resource> <directory>/src/main/resources</directory> <includes> <include>*.xml</include> <include>*.properties</include> <include>*.conf</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> ③配置applicationContext.xml applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!--添加扫描的驱动支持--> <context:annotation-config/> <!-- 自动扫描 --> <context:component-scan base-package="com.ssmblog"/> <!-- 加载一个properties文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties"/> </bean> <!--druid配置--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!--基本配置,驱动,url,用户,密码--> <property name="driverClassName" value="${jdbc.driverClasss}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!--初始化大小--> <property name="initialSize" value="${druid.initialSize}"/> <!--最小闲置数--> <property name="minIdle" value="${druid.minIdle}"/> <!--最大活跃数--> <property name="maxActive" value="${druid.maxActive}"/> <!--最大等待时间--> <property name="maxWait" value="${druid.maxWait}"/> <!--配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒--> <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}"/> <!--配置一个连接在池中最小生存的时间,单位是毫秒--> <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}"/> <!--验证查询--> <property name="validationQuery" value="${druid.validationQuery}"/> <!--闲置时测试--> <property name="testWhileIdle" value="${druid.testWhileIdle}"/> <!--调用时测试--> <property name="testOnBorrow" value="${druid.testOnBorrow}"/> <!--返回时测试--> <property name="testOnReturn" value="${druid.testOnReturn}"/> <!--<!– 打开PSCache,并且指定每个连接上PSCache的大小 –>--> <!--<property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />--> <!--<property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" />--> <!--配置监控统计--> <property name="filters" value="${druid.filters}"/> </bean> <!--mybatis和Spring整合的SQLSessionFactory缓存--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--自动扫描Mapper.xml文件--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!--扫描MyBatis的持久层的接口类文件--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.ssmblog.dao"/> </bean> <!--freemarker配置--> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="src/main/webapp/frontend/"/> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">0</prop> <prop key="default_encoding">UTF-8</prop> <prop key="number_format">0.##########</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="classic_compatible">true</prop> <prop key="template_exception_handler">ignore</prop> </props> </property> </bean> <!--事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans> 其中jdbc.properties如下配置: #MySQL数据库驱动程序 jdbc.driverClasss=com.mysql.jdbc.Driver #MySQL数据库连接 jdbc.url=jdbc:mysql://localhost:3306/SSMBlog?useSSL=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull #MySQL用户名 jdbc.username=root #MySQL数据库密码 jdbc.password=qwer1234 #定义初始连接数 druid.initialSize=0 #定义最大连接数 druid.maxActive=20 #定义最大空闲 druid.maxIdle=20 #定义最小空闲 druid.minIdle=1 #定义最长等待时间 druid.maxWait=60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 druid.timeBetweenEvictionRunsMillis=60000 #配置一个连接在池中最小生存时间,单位毫秒 druid.minEvictableIdleTimeMillis=30000 druid.validationQuery=SELECT 'x' druid.testWhileIdle=true druid.testOnBorrow=false druid.testOnReturn=false #打开PSCache,并且指定每个连接上PSCache的大小 druid.poolPreparedStatements=false druid.maxPoolPreparedStatementPerConnectionSize=20 druid.filters=stat ④配置spring-mvc.xml; spring-mvc.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--添加扫描的驱动支持--> <context:annotation-config /> <!-- 自动扫描 @Controller--> <context:component-scan base-package="com.ssmblog.controller"/> <!--JSON配置--> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!--启动SpringMVC的注解功能,完成请求和注解POJO的映射--> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--JSON转换器--> <ref bean="mappingJacksonHttpMessageConverter"/> </list> </property> </bean> <!-- 设置freeMarker的配置文件路径 --> <bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <!--注释掉的下方代码是指引freemarker的基本信息的配置位置,因为我已经将配置信息移到了applicationContext文件下,所以这里就没必要存在了,不注释也不会有问题的 --> <!--<property name="location" value="classpath:/WEB-INF/config/freemarker.properties" />--> </bean> <!-- html视图解析器 必须先配置freemarkerConfig,注意html是没有prefix前缀属性的--> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath"> <value>/frontend/</value> </property> </bean> <!--HTML的视图解析格式配置--> <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="suffix" value=".html" /> <property name="order" value="0"></property> <property name="contentType" value="text/html;charset=UTF-8"></property> </bean> <!-- 文件上传配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="UTF-8"/> <!-- 上传文件大小限制为31M,31*1024*1024 --> <property name="maxUploadSize" value="51200000"/> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="4096"/> </bean> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 --> <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop> </props> </property> </bean> </beans> ⑤配置web.xml; web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>SSMBlog</display-name> <!--加载applicationContext.xml--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!--加载日志文件--> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <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> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.json</url-pattern> </filter-mapping> <filter> <filter-name>DruidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> <init-param> <param-name>exclusions</param-name> <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value> </init-param> </filter> <filter-mapping> <filter-name>DruidWebStatFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <!-- spring监听器,Spring应用上下文配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 防止spring内存溢出监听器,比如quartz --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- spring mvc servlet 以及拦截配置--> <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> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此处也可以配置成 *.do 形式 --> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping> <!--初始接口--> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> <welcome-file>/index.html</welcome-file> </welcome-file-list> <!-- session配置,超时配置,单位为分钟 --> <session-config> <session-timeout>15</session-timeout> </session-config> <!-- 出错页面定义 --> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/frontend/common/500.html</location> </error-page> <error-page> <error-code>500</error-code> <location>/frontend/common/500.html</location> </error-page> <error-page> <error-code>404</error-code> <location>/frontend/common/404.html</location> </error-page> </web-app> 其中,log4j.properties配置如下; log4j.properties: #日志文件属性 log4j.rootCategory=info,stdout,R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) -%m%n #日式文件路径配置 log4j.appender.R.file=./logFile.log log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c -%m%n ⑥配置映射、实体类和DAO持久层接口;      以下三者可以自动生成,方法参考: http://blog.csdn.net/qq_34197553/article/details/77745773 映射Mapper.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ssmblog.dao.ContactsMapper"> <resultMap id="BaseResultMap" type="com.ssmblog.entity.Contacts"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="address" jdbcType="VARCHAR" property="address" /> <result column="gender" jdbcType="VARCHAR" property="gender" /> <result column="dob" jdbcType="DATE" property="dob" /> <result column="email" jdbcType="VARCHAR" property="email" /> <result column="mobile" jdbcType="BIGINT" property="mobile" /> </resultMap> <sql id="Base_Column_List"> id, name, address, gender, dob, email, mobile </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from contacts where id = #{id,jdbcType=INTEGER} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> delete from contacts where id = #{id,jdbcType=INTEGER} </delete> <insert id="insert" parameterType="com.ssmblog.entity.Contacts"> insert into contacts (id, name, address, gender, dob, email, mobile ) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR}, #{dob,jdbcType=DATE}, #{email,jdbcType=VARCHAR}, #{mobile,jdbcType=BIGINT} ) </insert> <insert id="insertSelective" parameterType="com.ssmblog.entity.Contacts"> insert into contacts <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="name != null"> name, </if> <if test="address != null"> address, </if> <if test="gender != null"> gender, </if> <if test="dob != null"> dob, </if> <if test="email != null"> email, </if> <if test="mobile != null"> mobile, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=INTEGER}, </if> <if test="name != null"> #{name,jdbcType=VARCHAR}, </if> <if test="address != null"> #{address,jdbcType=VARCHAR}, </if> <if test="gender != null"> #{gender,jdbcType=VARCHAR}, </if> <if test="dob != null"> #{dob,jdbcType=DATE}, </if> <if test="email != null"> #{email,jdbcType=VARCHAR}, </if> <if test="mobile != null"> #{mobile,jdbcType=BIGINT}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.ssmblog.entity.Contacts"> update contacts <set> <if test="name != null"> name = #{name,jdbcType=VARCHAR}, </if> <if test="address != null"> address = #{address,jdbcType=VARCHAR}, </if> <if test="gender != null"> gender = #{gender,jdbcType=VARCHAR}, </if> <if test="dob != null"> dob = #{dob,jdbcType=DATE}, </if> <if test="email != null"> email = #{email,jdbcType=VARCHAR}, </if> <if test="mobile != null"> mobile = #{mobile,jdbcType=BIGINT}, </if> </set> where id = #{id,jdbcType=INTEGER} </update> <update id="updateByPrimaryKey" parameterType="com.ssmblog.entity.Contacts"> update contacts set name = #{name,jdbcType=VARCHAR}, address = #{address,jdbcType=VARCHAR}, gender = #{gender,jdbcType=VARCHAR}, dob = #{dob,jdbcType=DATE}, email = #{email,jdbcType=VARCHAR}, mobile = #{mobile,jdbcType=BIGINT} where id = #{id,jdbcType=INTEGER} </update> <select id="findAllContacts" resultMap="BaseResultMap"> SELECT * FROM contacts </select> <select id="findByContactName" parameterType="java.lang.String" resultMap="BaseResultMap"> SELECT * FROM contacts WHERE name LIKE #{name,jdbcType=VARCHAR} </select> </mapper> 实体类.java: package com.ssmblog.entity; import java.util.Date; public class Contacts { private Integer id; private String name; private String address; private String gender; private Date dob; private String email; private Long mobile; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getAddress() { return address; } public void setAddress(String address) { this.address = address == null ? null : address.trim(); } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender == null ? null : gender.trim(); } public Date getDob() { return dob; } public void setDob(Date dob) { this.dob = dob; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email == null ? null : email.trim(); } public Long getMobile() { return mobile; } public void setMobile(Long mobile) { this.mobile = mobile; } } DAO持久化层接口.java: package com.ssmblog.dao; import com.ssmblog.entity.Contacts; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface ContactsMapper { int deleteByPrimaryKey(Integer id); int insert(Contacts record); int insertSelective(Contacts record); Contacts selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(Contacts record); int updateByPrimaryKey(Contacts record); List<Contacts> findAllContacts(); List<Contacts> findByContactName(String name); } ⑦Service服务层; ContactsServiceI.java: package com.ssmblog.service; import com.ssmblog.entity.Contacts; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface ContactsServiceI { List<Contacts> findAllContacts(); Contacts selectByPrimaryKey(int id); void newContact(Contacts contacts); void deleteContact(int id); void updateContactByPrimaryKey(Contacts contacts); List<Contacts> findByContactName(String name); } ContactsServiceImpl.java: package com.ssmblog.service.impl; import com.ssmblog.dao.ContactsMapper; import com.ssmblog.entity.Contacts; import com.ssmblog.service.ContactsServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service("contactsService") @Transactional public class ContactsServiceImpl implements ContactsServiceI{ @Autowired private ContactsMapper contactsMapper; public void setContactsMapper(ContactsMapper contactsMapper) { this.contactsMapper = contactsMapper; } @Override public List<Contacts> findAllContacts() { return this.contactsMapper.findAllContacts(); } @Override public Contacts selectByPrimaryKey(int id) { return this.contactsMapper.selectByPrimaryKey(id); } @Override public void newContact(Contacts contacts) { this.contactsMapper.insert(contacts); } @Override public void deleteContact(int id) { this.contactsMapper.deleteByPrimaryKey(id); } @Override public void updateContactByPrimaryKey(Contacts contacts) { this.contactsMapper.updateByPrimaryKey(contacts); } @Override public List<Contacts> findByContactName(String name) { return this.contactsMapper.findByContactName(name); } } ⑧Controller层; SSMBlogController.java: package com.ssmblog.controller; import com.ssmblog.entity.Contacts; import com.ssmblog.service.ContactsServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @Controller @RequestMapping("/") public class SSMBlogController { @Autowired private ContactsServiceI contactsServiceI; public void setContactsServiceI(ContactsServiceI contactsServiceI) { this.contactsServiceI = contactsServiceI; } @RequestMapping(value = "index", method = RequestMethod.GET) public ModelAndView indexPage(){ ModelAndView mav = new ModelAndView("index"); List<Contacts> contacts = this.contactsServiceI.findAllContacts(); mav.addObject("contacts",contacts); return mav; } @RequestMapping(value = "save", method = RequestMethod.GET) public ModelAndView newContactPage(){ ModelAndView mav = new ModelAndView("newContact"); return mav; } @RequestMapping(value = "save", method = RequestMethod.POST) public String newContact(@RequestParam("dateOfb")String dob, Contacts contacts) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(dob); contacts.setDob(date); this.contactsServiceI.newContact(contacts); return "redirect:index.html"; } @RequestMapping(value = "delete", method = RequestMethod.GET) public String deleteContact(int id){ this.contactsServiceI.deleteContact(id); return "redirect:index.html"; } @RequestMapping(value = "update", method = RequestMethod.GET) public ModelAndView updateContactPage(int id){ ModelAndView mav = new ModelAndView("editContact"); Contacts contacts = this.contactsServiceI.selectByPrimaryKey(id); mav.addObject("editContact", contacts); return mav; } @RequestMapping(value = "update", method = RequestMethod.POST) public String updateContact(@RequestParam("dateOfb")String dob, Contacts contacts) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(dob); contacts.setDob(date); this.contactsServiceI.updateContactByPrimaryKey(contacts); return "redirect:index.html"; } @RequestMapping(value = "search", method = RequestMethod.POST) public ModelAndView findByContactName(String name){ ModelAndView mav = new ModelAndView("index"); String contactName = "%" + name + "%"; List<Contacts> contacts = this.contactsServiceI.findByContactName(contactName); mav.addObject("contacts",contacts); return mav; } @RequestMapping(value = "findAllContacts", method = RequestMethod.GET) @ResponseBody public List<Contacts> findAllContacts(){ return this.contactsServiceI.findAllContacts(); } } ⑨整合完毕,在Tomcat服务器上运行,若发现浏览器上查看得到如下图所示的情况,则代表整合成功。

3、项目源码下载

提供了源码下载地址: 源码地址
转载请注明原文地址: https://www.6miu.com/read-68638.html

最新回复(0)