SSM整合小项目

目录

案例:实现查询所有学生和添加学生

SSM整合

创建父工程

创建dao子工程

创建service子工程

创建controller子工程


文章末尾可提取项目源代码

案例:实现查询所有学生和添加学生

SSM整合

案例需要使用以下技术:

  • 使用Maven创建聚合工程,并使用Maven的tomcat插件运行工程
  • 使用Spring的IOC容器管理对象
  • 使用MyBatis操作数据库
  • 使用Spring的声明式事务进行事务管理
  • 使用SpringMVC作为控制器封装Model并跳转到JSP页面展示数据
  • 使用Junit测试方法
  • 使用Log4j在控制台打印日志Sy

案例的编写流程如下:

  1. 创建maven父工程,添加需要的依赖和插件
  2. 创建dao子工程,配置MyBatis操作数据库,配置Log4j在控制台打印日志。
  3. 创建service子工程,配置Spring声明式事务
  4. 创建controller子工程,配置SpringMVC作为控制器,编写JSP页面展示数据。
  5. 每个子工程都使用Spring进行IOC管理

创建父工程

创建maven父工程,添加需要的依赖和插件

<properties>
  <!--Spring版本-->
  <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.26</version>
  </dependency>
  <!--  druid连接池  -->
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
  </dependency>
  <!-- MyBatis与Spring的整合包-->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</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.8.7</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>

创建dao子工程

1、编写实体类和持久层接口

2、编写MyBatis核心配置文件

3、编写Spring核心配置文件,配置数据源、SqlSessionFactoryBean、扫描包对象

4、测试

编写实体类

package com.itbaizhan.pojo;

public class Student {
    private Integer id;
    private String name;
    private String sex;
    private String address;

    public Student(Integer id, String name, String sex, String address) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.address = address;
    }



    public Student() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

编写持久层接口

package com.itbaizhan.dao;

import com.itbaizhan.pojo.Student;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@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("classpath:application-dao.xml")
public class TestStudentDao {

    @Autowired
    private StudentDao studentDao;

    @Test
    public void t1(){
        List<Student> all = studentDao.findAll();
        all.forEach(System.out::println);
    }

    @Test
    public void t2(){
        studentDao.add(new Student("一拳超人","男","网络"));
    }
}

运行t1,查询所有学生(t2已经运行过了,所以查询时有了)

创建service子工程

1、编写服务层方法

2、创建spring核心配置文件,配置事务

 编写服务层方法

@Service
public class StudentService {

    @Autowired
    private StudentDao studentDao;


    //查询所有学生
    public List<Student> findAllStudent(){
        return studentDao.findAll();
    }

    //添加学生
    public void addStudent(Student student){
        studentDao.add(student);
    }
}

创建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: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"></context:component-scan>

    <!--  事务管理器  -->
    <bean id="transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--  通知  -->
    <tx:advice id="txAdvice" transaction-manager="transaction">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>

    <!--  切面  -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itbaizhan.service.*.*(..))"
    </aop:config>
</beans>

创建controller子工程

1、编写控制器

2、编写springmvc核心配置文件,配置视图解析器

3、编写web.xml文件,配置前端控制器、字符编码过滤器

4、编写jsp文件

编写控制器


@Controller
public class StudentController {

    @Autowired
    private StudentService studentService;

    //查询所有学生
    @RequestMapping("/allStudent")
    public String allStudent(HttpServletRequest req){
        req.setAttribute("students",studentService.findAllStudent());
        return "student";
    }

    //新增学生
    @RequestMapping("/addStudent")
    public String addStudent(Student student){
        studentService.addStudent(student);
        return "redirect:/allStudent";
    }
}

 编写springmvc核心配置文件,配置视图解析器

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


    <!-- 配置视图解析器 -->
    <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>

编写web.xml文件,配置前端控制器,编码过滤器

在传递参数时,tomcat8以上能处理get请求的中文乱码,但不能处理post请求的中文乱码

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

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



  <!--编码过滤器-->
  <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>

  <!-- 创建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>


  <!--前端控制器-->
  <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>


</web-app>

编写jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>学生</title>
</head>
<body>
    <form action="/addStudent" method="post">
        姓名:<input name="name">
        性别:<input name="sex">
        地址:<input name="address">
        <input type="submit" value="提交">
    </form>
    <br/>
    <table width="500" cellspacing="0" cellpadding="0" border="1" align="center">
        <tr>
            <th>id</th>
            <th>姓名</th>
            <th>性别</th>
            <th>地址</th>
        </tr>
        <c:forEach items="${requestScope.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>

 启动tomcat,运行父工程,访问allStudent方法路径

 测试添加Student

百度网盘链接:https://pan.baidu.com/s/1D1UZv1YoFMKqr7YY8TduTw?pwd=mp8f 
提取码:mp8f 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值