ssm整合主要有两种情况,一种是数据访问层使用原始DAO,另一种是数据访问层使用Mapper动态代理,这两种情况的配置有一定区别。整合完毕的框架基于注解使用。
当然了,框架整合首先就得导入需要的jar包,这个无需多说。
两种方式的配置文件都包括:
web.xml
applicationContext.xml -------- spring核心配置文件
springmvc.xml ------------------springmvc核心配置文件
SqlMapConfig.xml --------------mybatis主配置文件
XXXMapper.xml ---------------mybatis映射文件
db.properties ----------------数据库连接信息
log4j.properties ----------------日志配置
1.使用原始DAO
使用原始dao需要程序猿自己写dao接口和dao实现类。
web.xml没什么好说的,主要配置项:
一、 Spring监听器,用于初始化Spring容器
二、 SpringMVC核心,前端控制器DispatcherServlet
三、 Post方式乱码过滤器
<!-- 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>
<!-- springmvc核心,前端控制器DispatcherServlet -->
<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/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern><!-- 需要处理静态资源 -->
</servlet-mapping>
<!-- post乱码过滤 -->
<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>
applicationContext.xml:
① 数据源
② Service层、dao层的包扫描
③ 事物
④ sqlSessionFactory(spring和mybatis整合)
<context:property-placeholder location="classpath:db.properties" />
<!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
<context:component-scan base-package="com.sobey.service,com.sobey.dao" />
<!-- 配置dbcp数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 开发阶段数据库最大连接数建议设置小一点够用即可,设置为3 -->
<property name="maxActive" value="${jdbc.maxActive}" />
<property name="maxIdle" value="${jdbc.maxIdle}" />
</bean>
<!-- 配置sqlSessionFactory,完成spring和mybatis的整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置SqlMapConfig.xml -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />
<!-- 声明使用注解式事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
Springmvc.xml:
1. Action层包扫描
2. 配置三大组件(映射器、适配器、视图解析器)
3. 文件上传组件
4. 拦截器
5. 静态资源访问
<!-- 注册注解默认映射器和适配器,包含json转换器 -->
<mvc:annotation-driven />
<!-- 包扫描,识别注解 -->
<context:component-scan base-package="com.sobey.action" />
<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 视图的后缀 -->
<property name="suffix" value=".jsp" />
</bean>
<!-- 处理静态资源 -->
<mvc:resources location="/js/" mapping="/js/**" />
SqlMapConfig:
1.Po类的别名
2.映射文件
<!-- 定义别名 -->
<typeAliases>
<package name="com.sobey.po" />
</typeAliases>
<!-- 配置mapper映射文件 -->
<mappers>
<!-- 加载 原始dao使用映射文件 -->
<mapper resource="sqlMap/UserMapper.xml" />
</mappers>
XXXMapper.xml:
增、删、改、查的statement
<mapper namespace="test">
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM USER WHERE id = #{id}
</select>
<select id="findUserByPage" parameterType="page" resultType="user">
SELECT * FROM USER WHERE id limit #{index},#{pageSize}
</select>
<select id="getTotalRecord" resultType="long">
SELECT COUNT(*) FROM USER
</select>
</mapper>
2.使用Mapper动态代理
使用mapper动态代理程序猿只需要写dao接口而不用写dao实现类,由mybatis框架自动生成dao实现代理对象。
和使用原始dao相比,不一样的地方主要有三个:
1.applicationContext.xml中配置sqlSessionFactory完成spring和mybatis的整合,将mapper交由spring容器自动扫描装配,此时遵循一个原则:将mapper接口和mapper.xml放在同一目录下。
<!-- 配置sqlSessionFactory,完成spring和mybatis的整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置SqlMapConfig.xml -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
</bean>
<!-- 配置mapper自动扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer
">
<!-- 配置扫描基础包 -->
<property name="basePackage" value="com.sobey.mapper" />
</bean>
2.sqlMapConfig.xml只需要定义po类的别名即可
<!-- 定义别名 -->
<typeAliases>
<package name="com.sobey.po" />
</typeAliases>
3.XXXMapper.xml中namespace需要定义成对应mapper接口的全类名,主要是为了mapper接口和mapper.xml的映射。
<mapper namespace="com.sobey.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
自己搭好框架之后写了个小例子:
主要功能有登录验证,包含验证码;
对学生信息的增、删、改、查; 包含了分页操作