咸鱼了好几天,在写一个ssm整合的文件上传,显示管理的小案例。
这篇文章,用来记录ssm整合中遇到解决的坑!
SSM
SS整合spring jdbc模板
步子一步一步走,先不整合Mybatis,使用spring jdbc模板,把SS的整合先搞明白!
1. 依赖
maven项目第一步,添加依赖
要添加的依赖很多:
spring系列的,核心包,aop,beans,aspects,context,context-support,tx,expression,jdbc
springMvc的,web,webmvc
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-aspects</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-context-support</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-web</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-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-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
支持jsp页面使用的jar包依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
数据库驱动,这里用mysql所以是mysql的驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
这是不整合mybatis,之后整合mybatis的会增加jar包
2. 配置文件的编写
需要自己创建4个配置文件,配置5个配置文件,因为web.xml是本来就存在的。
配置顺序(个人认为):web.xml -> applicationContext.xml(spring配置文件) -> springmvc.xml(spring配置文件) -> jdbc.propertis(数据库4大件配置) -> mybatis.xml(如果集成mybatis的话)
web.xml配置
dtd约束
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
配置服务器启动加载spring配置文件(注册ContextLoaderListener)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这个类命要记住,这个配置除了applicationContext.xml文件名不一定一致外其余均为可以理解为固定写法
配置springmvc的中央控制器
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--强制转码-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置springmvc的中央控制器可以理解为配置一个servlet
配置中文乱码过滤器
<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>
配置jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java?serverTimezone=UTC
jdbc.username=root
jdbc.password=yjb990828
配置applicationContext.xml(spring配置文件)
加载jdbc组件
<context:property-placeholder location="classpath:jdbc.properties"/>
配置数据源
c3p0
引入c3p0的jar包
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
配置数据源
<bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
spring内置的数据源
<bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
注意spring内置数据源与c3p0在参数名称上有所不同,注入时注意区分
注册dao层(mybatis中这个工作会由mybatis完成)
注册dao
<bean id="accountDaoImpl" class="top.byfree.mapperper.impl.AccountMapperImpl">
<property name="dataSource" ref="comboPooledDataSource"/>
</bean>
<bean id="fundDaoImpl" class="top.byfree.mapperper.impl.FundMapperImpl">
<property name="dataSource" ref="comboPooledDataSource"/>
</bean>
因为是使用spring自带的jdbc模板,dao层的类会继承JdbcDaoSupport类,父类中需要注入数据源dataSource,这里是注册了两个dao层的类
注册组件扫描器
只需要扫描service的impl中的实现类即可,controller会在springmvc中进行扫描
<context:component-scan base-package="top.byfree.service.impl"/>
配置springmvc.xml
组件扫描器,扫描controller层
<context:component-scan base-package="top.byfree.controller"/>
注册注解驱动
<mvc:annotation-driven/>
注册视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
静态资源访问问题解决
<mvc:default-servlet-handler/>
3. 使用springjdbc模板编写dao层代码
public class Jojo extends JdbcDaoSupport {
public int update() {
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
String sql = "update fund set fname=弟弟 where fid=1";
int update = jdbcTemplate.update(sql);
return update;
}
}
类体继承JdbcDaoSupport, 方法使用this获取JdbcTemplate对象
调用对象下的方法,来执行sql语句,返回结果集即可
整合mybatis
1. 依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
需要额外引入mybatis和mybatis-spring
2. 配置文件
编写和添加mybaits.xml配置文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--日志常量-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--起别名-->
<typeAliases>
<package name="top.byfree.pojo"/>
</typeAliases>
<!--注册映射文件-->
<mappers>
<package name="top.byfree.mapper"/>
</mappers>
</configuration>
我的理解是,核心的功能都交给spring的ioc容器管理了
剩下一些,设置会使用mybaits.xml配置文件完成
配置spring管理mybatis
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="driverManagerDataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
<property name="typeAliasesPackage" value="top.byfree.pojo"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="top.byfree.mapper"/>
</bean>
注册sqlSessionFactoryBean
获取MapperScannerConfigurer代理对象,我理解为扫描mapper层
进行开发
接下来的所有事情就会简单很多
mapper层的操作,可以使用注解也可以使用映射xml文件配置实现
service只需要使用@Autowired
或者@Resource
注解注入,又或是在applicationContext.xml中用配置的方式注入
controller层,使用mvc中的注解,或者是配置xml方式都可以
2020/5/1:13.33
这次真是咸鱼了很久,有很多原因吧!接下来会认真学习的,加油!
考虑了很久,是进行shiro还是先springboot,还有最近还想开一个算法的坑,根据《算法第四版》这本书。但是看了看又放了回去果然看书对我还是太难了,现在天天在家太浮躁了,回学校再考虑吧。