Java -- SpringMVC学习笔记6、SSM整合开发

1、SSM整合开发

SSM 编程,即SpringMVC+Spring+MyBatis整合。就是将MyBatis整合入Spring。因为SpringMVC原本就是Spring的一部分,不用专门整合。

2、搭建SSM开发环境

1、添加依赖和插件:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- jsp 依赖 -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2.1-b03</version>
      <scope>provided</scope>
    </dependency>
    <!--springmvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- 事务的-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--aspectj 依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <!--mybatis 和 和 spring 整合的-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!--mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <!--mysql 驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
    <!--druid-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>
</dependencies>

<build>
    <resources>
        <resource>
        <directory>src/main/java</directory><!-- 所在的目录-->
        <includes><!-- 包括目录下的.properties,.xml 文件都会扫描到-->
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
        </resource>
    </resources>
<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>
</build>

2、配置web.xml:

<!--注册字符过滤器-->
    <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>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--注册监听器-->
    <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>
    
    <!--中央调度器-->
    <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:dispatcherServlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

3、创建实体类:

public class Student
{
    private int id;
    private String name;
    private int age;
    private String address;
    private String school;
    //getter setter toString...
}

4、Jdbc属性配置文件jdbc.properties

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:8080/StudentManage?characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=root

5、Spring配置文件applicationContext.xml

<context:component-scan base-package="com.rg.service"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--数据源-->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<!--创建SqlSessionFactory对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:mybatis.xml"/>
    <property name="dataSource" ref="myDataSource"/>
</bean>

<!--创建动态代理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.rg.dao"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

6、Springmvc配置文件

<!--声明扫描器-->
<context:component-scan base-package="com.rg.controllers"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/view"/>
    <property name="suffix" value=".jsp"/>
</bean>
<!--声明注解驱动-->
<mvc:annotation-driven/>

7、mybatis.xml

<configuration>
    <settings>
        <!--设置mybatis输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <typeAliases>
        <package name="com.rg.entity"/>
    </typeAliases>
    <!--SQL映射文件的位置-->
    <mappers>
        <package name="com.rg.dao"/>
    </mappers>
</configuration>

8、Dao接口

public interface StudentDao
{
    int insertStudent(Student student);

    int updateStudent(Student student);

    int deleteStudent(int id);

    Student selectStudent(int id);

    List<Student> selectStudentAll();
}

9、sql映射文件

<mapper namespace="com.rg.dao.StudentDao">
    <select id="selectStudent" resultType="Student" parameterType="int">
        select id,name,age,address,school from Student where id = #{id}
    </select>
    <select id="selectStudentAll" resultType="Student">
        select id,name,age,address,school from Student
    </select>

    <insert id="insertStudent" parameterType="Student">
        insert into Student(name,age,address,school) values(#{name},#{age},#{address},#{school})
    </insert>
    <update id="updateStudent" parameterType="Student">
        update Student set name = #{name},age = #{age},address=#{address},school=#{school} where id=#{id}
    </update>
    <delete id="deleteStudent" parameterType="int">
        delete from Student where id=#{id}
    </delete>
</mapper>

10、Service接口

public interface StudentService
{
    int addStu(Student student);

    int modifyStu(Student student);

    int removeStu(int id);

    Student findStuById(int id);

    List<Student> findStuAll();
}

11、Service接口实现类

@Service
public class StudentServiceImpl implements StudentService
{
    @Resource
    private StudentDao studentDao;

    @Override
    public int addStu(Student student)
    {
        return studentDao.insertStudent(student);
    }

    @Override
    public int modifyStu(Student student)
    {
        return studentDao.updateStudent(student);
    }

    @Override
    public int removeStu(int id)
    {
        return studentDao.deleteStudent(id);
    }

    @Override
    public Student findStuById(int id)
    {
        return studentDao.selectStudent(id);
    }

    @Override
    public List<Student> findStuAll()
    {
        return studentDao.selectStudentAll();
    }
}

12、处理器定义

@Controller
public class StudentController
{
    @Resource
    private StudentService studentService;

    @RequestMapping(value = "/selectStudents.do", method = RequestMethod.POST)
    @ResponseBody
    public List<Student> initStudentList()
    {
        List<Student> students = studentService.findStuAll();

        return students;
    }

    @RequestMapping(value = "/addStu.do", method = RequestMethod.POST)
    public ModelAndView addStu(Student student)
    {
        int result = studentService.addStu(student);
        ModelAndView mv = new ModelAndView();

        if (result > 0)
        {
            mv.setViewName("redirect:index.jsp");
        }
        return mv;
    }
}

13、定义视图-首页文件 --- index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" +
            request.getServerName() + ":" + request.getServerPort() +
            request.getContextPath() + "/";
%>
<html>
<head>
    <base href="<%=basePath%>">
    <title>Title</title>
    <script src="js/jquery-3.4.1.min.js"></script>
    <script>
        $(document).ready(function () {
            $.ajax({
                url: "selectStudents.do",
                type: "post",
                dataType: "json",
                success: function (data) {
                    $("#stuList").html("");
                    $.each(data, function (i, n) {
                        $("#stuList").append("<tr>")
                            .append("<td>" + n.name + "</td>")
                            .append("<td>" + n.age + "</td>")
                            .append("<td>" + n.address + "</td>")
                            .append("<td>" + n.school + "</td>")
                            .append("</tr>")
                    })
                }
            })
        })
    </script>
</head>
<body>
<table>
    <thead>
    <tr>
        <th>姓名</th>
        <th>年龄</th>
        <th>地址</th>
        <th>学校</th>
    </tr>
    </thead>
    <tbody id="stuList">

    </tbody>
</table>
</body>
</html>

14、添加页面

<form method="post" action="addStu.do">
    UserName:<input type="text" name="name">
    Age:<input type="text" name="age">
    AddRess:<input type="text" name="address">
    School:<input type="text" name="school">
    <input type="submit" value="提交">
</form>

最后、base标签是否需要用根据情况。

原文地址:https://www.cnblogs.com/dcy521/p/14800063.html