首先说一下为什么要写这个吧!
这篇博客是对maven的ssm框架整合的一些基本配置,有了以下配置,一个ssm小demo就可以运行起来了.
本人之前也是使用的ssh框架,刚学完ssm,就写下了这篇文章,一个是对ssm学习的一个整个,加深对整个框架的一些认识,然后也可以让其他朋友快速的上手ssm框架.
好了,废话不多说,直接上代码吧!
shouxian
一.依赖管理(我的依赖都是继承的父项目的,所以版本号都交给了父项目统一管理)
1.spring和springmvc相关依赖
<!-- Spring --> <!--springmvc的相关依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency>
<!--spring的相关依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency>
ps:spring-webmvc为springmvc的依赖,这个依赖又依赖spring的依赖,所以只要引入webmvc后,spring的相关依赖就不用引入了,会自动引入,下图是springmvc和spring的依赖关系:
2.mybatis相关依赖管理
<!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-paginator</artifactId> </dependency>
3.mysql的依赖管理(我当前做的这个项目用的是mysql,配的是mysql的依赖)
<!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
4.日志依赖
<!-- log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
5.json处理工具的依赖()
<!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
6.连接池依赖(我这里用的是BoneCPDataSource这个数据源,可以用其他的)
<!-- 连接池 --> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp-spring</artifactId> </dependency>
7.jsp相关依赖
<!-- JSP相关 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <!-- 这个依赖的话,tomcat里面是有的,所以要加上生命周期scope,设置为provided --> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <scope>provided</scope> </dependency>
8.Apache相关的依赖
<!-- Apache工具组件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> </dependency>
9.用到的一个分页的插件的依赖(不用就不写)
<!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> </dependency>
10.通用mapper的依赖(用不到可以不写)
<!-- 通用mapper --> <dependency> <groupId>com.github.abel533</groupId> <artifactId>mapper</artifactId> </dependency>
11.junit依赖
<!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
12.相关插件
<plugins> <!-- 资源文件拷贝插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8090</port> <path>/</path></configuration> </plugin> </plugins>
二.web.xml配置 1.在web.xml里面配置前端转发器DispatcherServlet
<servlet> <servlet-name>springmvc<!--名字随意,不过要和下面的servlet-name相同 --></servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 不配置这个的话,会默认去WEB-INF目录下去加载springmvc配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc/usermanage-servlet.xml</param-value> </init-param> <!-- 随着web启动,初始化springmvc容器,如果不配置,只会在用户第一次访问时初始化 --> <load-on-startup>1</load-on-startup> </servlet> <!-- /、*.xxxx、 /xxx/* 可以使用 /* 不能使用 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 所有请求都进入spirngmvc框架 --> <url-pattern>/</url-pattern> </servlet-mapping>
2.在web.xml配置监听器,应用一加载就创建spring的容器
<!-- 指定spring的配置文件的位置,否则会在根目录下找--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3.在web.xml里配置编码
<!-- 字符编码过滤器 --> <filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
三.mybatis的配置文件
mybatis有两类配置文件,一类是mybatis的全局配置文件mybatis-config.xml,另一类是映射文件
1.全局配置文件:配置的内容较少,很多内容都可以交给spring来管理.在这个项目中,我仅将一下内容写在全局配置文件里.其余均在spring配置文件中
a.先导入约束(mybatis3):
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
b.配置驼峰映射
<!-- 开启驼峰自动映射(可以将表里的user_name自动映射为实体类的userName) --> <settings> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings>
c.配置分页助手插件pageHelper
<!-- 配置分页助手 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql" /> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true" /> </plugin>
d.配置通用mapper的拦截器
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor"> <!--主键自增回写方法,默认值MYSQL,详细说明请看文档 --> <property name="IDENTITY" value="HSQLDB" /> <!--通用Mapper接口,多个通用接口用逗号隔开 --> <property name="mappers" value="com.github.abel533.mapper.Mapper" /> </plugin>
2.映射文件:体现数据表与实体类的映射关系,所有的sql语句都写在这个里面
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 每一个mapper对应一个Mapper的接口,namespace就是对应接口的全类名 --> <mapper namespace="com.gh.usermanage.mapper.UserMapper"> <!-- 每一个select或者update等等之类的标签就对应接口里面的一个方法,id对应方法名,parameterType对应参数类型,resultType对应返回值类型 --> <select id="findAll" resultType="user"> <!--标签里面写sql语句--> select * from user </select> </mapper>
ps:.mybatis的通用mapper相当于hibernate的baseDao,将一些可以公用的方法抽取出来了.只要你的xxxMapper继承Mapper<T>即可,如果有些业务需求通用mapper无法实现的话,可以自己在xxxMapper里面定义方法,在映射文件中写sql就行了. 3.补充:通用mapper的配置方法,分4步 a.依赖(第一部分) b.拦截器配置(第三部分第1点的d) c.实体类加注解(下面是一个User实体,在数据库中对应着user)
@Table(name="user") public class User { //主键 @Id //主键生成策略 @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String username; private String sex; private String address; // @DateTimeFormat(pattern="yyyy-MM-dd") private Date birthday;
d.xxxMapper接口继承Mapper<T>
public interface UserMapper extends Mapper<User> {}
四.springmvc配置文件
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- springmvc的相关配置 --> <!-- 开启注解驱动(没有配置处理器映射器和适配器的时候会自动使用推荐的注解处理器映射器和适配器) --> <mvc:annotation-driven /> <!-- 定义扫描包 将该包下所有标注有@controller的类加入到springmvc容器中 --> <context:component-scan base-package="com.gh.usermanage.controller" /> <!-- 定义视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 处理静态资源被拦截问题 ,将所有的静态资源全部交给服务器处理--> <mvc:default-servlet-handler/> </beans>
五.spring配置文件 spring配置文件的话,可以分为不同的文件,命名就按applicationContext*.xml来 1.applicationContext.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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/aop http://www.springframework.org/schema/aop/spring-aop-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/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 使用spring自带的占位符替换功能 ,当数据源引用配置文件的时候才有这个配置--> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <!-- 允许JVM参数覆盖 --> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <!-- 忽略没有找到的资源文件 --> <property name="ignoreResourceNotFound" value="true" /> <!-- 配置资源文件 --> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <!-- 开启注解包扫描 --> <context:component-scan base-package="com.gh"/> </beans>
ps:
jdbc.properties的配置
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis01?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true jdbc.username=root jdbc.password=999
2.application_datasource.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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/aop http://www.springframework.org/schema/aop/spring-aop-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/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 配置数据源 --> <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> <!-- 数据库驱动 如果下面是用的的"${...}",则上面那个文件里就要配置--> <property name="driverClass" value="${jdbc.driver}" /> <!-- 相应驱动的jdbcUrl --> <property name="jdbcUrl" value="${jdbc.url}" /> <!-- 数据库的用户名 --> <property name="username" value="${jdbc.username}" /> <!-- 数据库的密码 --> <property name="password" value="${jdbc.password}" /> <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 --> <property name="idleConnectionTestPeriod" value="60" /> <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 --> <property name="idleMaxAge" value="30" /> <!-- 每个分区最大的连接数 --> <property name="maxConnectionsPerPartition" value="150" /> <!-- 每个分区最小的连接数 --> <property name="minConnectionsPerPartition" value="5" /> </bean> </beans>
3.applicationContext_mybatis.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 将mybatis交给spring管理 --> <!-- 定义Mybatis的SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引入数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 指定mybatis全局配置文件的位置 --> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" /> <!-- 扫描目标下所有的mapper映射xml文件(/**/*.xml可以将mapper里面所有的包和包里的文件全部扫描到) --> <property name="mapperLocations" value="classpath:mybatis/mapper/**/*.xml"/> <!-- 别名包扫描,就是将这个包下面的所有实体类自动配置别名 --> <property name="typeAliasesPackage" value="com.gh.usermanage.pojo"/> </bean> <!-- 优化:无需手动操作SqlSessionFactory,直接通过spring容器获得Mapper接口的动态代理实现类。 <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--mapper接口--> <property name="mapperInterface" value="com.gh.usermanage.mapper.UserMapper"/> <!-- 定义sqlSessionFactory --> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> --> <!-- 优化:无需指定一个个配置mapper接口,而是通过mapper扫描器对包进行扫描,生成所有mapper接口的动态代理实现类。 --> <!-- 无需指定sqlSessionFactory,扫描自动搜索查询sqlSessionFactory --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.gh.usermanage.mapper"/> </bean> </beans>
ps:spring还有一些其他配置,这里就不一一配置了,比如说tx,aspect,advice等的配置,不会影响到基本整合后的运行. ps:maven相关插件的详细介绍,请看http://blog.csdn.net/yaowj2/article/details/7198267 这是我的第一篇博客,写的不好的地方,大家见谅!如果有什么不对或者不懂的地方,可以在下方评论,谢谢!