业务层
View: 数据显示
Controller: 业务控制(执行成功怎么处理,执行失败怎么处理)
Service: 业务处理
Model: 数据库相关实体类(增删改查)
工程搭建
第一步 创建Maven web工程
点击finish创建完毕工程
第二步 导入SSM整合所需包
这边我们使用maven导入
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.9</junit.version>
<spring.version>4.3.10.RELEASE</spring.version>
<mybatis.version>3.1.0</mybatis.version>
<mybatis.spring.version>1.3.1</mybatis.spring.version>
<druid.version>1.1.0</druid.version>
<mysql.version>8.0.15</mysql.version>
<jstl.version>1.2</jstl.version>
<log4j.version>1.2.17</log4j.version>
<fastjson.version>1.2.35</fastjson.version>
<slf4j.version>1.7.25</slf4j.version>
<jackson.version>1.9.13</jackson.version>
<commons-fileupload.version>1.3.3</commons-fileupload.version>
<commons-io.version>2.5</commons-io.version>
<commons-codec.version>1.10</commons-codec.version>
<aspectjweaver.version>1.8.10</aspectjweaver.version>
</properties>
<dependencies>
<!-- Junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- spring包 core、web、oxm、tx、jdbc、webmvc、aop、context、test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-oxm</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-jdbc</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-aop</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-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- json和bean之间相互转换 -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b07</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.0</version>
<type>jar</type>
</dependency>
</dependencies>
依次创建maven规则文件夹,基本项目结构:
第三步 配置Spring MVC
3.1 在resources文件夹底下创建conf文件夹,在里面添加mvc.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: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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
</beans>
3.2 根据工程结构创建java文件夹中的包,如下图所示
3.3 在controller文件夹中添加一个简易的controller类,HelloController
package com.ljn.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("hello")
public class HelloController {
@RequestMapping("/hello.html")
public ModelAndView hello(String name,Integer age) {
return new ModelAndView("/main.jsp");
}
}
3.4 修改配置文件
在web.xml中配置mvc
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.5 简单测试
在web下写一个main.jsp
<%--
Created by IntelliJ IDEA.
User: alisa
Date: 2019/4/7
Time: 21:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello main</h1>
</body>
</html>
修改index.jsp
<%--
Created by IntelliJ IDEA.
User: alisa
Date: 2019/4/7
Time: 21:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>hello index</h1>
<a href="/hello/hello.html?name=hhh&age=30">hello.html</a>
</body>
</html>
修改HelloController
package com.ljn.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("hello")
public class HelloController {
@RequestMapping("/hello.html")
public ModelAndView hello(String name,Integer age) {
System.out.println(name);
System.out.println(age);
return new ModelAndView("/main.jsp");
}
}
启动服务
访问站点
查看控制台
至此,Spring MVC配置完毕
第四步 配置Spring
4.1添加Service
在service文件夹中创建下面两个类
//HelloService
package com.ljn.service;
public interface HelloService {
void hello();
}
//HelloServiceImp
public class HelloServiceImp implements HelloService {
@Override
public void hello() {
}
}
4.2 建立mvc与service的关系
在mvc.xml中配置
<!--相当于new HelloController()-->
<bean class="com.ljn.controller.HelloController">
<!--相当于调用了setHelloService()-->
<property name="helloService" ref="helloService"/>
</bean>
添加spring.xml文件用来设定spring的配置
<?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: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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<bean id="helloService" class="com.ljn.service.HelloServiceImp">
</bean>
</beans>
在web.xml中配置spring
<!--配置Spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring.xml</param-value>
</context-param>
这边使用监听器,使得spring在最开始的时候创建对象
第五步 整合Spring和Mybatis
5.1 准备工作
添加这些文件
User是数据库中User表对应的实体类
User表结构
//User.java
package com.ljn.bean;
import java.io.Serializable;
public class User implements Serializable {
private Integer user_id;
private String user_name;
private String user_pwd;
public User() {
}
public Integer getUser_id() {
return user_id;
}
public void setUser_id(Integer user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_pwd() {
return user_pwd;
}
public void setUser_pwd(String user_pwd) {
this.user_pwd = user_pwd;
}
@Override
public String toString() {
return "User{" +
"user_id=" + user_id +
", user_name='" + user_name + '\'' +
", user_pwd='" + user_pwd + '\'' +
'}';
}
}
//UserMapper
package com.ljn.mapper;
import com.ljn.bean.User;
import java.util.List;
public interface UserMapper {
List<User> select_all();
List<User> select_map();
}
5.2 配置数据源
在spring.xml中配置
<!--配置数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/servletdemo"/>
<property name="username" value="root"/>
<property name="password" value="12211091"/>
</bean>
还是在spring.xml中修改如下配置
<bean id="helloService" class="com.ljn.service.HelloServiceImp">
<property name="dataSource" ref="dataSource"/>
</bean>
添加UserMap.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">
<mapper namespace="com.ljn.mapper.UserMapper">
<select id="select_all" resultType="com.ljn.bean.User">
select * from user
</select>
<!--映射对象和数据库的关系-->
<resultMap id="remap" type="hashmap">
<id property="user_id" column="user_id"/>
<result property="user_name" column="user_name"/>
</resultMap>
<select id="select_map" resultMap="remap">
select * from user
</select>
</mapper>
在HelloServiceImp中修改
public class HelloServiceImp implements HelloService {
private UserMapper userMapper;
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public void hello() {
System.out.println("HelloServiceImp is hello");
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
5.3这样我们就完成了数据库的连接和数据源的配置,下面我们需要构建session工厂
在HelloServiceImp中进行如下修改
public class HelloServiceImp implements HelloService {
private SqlSessionFactory sessionFactory;
private UserMapper userMapper;
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setSessionFactory(SqlSessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public void hello() {
System.out.println("HelloServiceImp is hello");
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
e.printStackTrace();
}
try {
System.out.println(sessionFactory.openSession());
} catch (Exception e) {
e.printStackTrace();
}
List<User> users = userMapper.select_all();
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i).toString());
}
}
}
在spring.xml中配置
<!--构建session工厂-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="helloService" class="com.ljn.service.HelloServiceImp">
<property name="dataSource" ref="dataSource"/>
<property name="sessionFactory" ref="sessionFactory"></property>
<property name="userMapper" ref="UserMapper"/>
</bean>
<!--EmpMapper empMapper = session.getMapper(EmpMapper.class);-->
<bean id="UserMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.ljn.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sessionFactory"/>
</bean>
第六步 搭建完成,运行一下吧
总结
这样,一个简单的SSM开发环境就搭建完毕了,总得来说还是需要去理解各个框架之间如何建立联系,巧妙地利用好生命周期去完成开发,框架在实现地过程中大量使用了反射的思想,因此告诉我们基础知识的重要性。