前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初级SSM框架整合

初级SSM框架整合

作者头像
全栈程序员站长
发布2022-08-31 11:06:23
2.1K0
发布2022-08-31 11:06:23
举报

大家好,又见面了,我是你们的朋友全栈君。

本次ssm整合是对于初学者来说的第一次整合,里面还有很多地方可以进行优化,这点以后有空再分享。主要是体现整合的思路和过程。

1、准备数据

代码语言:javascript
复制
/*创建用户表*/
CREATE TABLE `user`(
	id BIGINT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(50),
	password VARCHAR(50),
	email VARCHAR(50),
	phoneNum VARCHAR(20)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

/*初始化用户数据*/
insert into `user`(username,password,email,phoneNum) 
values('xiaom','123456','xiaom@qq.com','020-8888888');
insert into `user`(username,password,email,phoneNum) 
values('zhangs','123456','zhangs@qq.com','020-8888888');

[外链图片转存失败(img-lUUAIR4Q-1567593872014)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567574368565.png)]

2、创建项目结构

[外链图片转存失败(img-4p2pH1Dm-1567593872015)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567574585963.png)]

2.1 创建实体类

代码语言:javascript
复制
package com.itheima.pojo;

public class User { 
   
    private Integer id;//用户id
    private String username;// 用户名称
    private String password;// 用户密码
    private String email;// 用户邮箱
    private String phoneNum;// 用户联系电话

    public Integer getId() { 
   
        return id;
    }

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

    public String getUsername() { 
   
        return username;
    }

    public void setUsername(String username) { 
   
        this.username = username;
    }

    public String getPassword() { 
   
        return password;
    }

    public void setPassword(String password) { 
   
        this.password = password;
    }

    public String getEmail() { 
   
        return email;
    }

    public void setEmail(String email) { 
   
        this.email = email;
    }

    public String getPhoneNum() { 
   
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) { 
   
        this.phoneNum = phoneNum;
    }

    public String toString() { 
   
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", phoneNum='" + phoneNum + '\'' +
                '}';
    }
}

2.2 创建持久层接口

代码语言:javascript
复制
package com.itheima.dao;

import com.itheima.pojo.User;
import java.util.List;

public interface UserDao { 
   
    /** * 查找全部用户 */
    List<Usre> findAllUser();
}

2.3 持久层实现类

代码语言:javascript
复制
package com.itheima.dao;

import com.itheima.pojo.User;

import java.util.List;

public class UserDaoImpl implements UserDao{ 
   

    /** * 查找所有用户 */
    @Override
    public List<User> findAllUser() { 
   
        System.out.println("查找所有人");//测试用
        return null;
    }
}

2.4 业务层接口

代码语言:javascript
复制
package com.itheima.service;

import com.itheima.pojo.User;

import java.util.List;

public interface UserService { 
   
    /** * 查找所有用户 */
    List<User> findAllUser();
}

2.5业务层实现类

代码语言:javascript
复制
package com.itheima.service;

import com.itheima.pojo.User;

import java.util.List;

public class UserServiceImpl implements UserService { 
   
    
    private UserDao userDao;
    
    /** * 查找所有用户 */
    @Override
    public List<User> findAllUser() { 
   
   
        return userDao.findAllUser();
    }
}

3、确保spring能够单独运行

3.1配置pom文件

代码语言:javascript
复制
<?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.itheima</groupId>  
  <artifactId>spring_zhenghe</artifactId>  
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <!--spring 版本-->
    <spring.version>5.0.2.RELEASE</spring.version>

  </properties>

  
  <dependencies>
    <!--spring ioc依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
  </dependencies>
</project>

3.2为持久层实现类配置注解

代码语言:javascript
复制
package com.itheima.dao;

import com.itheima.pojo.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("userDao")
public class UserDaoImpl implements UserDao{ 
   

    /** * 查找所有用户 */
    @Override
    public List<User> findAllUser() { 
   
        System.out.println("查找所有人");
        return null;
    }
}

3.3为业务层实现类添加注解

代码语言:javascript
复制
package com.itheima.service;

import com.itheima.dao.UserDao;
import com.itheima.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService { 
   

    @Autowired
    private UserDao userDao;

    /** * 查找所有用户 */
    @Override
    public List<User> findAllUser() { 
   

        return userDao.findAllUser();
    }
}

3.4编写bean.xml

代码语言:javascript
复制
<?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">

    <!--配置包扫描dao/service,说明: 第一步:导入context名称空间和约束 第二步:通过<context:component-scan/>标签配置,spring框架在 创建ioc容器的时候,会扫描指定的包和它的子包 -->
    <context:component-scan base-package="com.itheima"></context:component-scan>

</beans>

3.5编写测试类

代码语言:javascript
复制
package com.itheima;

import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class TestSpring { 
   

    @Test
    public void testspring(){ 
   

        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:bean.xml");
        UserService service = (UserService) ac.getBean("userService");
       service.findAllUser();
    }
}

测试结果正确

[外链图片转存失败(img-4B1xV6sH-1567593872016)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567584034103.png)]

4、确保Springmvc能够运行

4.1配置pom

代码语言:javascript
复制
<?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.itheima</groupId>  
  <artifactId>spring_zhenghe</artifactId>  
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <!--spring 版本-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!-- jstl标签版本 -->
    <jstl.version>1.2</jstl.version>
    <!--servlet版本-->
    <servlet.version>2.5</servlet.version>
    <!--jsp版本-->
    <jsp.version>2.0</jsp.version>
  </properties>


  <dependencies>
    <!--spring ioc依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!--junit4-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

    <!-- spring webmvc依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- jstl标签依赖 -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <!--servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <!--jsp依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>${jsp.version}</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <!--配置插件-->
    <plugins>
      <!--maven tomcat插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <!-- tomcat 的端口号 -->
          <port>8080</port>
          <!-- 访问应用的路径 -->
          <path>/ssm</path>
          <!-- URL按UTF-8进行编码,解决中文参数乱码 -->
          <uriEncoding>UTF-8</uriEncoding>
          <!-- tomcat名称 -->
          <server>tomcat7</server>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

4.2编写配置文件springmvc.xml

代码语言:javascript
复制
<?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.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--配置扫描controller-->
    <context:component-scan base-package="com.itheima.ssm.controller"/>

    <!--注解驱动方式配置处理器映射器和处理器适配器-->
    <mvc:annotation-driven/>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置视图的公共目录路径-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--配置视图的扩展名称-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

4.3 配置web.xml

代码语言:javascript
复制
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <display-name>ssm</display-name>

  <!-- 配置字符集编码过滤器 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <!-- 指定使用的编码:UTF-8 -->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <!-- 配置所有请求都经过字符集编码过滤器处理 -->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--配置前端控制器:DispatcherServlet-->
  <servlet>
    <servlet-name>ssm</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--加载springmvc主配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>

    <!--配置什么时候加载前端控制器,说明: 1.配置大于等于0的整数,表示在web容器启动的时候加载 2.配置小于0的整数,表示在第一次请求到达的时候加载 -->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>ssm</servlet-name>
    <!--配置拦截的url规则,说明: 1.*.do,表示以.do结尾的请求进入前端控制器 2./,表示所有请求都进入前端控制器 -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

</web-app>

4.4编写首页显示代码

代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>用户列表jsp页面</title>
    <style>
        table {border:1px solid #000000}
        table th{border:1px solid #000000}
        table td{border:1px solid #000000}
    </style>

    <script>

        // 添加用户
        function add(id) {
            window.location.href="${pageContext.request.contextPath}/add.do";
        }

        // 修改用户
        function get(id) {
            window.location.href="${pageContext.request.contextPath}/get.do?id="+id;
        }
        // 删除用户
        function  removeUser(id) {
            if(confirm("确定要删除吗?")){
                window.location.href="${pageContext.request.contextPath}/remove.do?id="+id;
            }
        }
    </script>
</head>
<body>
用户列表:<button type="button"  οnclick="add()">添加用户</button>
<table cellpadding="0" cellspacing="0" width="80%">
    <tr>
        <th>用户Id</th>
        <th>用户名称</th>
        <th>邮箱</th>
        <th>联系电话</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.username}</td>
            <td>${user.email}</td>
            <td>${user.phoneNum}</td>
            <td>
                <button type="button"  οnclick="get('${user.id}')">修改</button>
                <button type="button"  οnclick="removeUser('${user.id}')">删除</button>
            </td>
        </tr>
    </c:forEach>
</table>
</body>

</html>

4.5 编写Controller测试类

代码语言:javascript
复制
package com.itheima.controller;

import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.List;

@Controller
public class UserController { 
   

    @RequestMapping("/list.do")
   public String findAllUser(Model model){ 
   

        List<User> users = new ArrayList<>();

        //测试需要,把用户写死

        User user = new User();
        user.setId(1);
        user.setUsername("张三");
        user.setPassword("123");
        user.setEmail("xiaom@qq.com");
        user.setPhoneNum("020-8888888");

        users.add(user);

        model.addAttribute("users",users);

        return "list";

   }


}

测试结果正确:

[外链图片转存失败(img-Y2ZgzFNL-1567593872018)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567585004999.png)]

5、整合Spring框架和SpringMvc框架

5.1web.xml配置监听器

代码语言:javascript
复制
 <!--指定spring配置文件位置-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext.xml</param-value>
  </context-param>

  <!--配置ContextLoaderListener监听器,说明: 1.ContextLoaderListener监听器,监听ServletContext对象的创建。一旦ServletContext对象创建, 它立即帮助我们创建spring容器,并且放入ServletContext域中。 2.该监听器,默认只能加载WEB-INF目录下,名称为applicationContext.xml的配置文件 3.通过context-param标签,配置指定spring的配置文件位置,改变默认行为。 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

6、确保Mybatis框架能够运行

6.1配置pom

代码语言:javascript
复制
<?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.itheima</groupId>  
  <artifactId>spring_zhenghe</artifactId>  
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <!--spring 版本-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!-- jstl标签版本 -->
    <jstl.version>1.2</jstl.version>
    <!--servlet版本-->
    <servlet.version>2.5</servlet.version>
    <!--jsp版本-->
    <jsp.version>2.0</jsp.version>
    <!-- slf4j日志版本 -->
    <slf4j.version>1.7.7</slf4j.version>
    <!-- mybatis版本 -->
    <mybatis.version>3.4.5</mybatis.version>
    <!--mysql驱动版本-->
    <mysql.version>5.1.30</mysql.version>
  </properties>


  <dependencies>
    <!--spring ioc依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!--junit4-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

    <!-- spring webmvc依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- jstl标签依赖 -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <!--servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <!--jsp依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>${jsp.version}</version>
      <scope>provided</scope>
    </dependency>
    <!-- mybatis依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!-- mysql驱动依赖 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <!-- slf4j依赖 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>


  </dependencies>

  <build>
    <!--配置插件-->
    <plugins>
      <!--maven tomcat插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <!-- tomcat 的端口号 -->
          <port>8080</port>
          <!-- 访问应用的路径 -->
          <path>/ssm</path>
          <!-- URL按UTF-8进行编码,解决中文参数乱码 -->
          <uriEncoding>UTF-8</uriEncoding>
          <!-- tomcat名称 -->
          <server>tomcat7</server>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

6.2 编写Mabaties核心配置文件sqlMapConfig.xml

代码语言:javascript
复制
<?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>


    <!-- 配置别名 -->
    <typeAliases>
        <!-- 包扫描的方式,配置自定义别名-->
        <package name="com.itheima.pojo"/>
    </typeAliases>

    <!-- 一个核心配置文件,可以配置多个运行环境,default默认使用哪个运行环境 -->
    <environments default="default">
        <!-- 其中的一个运行环境,通过id来进行标识-->
        <environment id="default">
            <!-- 事务管理器type的取值: 1. JDBC:由JDBC进行事务的管理 2. MANAGED:事务由容器来管理,后期学习Spring框架的时候,所有的事务由容器管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源: 1. POOLED:使用mybatis创建的连接池 2. UNPOOLED:不使用连接池,每次自己创建连接 3. JNDI:由服务器提供连接池的资源,我们通过JNDI指定的名字去访问服务器中资源。 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
                <property name="username" value="root"/>
                <property name="password" value="zhc1024"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器-->
    <mappers>
        <!--指定外面的实体类映射文件,注:不是点号-->
        <package name="com.itheima.dao"/>
    </mappers>
</configuration>

6.3 编写log4j日志文件

代码语言:javascript
复制
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6.4 编写配置持久层文件编写SQL语句

注:该文件要写在resource文件夹下,并且包名要和UserDao一致

代码语言:javascript
复制
<?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.itheima.dao.UserDao">

    <!--1.查询全部用户列表-->
    <select id="findAllUser" resultType="user">
        select * from `user`
    </select>
</mapper>

6.5 编写测试类

代码语言:javascript
复制
package com.itheima;

import com.itheima.dao.UserDao;
import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMybatis { 
   

    @Test
    public void testMybatis(){ 
   
        InputStream is = null;
        SqlSession sqlSession = null;
        try { 
   
            is = Resources.getResourceAsStream("sqlMapConfig.xml");
            SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
            SqlSessionFactory build = sfb.build(is);
            sqlSession = build.openSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            List<User> users = mapper.findAllUser();
            System.out.println(users);
        } catch (IOException e) { 
   

        }finally { 
   
           if(sqlSession != null) sqlSession.close();

        }

    }
}

测试结果正确:

[外链图片转存失败(img-qohhhR6u-1567593872020)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567586906811.png)]

7、整合spring框架和mybatis框架

7.1 配置pom

代码语言:javascript
复制
<?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.itheima</groupId>  
  <artifactId>spring_zhenghe</artifactId>  
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <!--spring 版本-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!-- jstl标签版本 -->
    <jstl.version>1.2</jstl.version>
    <!--servlet版本-->
    <servlet.version>2.5</servlet.version>
    <!--jsp版本-->
    <jsp.version>2.0</jsp.version>
    <!-- slf4j日志版本 -->
    <slf4j.version>1.7.7</slf4j.version>
    <!-- mybatis版本 -->
    <mybatis.version>3.4.5</mybatis.version>
    <!--mysql驱动版本-->
    <mysql.version>5.1.30</mysql.version>
      <!-- mybatis-spring整合包版本 -->
      <mybatis.spring.version>1.3.1</mybatis.spring.version>
      <!--druid版本-->
      <druid.version>1.0.29</druid.version>
      <!-- aspectj版本号 -->
      <aspectj.version>1.6.12</aspectj.version>
  </properties>


  <dependencies>
    <!--spring ioc依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!--junit4-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

    <!-- spring webmvc依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- jstl标签依赖 -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <!--servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <!--jsp依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>${jsp.version}</version>
      <scope>provided</scope>
    </dependency>
    <!-- mybatis依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!-- mysql驱动依赖 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <!-- slf4j依赖 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

      <!--spring jdbc依赖-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <!--aspectj依赖-->
      <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.6.12</version>
      </dependency>

      <!-- mybatis-spring依赖 -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>${mybatis.spring.version}</version>
      </dependency>
      <!--druid依赖-->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>${druid.version}</version>
      </dependency>
  </dependencies>

  <build>
    <!--配置插件-->
    <plugins>
      <!--maven tomcat插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <!-- tomcat 的端口号 -->
          <port>8080</port>
          <!-- 访问应用的路径 -->
          <path>/ssm</path>
          <!-- URL按UTF-8进行编码,解决中文参数乱码 -->
          <uriEncoding>UTF-8</uriEncoding>
          <!-- tomcat名称 -->
          <server>tomcat7</server>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

7.2 编写applicationContext-dao.xml文件

编写db.properties配置文件

代码语言:javascript
复制
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/spring?characterEncoding=utf-8
db.username=root
db.password=zhc1024
代码语言:javascript
复制
<?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">

    <!--加载db.properties-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--配置数据源对象-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!--连接数据库的四个基本要素-->
        <property name="driverClassName" value="${db.driver}"/>
        <property name="url" value="${db.url}"/>
        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
    </bean>

    <!--配置SqlSessionFactory对象,说明: 1.让spring框架接管SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源对象-->
        <property name="dataSource" ref="dataSource"/>
        <!--定义别名-->
        <property name="typeAliasesPackage" value="com.itheima.pojo"></property>
    </bean>

    <!--配置自动扫描mapper映射文件-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定要扫描的包,说明: 1.如果有多个包要扫描。看是否在同一个父包 2.在同一个父包,配置父包即可 3.不在同一个父包,以半角逗号分割 -->
        <property name="basePackage" value="com.itheima.dao"/>
    </bean>
</beans>

7.3编写applicationContext-service.xml文件

代码语言:javascript
复制
<?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">

    <!--配置扫描service-->
    <context:component-scan base-package="com.itheima.service"/>

</beans>

7.3编写applicationContext-trans.xml文件

代码语言:javascript
复制
<?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: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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源对象-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置aop-->
    <aop:config>
        <!--配置切入点表达式-->
        <aop:pointcut id="pt1" expression="execution(* com.itheima.service..*.*(..))"/>
        <!--建立通知与切入点表达式关系-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
    </aop:config>

    <!--配置通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!--配置事务属性-->
        <tx:attributes>
            <!--配置增、删、改事务规则-->
            <tx:method name="insert*" propagation="REQUIRED" read-only="false"/>
            <tx:method name="update*" propagation="REQUIRED" read-only="false"/>
            <tx:method name="del*" propagation="REQUIRED" read-only="false"/>

            <!--配置查询事务规则-->
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>
</beans>

7.4编写applicationContext.xml

代码语言:javascript
复制
<?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="classpath:applicationContext-dao.xml"/>
    <import resource="classpath:applicationContext-service.xml"/>
    <import resource="classpath:applicationContext-trans.xml"/>

</beans>

7.8改造UserController

代码语言:javascript
复制
package com.itheima.controller;

import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.List;

@Controller
public class UserController { 
   

    @Autowired
    private UserService userService;

    @RequestMapping("/list.do")
   public String findAllUser(Model model){ 
   

       /* List<User> users = new ArrayList<>(); //测试需要,把用户写死 User user = new User(); user.setId(1); user.setUsername("张三"); user.setPassword("123"); user.setEmail("xiaom@qq.com"); user.setPhoneNum("020-8888888"); users.add(user); model.addAttribute("users",users); return "list";*/

        List<User> users = userService.findAllUser();

        model.addAttribute("users",users);

        return "list";
    }
}

运行成功:

[外链图片转存失败(img-cIlX8tfm-1567593872023)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567588222762.png)]

8.附上全部代码

项目结构:

[外链图片转存失败(img-NCk320Gv-1567593872026)(C:\Users\宏昌\AppData\Roaming\Typora\typora-user-images\1567592095218.png)]

8.1 持久层

代码语言:javascript
复制
package com.itheima.dao;

import com.itheima.pojo.User;

import java.util.List;

public interface UserDao { 
   
    /** * 查找所有用户 */
    List<User> findAllUser();
    /** * 新增用户 */
    void insertUser(User user);

    /** * 修改状态回显 */
    User findUserById(int id);

    /** * 修改用户 */
    void updateUser(User user);

    /** * 删除用户 */
    void deleteUser(int id);
}

8.2 实体类

代码语言:javascript
复制
package com.itheima.pojo;

public class User { 
   
    private Integer id;//用户id
    private String username;// 用户名称
    private String password;// 用户密码
    private String email;// 用户邮箱
    private String phoneNum;// 用户联系电话

    public Integer getId() { 
   
        return id;
    }

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

    public String getUsername() { 
   
        return username;
    }

    public void setUsername(String username) { 
   
        this.username = username;
    }

    public String getPassword() { 
   
        return password;
    }

    public void setPassword(String password) { 
   
        this.password = password;
    }

    public String getEmail() { 
   
        return email;
    }

    public void setEmail(String email) { 
   
        this.email = email;
    }

    public String getPhoneNum() { 
   
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) { 
   
        this.phoneNum = phoneNum;
    }

    public String toString() { 
   
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", phoneNum='" + phoneNum + '\'' +
                '}';
    }
}

8.3 业务层

代码语言:javascript
复制
package com.itheima.service;

import com.itheima.pojo.User;

import java.util.List;

public interface UserService { 
   
    /** 查找全部用户 */
    List<User> findAllUser();

    /** * 新增用户 */
    void insertUser(User user);

    /** * 修改状态回显 */
    User findUserById(int id);

    /** * 修改用户 */
    void updateUser(User user);

    /** * 删除用户 */
    void deleteUser(int id);
}

8.4 业务层实现类

代码语言:javascript
复制
package com.itheima.service;

import com.itheima.dao.UserDao;
import com.itheima.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService { 
   

    @Autowired
    private UserDao userDao;

    @Override
    public List<User> findAllUser() { 
   
        return userDao.findAllUser();
    }

    @Override
    public void insertUser(User user) { 
   
        userDao.insertUser(user);
    }

    @Override
    public User findUserById(int id) { 
   
        return userDao.findUserById(id);
    }

    @Override
    public void updateUser(User user) { 
   
        userDao.updateUser(user);
    }

    @Override
    public void deleteUser(int id) { 
   
        userDao.deleteUser(id);
    }
}

8.5 控制层

代码语言:javascript
复制
package com.itheima.controller;

import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
public class UserController { 
   


    @Autowired
    private UserService userService;

    /** * 显示用户 */
    @RequestMapping("list")
    public String showAllUser(Model model){ 
   

        List<User> users = userService.findAllUser();

        model.addAttribute("users",users);

        return "list";
    }
//===========================新增=======================================
    /** * 跳转新增用户 */
    @RequestMapping("add")
    public String add(){ 
   
        return "add";
    }

    /** * 新增 */

    @RequestMapping("insert")
    public String insert(User user){ 
   

        userService.insertUser(user);

        return "redirect:list";
    }
    //========================修改===================================
    //状态回显
    @RequestMapping("get")
    public String getUser(Model model,Integer id){ 
   
        User user = userService.findUserById(id);

        model.addAttribute("user",user);

        return "edit";
    }
    @RequestMapping("edit")
    public String update(User user){ 
   

        userService.updateUser(user);

        return "redirect:list";
    }

    //====================删除=================================
    @RequestMapping("remove")
    public String delUser(Integer id){ 
   

        userService.deleteUser(id);

        return "redirect:list";
    }
}

8.6 显示用户表

代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>用户列表jsp页面</title>
    <style>
        table {border:1px solid #000000}
        table th{border:1px solid #000000}
        table td{border:1px solid #000000}
    </style>

    <script>

        // 添加用户
        function add(id) {
            window.location.href="${pageContext.request.contextPath}/add.do";
        }

        // 修改用户
        function get(id) {
            window.location.href="${pageContext.request.contextPath}/get.do?id="+id;
        }
        // 删除用户
        function  removeUser(id) {
            if(confirm("确定要删除吗?")){
                window.location.href="${pageContext.request.contextPath}/remove.do?id="+id;
            }
        }
    </script>
</head>
<body>
    用户列表:<button type="button"  οnclick="add()">添加用户</button>
    <table cellpadding="0" cellspacing="0" width="80%">
        <tr>
            <th>用户Id</th>
            <th>用户名称</th>
            <th>邮箱</th>
            <th>联系电话</th>
            <th>操作</th>
        </tr>
        <c:forEach items="${users}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.username}</td>
                <td>${user.email}</td>
                <td>${user.phoneNum}</td>
                <td>
                    <button type="button"  οnclick="get('${user.id}')">修改</button>
                    <button type="button"  οnclick="removeUser('${user.id}')">删除</button>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>

</html>

8.7 编辑用户表

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>修改用户信息</title>
    <style>
        table {border:1px solid #000000}
        table th{border:1px solid #000000}
        table td{border:1px solid #000000}
    </style>
</head>
<body>
<form id="userForm"
      action="${pageContext.request.contextPath }/edit.do"  method="post">
    修改用户信息:
    <table cellpadding="0" cellspacing="0" width="80%">
        <input type="hidden" name="id" value="${user.id}"/>
        <tr>
            <td>用户名称</td>
            <td><input type="text" name="username" value="${user.username}" /></td>
        </tr>
        <tr>
            <td>邮箱</td>
            <td><input type="text" name="email" value="${user.email}" /></td>
        </tr>
        <tr>
            <td>联系电话</td>
            <td><input type="text" name="phoneNum" value="${user.phoneNum}" /></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="修改" />
            </td>
        </tr>
    </table>

</form>
</body>

</html>

8.8 新增用户表

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>添加用户信息</title>
    <style>
        table {border:1px solid #000000}
        table th{border:1px solid #000000}
        table td{border:1px solid #000000}
    </style>
</head>
<body>
<form id="userForm"
      action="${pageContext.request.contextPath }/insert.do"  method="post">
    添加用户信息:
    <table cellpadding="0" cellspacing="0" width="80%">

        <tr>
            <td>用户名称</td>
            <td><input type="text" name="username" value="" /></td>
        </tr>
        <tr>
            <td>用户密码</td>
            <td><input type="password" name="password" value="" /></td>
        </tr>
        <tr>
            <td>邮箱</td>
            <td><input type="text" name="email" value="" /></td>
        </tr>
        <tr>
            <td>联系电话</td>
            <td><input type="text" name="phoneNum" value="" /></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="添加" />
            </td>
        </tr>
    </table>

</form>
</body>

</html>

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143459.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、准备数据
  • 2、创建项目结构
    • 2.1 创建实体类
      • 2.2 创建持久层接口
        • 2.3 持久层实现类
          • 2.4 业务层接口
            • 2.5业务层实现类
            • 3、确保spring能够单独运行
              • 3.1配置pom文件
                • 3.2为持久层实现类配置注解
                  • 3.3为业务层实现类添加注解
                    • 3.4编写bean.xml
                      • 3.5编写测试类
                      • 4、确保Springmvc能够运行
                        • 4.1配置pom
                          • 4.2编写配置文件springmvc.xml
                            • 4.3 配置web.xml
                              • 4.4编写首页显示代码
                                • 4.5 编写Controller测试类
                                • 5、整合Spring框架和SpringMvc框架
                                  • 5.1web.xml配置监听器
                                  • 6、确保Mybatis框架能够运行
                                    • 6.1配置pom
                                      • 6.2 编写Mabaties核心配置文件sqlMapConfig.xml
                                        • 6.3 编写log4j日志文件
                                          • 6.4 编写配置持久层文件编写SQL语句
                                            • 6.5 编写测试类
                                            • 7、整合spring框架和mybatis框架
                                              • 7.1 配置pom
                                                • 7.2 编写applicationContext-dao.xml文件
                                                  • 7.3编写applicationContext-service.xml文件
                                                    • 7.3编写applicationContext-trans.xml文件
                                                      • 7.4编写applicationContext.xml
                                                        • 7.8改造UserController
                                                        • 8.附上全部代码
                                                          • 8.1 持久层
                                                            • 8.2 实体类
                                                              • 8.3 业务层
                                                                • 8.4 业务层实现类
                                                                  • 8.5 控制层
                                                                    • 8.6 显示用户表
                                                                      • 8.7 编辑用户表
                                                                        • 8.8 新增用户表
                                                                        相关产品与服务
                                                                        容器服务
                                                                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                                                        领券
                                                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档