SSM整合-环境搭建
一.简述:
ssm分别代表什么?
Spring springMVC MyBatis
二. 详细的环境搭建步骤
1. 创建maven-webapp项目
①导入pom.xml 修改项目名
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>com.czxy</groupId>
<artifactId>ssm1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>ssm1 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!--<scope>test</scope>-->
</dependency>
<!-- web核心 -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.aliyuncs</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.aliyuncs.dysmsapi</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>el-api</groupId>
<artifactId>el-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
<exclusions>
<exclusion>
<artifactId>commons-lang</artifactId>
<groupId>commons-lang</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.czxy</groupId>
<artifactId>itcast-tools</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.3</version>
<classifier>JDK15</classifier>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
<exclusion>
<artifactId>commons-beanutils</artifactId>
<groupId>commons-beanutils</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang</artifactId>
<groupId>commons-lang</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- mybatis+数据库 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.4.RELEASE</version>
<!--<scope>test</scope>-->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!--springMVC-->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.4</version>
<exclusions>
<exclusion>
<artifactId>jackson-annotations</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>ssm1</finalName>
<pluginManagement>
<plugins>
<!--统一 编译环境 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<!-- tomcat 配置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8080</port>
<server>tomcat7</server>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
<resources>
<resource>
<directory>src/main/java</directory>
<!-- 此配置不可缺,否则mybatis的Mapper.xml将会丢失 -->
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置-->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
②向web-inf导入web.xml
- web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
③创建java和resources
注意:
Java 标记为源码根
resources 标记为配置文件根
首先创建两个文件夹并命名,然后再分别进行标记
java:
resources:
④检查pom.xml中配置文件目录的名字是否和 resources目录同名
⑤配置tomcat
1. 点击Run -->Edit Configurations...
2. 点左上 + 选择Tomcat Server
3. 修改命名
4. 选择Deployment --> 点击"+" --> 选择 Artifacts
5. 选择第二个
6. 路径命名最好与项目名一致
7. 选择Server , 修改浏览器,
并且改选为Update clasess and resources(如果默认Do nothing 项目的JSP,你每次需要重启)
最终点击确认即可
2. 创建config目录,导入配置文件
①在java下创建config目录,导入四大配置文件
在此前,需要使用Notepad++编辑,检查是否编码为无BOM
然后四个配置文件复制进config下即可
-
MVCConfiguration
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/**EnableWebMvc:开启MVC配置
* 要在该配置类中配置ComponentScan,否则无法使用resources注解在此加拦截器
*/
@Configuration
@ComponentScan(basePackages={"com.czxy"})
@EnableWebMvc
public class MVCConfiguration extends WebMvcConfigurerAdapter{
/**配置一个视图解析器*/
@Bean
public InternalResourceViewResolver viewResolver(){
//1、创建一个内部资源视图解析器
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
//2、设置解析器前缀
viewResolver.setPrefix("/");
//3、设置解析器后缀
viewResolver.setSuffix(".jsp");
return viewResolver;
}
/**文件上传解析器:方法名必须为multipartResolver*/
@Bean
public CommonsMultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
//上传最大文件限制:5242880字节 = 5MB
multipartResolver.setMaxUploadSize(5242880);
//缓存设置:4096字节 = 4KB
multipartResolver.setMaxInMemorySize(4096);
multipartResolver.setDefaultEncoding("UTF-8");
return multipartResolver;
}
}
-
MyBatisConfiguration
package config;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;
import javax.sql.DataSource;
import java.util.Properties;
public class MyBatisConfiguration {
@Bean
public SqlSessionFactory sessionFactory(DataSource dataSource) throws Exception{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
//1 数据源
factoryBean.setDataSource(dataSource);
//2 全局配置
Configuration configuration = new Configuration();
//驼峰映射(根据需要开启)
//configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
//3 分页助手
PageHelper pageHelper = new PageHelper();
Properties pageProps = new Properties();
pageProps.setProperty("dialect", "mysql");
pageProps.setProperty("rowBoundsWithCount", "true");
pageHelper.setProperties(pageProps);
factoryBean.setPlugins(new Interceptor[]{pageHelper});
//4 通过工厂bean获得对象
return factoryBean.getObject();
}
@Bean
public MapperScannerConfigurer scannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
//注册Dao。(注册时,修改包路径即可)
//mapperScannerConfigurer.setBasePackage("com.czxy.product.dao,com.czxy.category.dao");
mapperScannerConfigurer.setBasePackage("com.czxy.user.dao");
return mapperScannerConfigurer;
}
}
-
SpringConfiguration
package config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
* spring配置类
* @author liuyue
* 以下三个注解分别为:
* 1、标明当前为配置类
* 2、加载db.property配置文件
* 3、启动spring事务管理器
*/
@Configuration
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
public class SpringConfiguration {
/**spring 4.2.4 解析properties文件必有*/
@Bean
public static PropertySourcesPlaceholderConfigurer config(){
return new PropertySourcesPlaceholderConfigurer();
}
/**获取数据*/
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
/**配置数据源-使用阿里druid*/
@Bean
public DataSource getDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
/**配置事务管理器*/
@Bean
public DataSourceTransactionManager txManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
-
WebInitializer
package config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
public class WebInitializer implements WebApplicationInitializer {
/**项目启动时会执行该方法*/
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
/**1、初始化Spring容器(Bean对象的公寓)*/
AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
//注册配置文件(将来spring和MyBatis配置文件都以该方式配置进来)
application.register(MVCConfiguration.class);
application.register(SpringConfiguration.class);
application.register(MyBatisConfiguration.class);
//将ServletContext设置进Spring容器
application.setServletContext(servletContext);
/**2、post乱码解决*/
javax.servlet.FilterRegistration.Dynamic encodingFilter =
servletContext.addFilter("CharacterEncodingFilter", new CharacterEncodingFilter("UTF-8"));
//设置拦截处理乱码路径
encodingFilter.addMappingForUrlPatterns(null, true, "/*");
/**3、向servletContext中添加一个前端控制器*/
Dynamic springMVCServlet =
servletContext.addServlet("springmvc", new DispatcherServlet(application));
//控制器仅拦截*.action的请求
springMVCServlet.addMapping("*.action");
springMVCServlet.setLoadOnStartup(2);
}
}
注意: 第一次导的人可能会报错: Alt+回车, 导包即可
然后去检查WebInitializer.java文件,是否注册了另外三个文件
(MybatisConfiguartion.class没注册进去的话, dao全报废
SpringConfiguration.class没注册进去的话,事务报废
MVCConfiguration.class没注册进去的话,控制器报废
)
②把propertes文件导入到resources目录,并进行修改(db.properties)
- db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm_db1
jdbc.username=root
jdbc.password=1234
修改db.properties中相应数据库名即可
- log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
log4j.rootLogger=debug, stdout
#log4j.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 = debug
#log4j.logger.java.sql.ResultSet =debug
log4j.logger.org.apache.ibatis.transaction = info
log4j.logger.org.apache.ibatis.io = info
log4j.logger.org.apache.ibatis.datasource = info
log4j.logger.org.apache.ibatis.logging = info
到这里,配置就全部完成了,那么下面教你如何你创建基本类
3. 创建package包&定义pojo
User类:
@Table(name="t_user")
public class User implements Serializable{
@Id
private Integer uid;//主键ID
@Column(name="login_name")
private String login_name;//登录名
@Column(name="login_pwd")
private String login_pwd;//登录密码
private Integer age;//年龄
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;//生日
private String sex;//性别
private String education;//学历
private String telephone;//电话
private String interest;//爱好
private String remark;//备注
@JsonFormat(pattern = "yyyy-MM-dd")
public Date getBirthday() {
return birthday;
}
//get set 有参 无参 toString
}
4. 定义Dao接口继承通用Mapper,设置Mapper映射,注册Dao
public interface UserDao extends Mapper<User> {
}
UserDao.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">
<!--
namespace必须为对应dao接口的全类名
-->
<mapper namespace="com.czxy.user.dao.UserDao">
</mapper>
注册Dao:
5. 定义Service接口和实现类,实现类加入事务管控
UserServiceImpl:
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Resource
private UserDao userDao;
}
6. 定义控制器,设置控制器访问路径
UserController
@Controller
@RequestMapping("/user")
public class UserController {
//因为将来一个接口下可能有多个实现类,建议接口类型变量名 = 实现类名小驼峰式命名
@Resource
private UserService userServiceImpl;
}
7. webapp用于导入项目原型
如:
这样,SSM框架整合可就终于完成了 , 这一张张图截的, 手有点抖了呀~~
看了的兄弟们, 可必须得安排上了哈, 哈哈~~~
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!