ssm框架首次搭建记录

来源:互联网 发布:概念式建筑设计知乎 编辑:程序博客网 时间:2024/06/05 11:59

首先放上整个ssm整合的基本结构:



整个spring所需要的jar包文件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/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>cn.gson.springmvc</groupId>  <artifactId>springmvc</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>  <name>springmvc</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.1.RELEASE</version></dependency>    <dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-core</artifactId>    <version>4.3.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-beans</artifactId>    <version>4.3.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-context</artifactId>    <version>4.3.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-expression</artifactId>    <version>4.3.3.RELEASE</version></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-aspects</artifactId>    <version>4.3.3.RELEASE</version></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-tx</artifactId>    <version>4.3.3.RELEASE</version></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-jdbc</artifactId>    <version>4.3.3.RELEASE</version></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.4.Final</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.20</version></dependency><!-- MyBatis的核心 库 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!-- MyBatis与Spring的整合库 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!-- MyBatis的分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.1.6</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.10.4.RELEASE</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId><version>1.3</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.2.Final</version></dependency><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifactId>    <version>1.7.21</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.22</version></dependency>  </dependencies>  <build><sourceDirectory>src/main/java</sourceDirectory><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><warSourceDirectory>WebContent</warSourceDirectory><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build></project>
配置文件:

tr17-servlet.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="        http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-4.0.xsd          http://www.springframework.org/schema/mvc           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd        http://www.springframework.org/schema/data/jpa        http://www.springframework.org/schema/data/jpa/spring-jpa.xsd        http://www.springframework.org/schema/context          http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> --><!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> --><context:component-scan base-package="cn.gson.springmvc" /><mvc:default-servlet-handler /><mvc:annotation-driven /><!-- 指定静态资源的路径映射 --><mvc:resources location="/WEB-INF/images/" mapping="/images/**"/><!-- 视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property></bean><!-- 配置拦截器 --><mvc:interceptors><!-- 默认拦截所有请求 --><bean class="cn.gson.springmvc.interceptor.NatureInterceptor" /><mvc:interceptor><mvc:mapping path="/hc" /><mvc:mapping path="/hc/*"/><bean class="cn.gson.springmvc.interceptor.TestInterceptor"></bean></mvc:interceptor></mvc:interceptors><!-- 集成自定义的转换器 --><bean id="conversionService1"class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><list><!-- 自定义的类型转换器 --><bean class="cn.gson.springmvc.converter.PhoneConverter" /><bean class="cn.gson.springmvc.converter.DateConverter" /></list></property></bean><!-- 指定消息资源文件 --><bean id="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="basename" value="classpath:ValidationMessages"></property><property name="fileEncodings" value="utf-8"></property><property name="cacheSeconds" value="120" /></bean><!-- 验证框架 --><bean id="validator"class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name="providerClass" value="org.hibernate.validator.HibernateValidator" /><property name="validationMessageSource" ref="messageSource"></property></bean><!-- 为mvc注册类型转换器和验证器 --><mvc:annotation-driven validator="validator"conversion-service="conversionService1" /><!-- 文件上传 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 文件最大上传大小100M->104857600 --><property name="maxUploadSize" value="104857600" /><property name="maxInMemorySize" value="4096" /><property name="defaultEncoding" value="UTF-8" /><property name="resolveLazily" value="true" /></bean><!-- 继承fastjson输出 --><mvc:annotation-driven><mvc:message-converters register-defaults="true"><!-- 配置Fastjson支持 --><beanclass="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>application/json;charset=UTF-8</value><value>text/html;charset=UTF-8</value></list></property><property name="features"><list><value>WriteMapNullValue</value><value>QuoteFieldNames</value></list></property></bean></mvc:message-converters></mvc:annotation-driven><!-- SqlSessionFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 指定数据源 --><property name="dataSource" ref="dataSource_druid" /><!-- 指定Mybatis核心配置文件地址 --><property name="configLocation" value="classpath:mybaties-config.xml"/><!-- 自动扫描mapping.xml文件,注意这里的classpath后面的*是必须的 --><property name="mapperLocations" value="classpath*:mapper/*.xml" /><!-- pojo所在包 --><property name="typeAliasesPackage" value="cn.gson.springmvc.entity" /><!-- 整合PageHelper分页插件 --><property name="plugins"><array><bean class="com.github.pagehelper.PageHelper"><property name="properties"><value>dialect=oracle</value></property></bean></array></property></bean><!-- MapperScannerConfigurer --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定Session工厂 --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property><!-- 指定需要自动扫描的DAO所在的包 --><property name="basePackage" value="cn.gson.springmvc.dao.mybaties"></property></bean><!-- MyBatis事务 --><bean id="transactionManager_mybatis"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource_druid"></property></bean><tx:annotation-driven transaction-manager="transactionManager_mybatis" /><!-- druid配置 --><bean id="dataSource_druid"class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"><property name="targetDataSource"><bean class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/><property name="username" value="scott" /><property name="password" value="123456" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="5" /><property name="maxActive" value="30" /></bean></property></bean><!-- JPA --><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource_druid"></property></bean><!-- 定义DAO所在的包,以便自动扫描 --><jpa:repositories base-package="cn.gson.springmvc.dao.jpa"></jpa:repositories><!-- 配置jpa事务管理器 --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"></property></bean><!-- JPA的事务管理器 --><tx:annotation-driven transaction-manager="transactionManager"/></beans>

mybaties-config.xml:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 指定映射的mapper文件 --><mappers><mapper resource="mappers/SqlMapper.xml"/></mappers></configuration>

wen.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  <display-name>mvc</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>  </welcome-file-list>  <servlet><servlet-name>tr17</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定配置文件的位置 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:tr17-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>tr17</servlet-name><url-pattern>/</url-pattern></servlet-mapping><filter><filter-name>encode</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>encode</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

persistence.xml

<?xml version="1.0" encoding="UTF-8" ?><persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"><persistence-unit name="todos" transaction-type="RESOURCE_LOCAL"><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><properties><property name="hibernate.show_sql" value="true" />       <property name="hibernate.format_sql" value="true" />  </properties></persistence-unit></persistence> 
在这个目录下,不然会报错。

log4j.propo'erties:

log4j.rootLogger=debug,stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppender#log4j.appender.stdout.Target=System.errlog4j.appender.stdout.layout=org.apache.log4j.SimpleLayoutlog4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUGlog4j.logger.org.hibernate=warnlog4j.logger.org.hibernate.transaction=warn log4j.logger.org.hibernate.jdbc=warn log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=tracelog4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

接下来我把对应的什么转换器、拦截器、控制器、jpaDao、mybatiesDao格局一个例子供参考。

SqlMapper.xml(Mapper文件示例):

<?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="cn.gson.springmvc.dao.mybaties.BookDao"><resultMap id="book" type="cn.gson.springmvc.entity.Book"><id property="id" column="id"/><result property="bookName" column="book_name"/><result property="bookPrice" column="book_price"/><result property="bookNum" column="book_num"/><result property="bookIsbn" column="book_isbn"/></resultMap><select id="getBookList" resultMap="book">select * from book where 1 = 1<choose><when test="bookName != null">and book_name like #{bookName}</when><otherwise><if test="bookPrice != null">and book_price like #{bookPrice}</if></otherwise></choose><if test="bookNum != null">and book_num = #{bookNum}</if></select></mapper>

JpTestController.java

package cn.gson.springmvc.controller;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 cn.gson.springmvc.dao.jpa.AccountDao;@Controller@RequestMapping("/jpa")public class JpTestController {@Autowiredprivate AccountDao acDao;@RequestMapping("/show")public String index(Model m){m.addAttribute("acList", acDao.findAll());return "jpa";}@RequestMapping("/add")public String add(Model m){m.addAttribute("acList", acDao.findAll());return "jpa";}}

DateConverter.java

package cn.gson.springmvc.converter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.springframework.core.convert.converter.Converter;import org.springframework.util.StringUtils;public class DateConverter implements Converter<String, Date> {//这个转换器能转换的所有时间格式private String[] datePatterns = {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd HH:mm","yyyy-MM-dd","yyyy-MM"};@Overridepublic Date convert(String source) {Date date = null;if (!StringUtils.isEmpty(source)) {SimpleDateFormat sdf;for (String pattern : datePatterns) {sdf = new SimpleDateFormat(pattern);//在这里将source转换为date类型try {date = sdf.parse(source);break;} catch (ParseException e) {}}}return date;}public DateConverter() {// TODO Auto-generated constructor stub}public DateConverter(String... datePatterns) {this.datePatterns = datePatterns;}}

AccountDao.java

package cn.gson.springmvc.dao.jpa;import java.util.List;import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;import cn.gson.springmvc.entity.Account1;@Repositorypublic interface AccountDao extends CrudRepository<Account1, Integer> {List<Account1> findByAcnameAndGender(String acname,String gender);List<Account1> findByAcnameOrGenderOrderByIdDesc(String acname,String gender);List<Account1> findByDealsNotNull();}

BookDao.java

package cn.gson.springmvc.dao.mybaties;import java.util.List;import cn.gson.springmvc.entity.Book;public interface BookDao {int insertBook(Book b);List<Object> getBookList();int updateBook(Book b);int deleteBook(int i);List<Object> queryStudentAndBook();List<Object> queryBook();}

性能监控(拦截器 )

Nature Interceptor.java

package cn.gson.springmvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;/** * 性能监控 *  * @author gson * */public class NatureInterceptor extends HandlerInterceptorAdapter {private Long start;private String uri;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {start = System.currentTimeMillis();uri = request.getRequestURI();return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println(uri + ":请求执行完成耗时:" + (System.currentTimeMillis() - start));}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println(uri + ":请求最终完成总耗时:" + (System.currentTimeMillis() - start));}}

大致的内容就是这样的了,期间虽然遇到了很多异常,但是通过调试和努力解决了问题。首先考虑是否是jar包冲突,其次考虑beanid是否重复,最后的话就注意数据库连接池的配置了。


1 0