整合SSM

需求分析

SSM整合_需求分析
接下来我们使用Maven+Spring+MyBatis+SpringMVC完成一个案例,案例需求为在页面可以进行添加学生+查询所有学生!
案例需要使用以下技术:
使用Maven创建聚合工程,并使用Maven的tomcat插件运行工程
使用Spring的IOC容器管理对象
使用MyBatis操作数据库
使用Spring的声明式事务进行事务管理
使用SpringMVC作为控制器封装Model并跳转到JSP页面展示数据
使用Junit测试方法
使用Log4j在控制台打印日志
案例的编写流程如下:
创建maven父工程,添加需要的依赖和插件
创建dao子工程,配置MyBatis操作数据库,配置Log4j在控制台打印日志。
创建service子工程,配置Spring声明式事务
创建controller子工程,配置SpringMVC作为控制器,编写JSP页面展示数据。
每个子工程都使用Spring进行IOC管理

# 准备数据库数据
CREATE DATABASE `student`;
USE `student`;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
 `id` INT(11) NOT NULL AUTO_INCREMENT,
 `name` VARCHAR(255) DEFAULT NULL,
 `sex` VARCHAR(10) DEFAULT NULL,
 `address` VARCHAR(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8;
INSERT INTO `student`(`id`,`name`,`sex`,`address`) VALUES (1,'百战程序员','男','北京'),(2,'北京尚学堂','女','北京');

SSM整合_创建父工程

父工程是逻辑工程不写java代码

    <properties>
<spring.version>5.2.12.RELEASE</spring.version>
    </properties>
   <dependencies>
       <!--mybatis-->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.7</version>
       </dependency>
       <!--mysql驱动-->
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.27</version>
       </dependency>

       <!--druid连接词-->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.2.11</version>
       </dependency>

       <!--Mybatis与spring的整合包-->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis-spring</artifactId>
           <version>2.0.7</version>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-jdbc</artifactId>
           <version>${spring.version}</version>
       </dependency>
       <!--springMVC-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</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-webmvc</artifactId>
           <version>${spring.version}</version>
       </dependency>
       <!--事务-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-tx</artifactId>
           <version>${spring.version}</version>
       </dependency>
       <dependency>
           <groupId>org.aspectj</groupId>
           <artifactId>aspectjweaver</artifactId>
           <version>1.9.9.1</version>
       </dependency>
       <!--jstl-->
       <dependency>
           <groupId>org.apache.taglibs</groupId>
           <artifactId>taglibs-standard-spec</artifactId>
           <version>1.2.5</version>
       </dependency>
       <dependency>
           <groupId>org.apache.taglibs</groupId>
           <artifactId>taglibs-standard-impl</artifactId>
           <version>1.2.5</version>
       </dependency>
       <!--servlet-->
       <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>servlet-api</artifactId>
           <version>2.5</version>
           <scope>provided</scope>
       </dependency>
       <!--jsp-->
       <dependency>
           <groupId>javax.servlet.jsp</groupId>
           <artifactId>jsp-api</artifactId>
           <version>2.0</version>
           <scope>provided</scope>
       </dependency>
       <!--junit-->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.12</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-test</artifactId>
           <version>${spring.version}</version>
       </dependency>
       <!--log4j-->
       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.12</version>
       </dependency>
   </dependencies>
    <build>
        <plugins>
            <!-- tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                    <systemProperties>
                        <java.util.logging.SimpleFormatter.format>%1$tH:%1$tM:%1$tS %2$s%n%4$s: %5$s%6$s%n
                        </java.util.logging.SimpleFormatter.format>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>
    </build>

SSM整合_创建dao子工程

在父工程下创建maven普通java子工程

编写实体类

public class Student {
  private int id;
  private String name;
  private String sex;
  private String address;
  // 省略getter/setter/tostring/构造方法
}

编写持久层接口

@Repository
public interface StudentDao {
  // 查询所有学生
  @Select("select * from student")
  List<Student> findAll();
  
  // 添加学生
  @Insert("insert into student values(null,#{name},#{sex},#{address})")
  void add(Student student);
}

编写log4j.properties配置文件

log4j.rootCategory=debug, CONSOLE, LOGFILE


log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{MM/dd HH:mm:ss}] %-6r [%15.15t] %-5p %30.30c %x - %m\n

编写数据库配置文件druid.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///student
jdbc.username=root
jdbc.password=root

编写MyBatis配置文件SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>

编写Spring配置文件applicationContext-dao.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"
    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.xsd">
  <!-- 读取数据库配置文件  -->
  <context:property-placeholder location="classpath:druid.properties"></context:property-placeholder>


  <!--  配置数据源  -->
  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"></property>
    <property name="url" value="${jdbc.url}"></property>
    <property name="username" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
  </bean>


  <!--  SqlSessionFactory  -->
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
  </bean>


  <!-- 配置扫描包对象,为包下的接口创建代理对象  -->
  <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.itbaizhan.dao"></property>
  </bean>
</beans>

测试持久层接口的方法

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-dao.xml")
public class StudentDaoTest {
  @Autowired
  private StudentDao studentDao;
  @Test
  public void testFindAll(){
    List<Student> all = studentDao.findAll();
    all.forEach(System.out::println);
   }


  @Test
  public void testAdd(){
    Student student = new Student(0, "SXT", "女", "上海");
    studentDao.add(student);
   }
}

SSM整合_创建service子工程

在父工程下创建maven普通java子工程
写业务逻辑

service子工程引入dao子工程的依赖

<dependencies>
  <dependency>
    <groupId>com.itbaizhan</groupId>
    <artifactId>ssm_dao</artifactId>
    <version>1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

创建服务层方法

@Service
public class StudentService {
  @Autowired
  private StudentDao studentDao;
  public List<Student> findAllStudent(){
    return studentDao.findAll();
   }
  
  public void addStudent(Student student){
    studentDao.add(student);
   }
}

创建服务层的Spring配置文件applicationContext-service.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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
  <!-- 包扫描 -->
  <context:component-scan base-package="com.itbaizhan.service"></context:component-scan>


  <!-- 事务管理器 -->
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
  </bean>
  
  <!-- 通知 -->
  <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
      <tx:method name="*"/>
    </tx:attributes>
  </tx:advice>
  
  <!-- 切面 -->
  <aop:config>
    <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itbaizhan.service.*.*(..))"></aop:advisor>
  </aop:config>
</beans>

SSM整合_创建controller子工程

在父工程下使用maven创建web类型子工程

controller工程引入service子工程的依赖,并配置ssm父工程

<parent>
  <artifactId>ssm_demo</artifactId>
  <groupId>com.itbaizhan</groupId>
  <version>1.0-SNAPSHOT</version>
</parent>


<dependencies>
  <dependency>
    <groupId>com.itbaizhan</groupId>
    <artifactId>ssm_service</artifactId>
    <version>1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

编写控制器类

@Controller
@RequestMapping("/student")
public class StudentController {
  @Autowired
  private StudentService studentService;


  @RequestMapping("/all")
  public String all(Model model){
    List<Student> allStudent = studentService.findAllStudent();
    model.addAttribute("students",allStudent);
    return "allStudent";
   }
  
  @RequestMapping("/add")
  public String add(Student student){
    studentService.addStudent(student);
    // 重定向到查询所有学生
    return "redirect:/student/all";
   }
}

编写SpringMVC配置文件springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    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.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">


  <!-- 扫描Controller包 -->
  <context:component-scan base-package="com.itbaizhan.controller"/>


  <!-- 配置视图解析器 -->
  <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"/>
    <property name="suffix" value=".jsp"/>
  </bean>
  <!-- 开启SpringMVC注解的支持 -->
  <mvc:annotation-driven/>
  <!-- 放行静态资源 -->
  <mvc:default-servlet-handler />
</beans>

编写Spring的总配置文件applicationContext.xml,该文件引入dao和service层的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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
  <import resource="applicationContext-dao.xml"></import>
  <import resource="applicationContext-service.xml"></import>


</beans>

在web.xml中配置Spring监听器,该监听器会监听服务器启动,并自动创建Spring的IOC容器

<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">


  <display-name>Archetype Created Web Application</display-name>


  <!-- 创建spring容器的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
</web-app>

在web.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>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>


<!--编码过滤器-->
<filter>
  <filter-name>encFilter</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>encFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

编写JSP页面allStudent.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>所有学生</title>
  </head>
  <body>
     <%-- 添加学生表单 --%>
    <form action="/student/add" method="post">
       姓名:<input name="name">
       性别:<input name="sex">
       地址:<input name="address">
      <input type="submit" value="提交">
    </form>
     <%-- 展示学生表格 --%>
    <table width="500" cellpadding="0" cellspacing="0" border="1" align="center">
      <tr>
        <th>id</th>
        <th>姓名</th>
        <th>性别</th>
        <th>地址</th>
      </tr>
      <c:forEach items="${students}" var="student">
        <tr>
          <td>${student.id}</td>
          <td>${student.name}</td>
          <td>${student.sex}</td>
          <td>${student.address}</td>
        </tr>
      </c:forEach>
    </table>
  </body>
</html>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值