Spring+SpringMVC+JdbcTemplate+jsp实现简单的用户CRUD


1.创建数据库表

 

 

 

 

 

 


 2.创建maven工程

  • 修改pom.xml添加依赖和tomcat、jetty插件
  1 <?xml version="1.0" encoding="UTF-8"?>
  2 
  3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <groupId>com.ym</groupId>
  8     <artifactId>UserCRUDspring+springmvc+jdbctemplate</artifactId>
  9     <version>1.0-SNAPSHOT</version>
 10     <packaging>war</packaging>
 11 
 12     <name>UserCRUDspring+springmvc+jdbctemplate Maven Webapp</name>
 13     <!-- FIXME change it to the project's website -->
 14     <url>http://www.example.com</url>
 15 
 16     <properties>
 17         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 18         <maven.compiler.source>1.7</maven.compiler.source>
 19         <maven.compiler.target>1.7</maven.compiler.target>
 20     </properties>
 21 
 22     <dependencies>
 23         <dependency>
 24             <groupId>junit</groupId>
 25             <artifactId>junit</artifactId>
 26             <version>4.11</version>
 27             <scope>test</scope>
 28         </dependency>
 29         <!-- spring依赖 -->
 30         <dependency>
 31             <groupId>org.springframework</groupId>
 32             <artifactId>spring-context</artifactId>
 33             <version>4.3.14.RELEASE</version>
 34         </dependency>
 35         <!-- springMVC依赖 -->
 36         <dependency>
 37             <groupId>org.springframework</groupId>
 38             <artifactId>spring-web</artifactId>
 39             <version>4.3.14.RELEASE</version>
 40         </dependency>
 41         <dependency>
 42             <groupId>org.springframework</groupId>
 43             <artifactId>spring-webmvc</artifactId>
 44             <version>4.3.14.RELEASE</version>
 45         </dependency>
 46         <!-- springaop依赖 -->
 47         <dependency>
 48             <groupId>org.springframework</groupId>
 49             <artifactId>spring-aop</artifactId>
 50             <version>4.3.14.RELEASE</version>
 51         </dependency>
 52         <dependency>
 53             <groupId>org.springframework</groupId>
 54             <artifactId>spring-tx</artifactId>
 55             <version>4.3.14.RELEASE</version>
 56         </dependency>
 57         <dependency>
 58             <groupId>org.springframework</groupId>
 59             <artifactId>spring-context-support</artifactId>
 60             <version>4.3.14.RELEASE</version>
 61         </dependency>
 62         <!-- springJdbcTemplate依赖 -->
 63         <dependency>
 64             <groupId>org.springframework</groupId>
 65             <artifactId>spring-jdbc</artifactId>
 66             <version>4.3.14.RELEASE</version>
 67         </dependency>
 68         <!-- 配置事务aspecj -->
 69         <dependency>
 70             <groupId>org.aspectj</groupId>
 71             <artifactId>aspectjrt</artifactId>
 72             <version>1.9.2</version>
 73         </dependency>
 74         <dependency>
 75             <groupId>org.aspectj</groupId>
 76             <artifactId>aspectjweaver</artifactId>
 77             <version>1.9.2</version>
 78         </dependency>
 79         <!-- 德鲁伊连接池 -->
 80         <dependency>
 81             <groupId>com.alibaba</groupId>
 82             <artifactId>druid</artifactId>
 83             <version>1.0.26</version>
 84         </dependency>
 85         <!-- lombok -->
 86         <dependency>
 87             <groupId>org.projectlombok</groupId>
 88             <artifactId>lombok</artifactId>
 89             <version>1.16.2</version>
 90         </dependency>
 91         <!-- servlet-api -->
 92         <dependency>
 93             <groupId>javax.servlet</groupId>
 94             <artifactId>javax.servlet-api</artifactId>
 95             <version>3.1.0</version>
 96             <scope>provided</scope>
 97         </dependency>
 98         <!-- jsp-api依赖 -->
 99         <dependency>
100             <groupId>javax.servlet.jsp</groupId>
101             <artifactId>jsp-api</artifactId>
102             <version>2.1</version>
103             <scope>provided</scope>
104         </dependency>
105         <!-- jstl依赖 -->
106         <dependency>
107             <groupId>javax.servlet</groupId>
108             <artifactId>jstl</artifactId>
109             <version>1.2</version>
110         </dependency>
111         <!-- mysql依赖 -->
112         <dependency>
113             <groupId>mysql</groupId>
114             <artifactId>mysql-connector-java</artifactId>
115             <version>5.1.38</version>
116         </dependency>
117     </dependencies>
118 
119     <build>
120         <finalName>UserCRUDspring+springmvc+jdbctemplate</finalName>
121         <plugins>
122             <plugin>
123                 <groupId>org.apache.maven.plugins</groupId>
124                 <artifactId>maven-compiler-plugin</artifactId>
125                 <version>3.1</version>
126                 <configuration>
127                     <source>1.7</source>
128                     <target>1.7</target>
129                     <encoding>UTF-8</encoding>
130                 </configuration>
131             </plugin>
132             <plugin>
133                 <groupId>org.eclipse.jetty</groupId>
134                 <artifactId>jetty-maven-plugin</artifactId>
135                 <version>9.4.7.v20170914</version>
136 
137                 <configuration>
138                     <webAppConfig>
139                         <contextPath>/</contextPath>
140                         <webInfIncludeJarPattern>.*/foo-[^/]*\.jar$|.*/classes/.*</webInfIncludeJarPattern>
141                     </webAppConfig>
142                 </configuration>
143             </plugin>
144             <plugin>
145                 <groupId>org.apache.tomcat.maven</groupId>
146                 <artifactId>tomcat7-maven-plugin</artifactId>
147                 <version>2.1</version>
148                 <configuration>
149                     <port>8080</port>
150                     <path>/</path>
151                     <uriEncoding>UTF-8</uriEncoding>
152                     <server>tomcat7</server>
153                 </configuration>
154             </plugin>
155         </plugins>
156     </build>
157 </project>
pom.xml配置文件

  完善项目结构


 3.实体类 pojo.User

 1 package com.yunhe.pojo;
 2 
 3 import lombok.*;
 4 
 5 import java.io.Serializable;
 6 
 7 /**
 8  * @Author 
 9  * @CreateTime 2020/8/18-15:38
10  * @Description 用户信息实体类
11  */
12 @Setter
13 @Getter
14 @AllArgsConstructor
15 @NoArgsConstructor
16 @ToString
17 public class User implements Serializable {
18     private Integer userId;
19     private String userName;
20     private String userPwd;
21     private Integer userAge;
22 
23     public User(String userName, String userPwd, Integer userAge) {
24         this.userName = userName;
25         this.userPwd = userPwd;
26         this.userAge = userAge;
27     }
28 }
User.java

 4.dao层接口及其实现类 UserDao UserDaoImpl

   简单的增删改查四个方法

public interface UserDao {
    /**
     * 增加用户
     *
     * @param user 用户信息
     * @return 结果
     */
    public int addUser(User user);

    /**
     * 删除用户
     *
     * @param userId 用删除用户的id
     * @return 结果
     */
    public int delUser(int userId);

    /**
     * 修改用户
     *
     * @param user 修改用户信息
     * @return 结果
     */
    public int changeUser(User user);

    /**
     * 查询所有学生
     *
     * @return 结果集
     */
    public List<User> getAllUser();
}
UserDao.java

   dao实现类使用JdbcTemplate技术

 1 package com.yunhe.dao.impl;
 2 
 3 import com.yunhe.dao.UserDao;
 4 import com.yunhe.pojo.User;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.jdbc.core.JdbcTemplate;
 7 import org.springframework.jdbc.core.RowMapper;
 8 import org.springframework.stereotype.Repository;
 9 
10 import java.sql.ResultSet;
11 import java.sql.SQLException;
12 import java.util.List;
13 
14 /**
15  * @Author 书洋
16  * @CreateTime 2020/8/18-15:59
17  * @Description
18  */
19 @Repository
20 public class UserDaoImpl implements UserDao {
21     //自动注入jdbcTemplate
22     @Autowired
23     private JdbcTemplate jdbcTemplate;
24 
25     /**
26      * 增加
27      * @param user 用户信息
28      * @return
29      */
30     @Override
31     public int addUser(User user) {
32         String sql = "INSERT INTO t_user (u_name,u_password,u_age) VALUES (?,?,?)";
33         return jdbcTemplate.update(sql, user.getUserName(), user.getUserPwd(), user.getUserAge());
34     }
35 
36     /**
37      * 根据id删除用户
38      * @param userId 用删除用户的id
39      * @return
40      */
41     @Override
42     public int delUser(int userId) {
43         String sql = "DELETE  FROM t_user WHERE u_id = ?";
44         return jdbcTemplate.update(sql, userId);
45     }
46 
47     /**
48      * 修改用户信息
49      * @param user 修改用户信息
50      * @return
51      */
52     @Override
53     public int changeUser(User user) {
54         String sql = "UPDATE t_user SET u_name = ?,u_password = ?,u_age = ? WHERE u_id = ?";
55         return jdbcTemplate.update(sql, user.getUserName(), user.getUserPwd(), user.getUserAge(), user.getUserId());
56     }
57 
58     /**
59      * 查询所有用户信息
60      * @return user集合
61      */
62     @Override
63     public List<User> getAllUser() {
64         String sql = "SELECT * FROM t_user";
65         return jdbcTemplate.query(sql, new UserRowMapper());
66     }
67 
68     //内部类 用来将查询的结果映射成User对象
69     class UserRowMapper implements RowMapper<User>{
70 
71         @Override
72         public User mapRow(ResultSet resultSet, int i) throws SQLException {
73             User user = new User(resultSet.getInt("u_id"),
74                     resultSet.getString("u_name"),
75                     resultSet.getString("u_password"),
76                     resultSet.getInt("u_age"));
77             return user;
78         }
79     }
80 }
UserDaoImpl

5.service层接口及其实现类 UserService UserserviceImpl

  服务类接口

public interface UserService {
    /**
     * 增加用户
     *
     * @param user 用户信息
     * @return 结果
     */
    public Boolean addUser(User user);

    /**
     * 删除用户
     *
     * @param userId 用删除用户的id
     * @return 结果
     */
    public Boolean delUser(int userId);

    /**
     * 修改用户
     *
     * @param user 修改用户信息
     * @return 结果
     */
    public Boolean changeUser(User user);

    /**
     * 查询所有学生
     *
     * @return 结果集
     */
    public List<User> getAllUser();
}
UserService.java

  接口实现类  简单的做一些逻辑处理

 1 package com.yunhe.service.impl;
 2 
 3 import com.yunhe.dao.UserDao;
 4 import com.yunhe.pojo.User;
 5 import com.yunhe.service.UserService;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.stereotype.Service;
 8 
 9 import java.util.List;
10 
11 /**
12  * @Author 书洋
13  * @CreateTime 2020/8/17-19:20
14  * @Description 服务类实现类
15  */
16 @Service
17 public class UserServiceImpl implements UserService {
18     //自动注入UserDao
19     @Autowired
20     private UserDao userDao;
21 
22     @Override
23     public Boolean addUser(User user) {
24         int result = userDao.addUser(user);
25         if (1 == result) {
26             return true;
27         }
28         return false;
29     }
30 
31     @Override
32     public Boolean delUser(int userId) {
33         int result = userDao.delUser(userId);
34         if (1 == result) {
35             return true;
36         }
37         return false;
38     }
39 
40     @Override
41     public Boolean changeUser(User user) {
42         int result = userDao.changeUser(user);
43         if (1 == result) {
44             return true;
45         }
46         return false;
47     }
48 
49     @Override
50     public List<User> getAllUser() {
51         return userDao.getAllUser();
52     }
53 }
UserServiceImpl.java

6.spring配置文件applicatonContext.xml

  • 开启注解扫描
  • 配置数据源 druid
  • 配置JdbcTemplate,注入数据源
  • 声明式事务
  • 配置事务管理器
  • aop配置  配置切入点、配置通知者。
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/aop
 9         http://www.springframework.org/schema/aop/spring-aop.xsd
10         http://www.springframework.org/schema/context
11         http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
12     <!-- 注解扫描 -->
13     <context:component-scan base-package="com.yunhe"/>
14     <!-- 配置数据源 -->
15     <bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource">
16         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
17         <property name="url" value="jdbc:mysql://localhost:3306/study"/>
18         <property name="username" value="root"/>
19         <property name="password" value="root"/>
20     </bean>
21     <!-- 配置jdbcTemplate 注入数据源 -->
22     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
23         <property name="dataSource" ref="dateSource"/>
24     </bean>
25     <!-- 声明式事务 -->
26     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
27         <!-- 注入数据源 -->
28         <property name="dataSource" ref="dateSource"/>
29     </bean>
30     <!-- 配置事务通知 -->
31     <tx:advice  id="txAdvice" transaction-manager="transactionManager">
32         <tx:attributes>
33             <tx:method name="add*" propagation="REQUIRED"/>
34             <tx:method name="change*" propagation="REQUIRED"/>
35             <tx:method name="del*" propagation="REQUIRED"/>
36             <tx:method name="*" propagation="SUPPORTS"/>
37         </tx:attributes>
38     </tx:advice>
39     <aop:config>
40         <!-- 配置切入点 -->
41         <aop:pointcut id="serviceMethod" expression="execution(* com.yunhe.service.*.*(..))"/>
42         <!-- 配置通知者 -->
43         <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
44     </aop:config>
45 </beans>
applicationContext.xml

7.springMVC配置

  • 配置web.xml 前端控制器、监听器(用于初始化springIOC容器)、过滤器(解决乱码问题)
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 4          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 5          version="3.0">
 6     <!-- 配置监听器 用于读取spring配置文件 -->
 7     <listener>
 8         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 9     </listener>
10     <context-param>
11         <param-name>contextConfigLocation</param-name>
12         <param-value>classpath:applicationContext.xml</param-value>
13     </context-param>
14     <!-- 配置前端控制器 -->
15     <servlet>
16         <servlet-name>springMvc</servlet-name>
17         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
18         <init-param>
19             <param-name>contextConfigLocation</param-name>
20             <param-value>classpath:springmvc.xml</param-value>
21         </init-param>
22     </servlet>
23     <servlet-mapping>
24         <servlet-name>springMvc</servlet-name>
25         <url-pattern>/</url-pattern>
26     </servlet-mapping>
27     <!-- 设置字符编码 -->
28     <filter>
29         <filter-name>encode</filter-name>
30         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
31         <init-param>
32             <param-name>encoding</param-name>
33             <param-value>UTF-8</param-value>
34         </init-param>
35     </filter>
36     <filter-mapping>
37         <filter-name>encode</filter-name>
38         <url-pattern>/*</url-pattern>
39     </filter-mapping>
40 </web-app>
web.xml
  • 配置springmvc.xml 开启注解扫描 配置视图解析器
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:mvc="http://www.springframework.org/schema/mvc"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7       http://www.springframework.org/schema/beans/spring-beans.xsd
 8       http://www.springframework.org/schema/mvc
 9       http://www.springframework.org/schema/mvc/spring-mvc.xsd
10       http://www.springframework.org/schema/context
11       http://www.springframework.org/schema/context/spring-context.xsd">
12     <!-- 注解扫描 -->
13     <context:component-scan base-package="com.yunhe.controller"/>
14     <mvc:annotation-driven/>
15     <!-- 视图解析器 -->
16     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
17         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
18         <property name="prefix" value="/WEB-INF/view/"/>
19         <property name="suffix" value=".jsp"/>
20     </bean>
21 </beans>
springmvc.xml 

8.controller层 UserController

 1 package com.yunhe.controller;
 2 
 3 import com.yunhe.pojo.User;
 4 import com.yunhe.service.UserService;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.ui.Model;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9 import org.springframework.web.bind.annotation.RequestMethod;
10 
11 import java.util.List;
12 
13 /**
14  * @Author 书洋
15  * @CreateTime 2020/8/18-18:36
16  * @Description 用户控制器
17  */
18 @Controller
19 @RequestMapping("/user")
20 public class UserController {
21     //注入userService
22     @Autowired
23     private UserService userService;
24 
25     /**
26      * 查看所有用户信息
27      *
28      * @param model model对象
29      * @return 地址
30      */
31     @RequestMapping("/list")
32     public String getAllUser(Model model) {
33         List<User> userList = userService.getAllUser();
34         if (null != userList) {
35             model.addAttribute("userList", userList);
36             return "showUser";
37         }
38         return "error";
39     }
40 
41     /**
42      * 添加用户
43      *
44      * @param user 要添加用户的信息
45      * @return 跳转地址
46      */
47     @RequestMapping(value = "/add")
48     public String addUser(User user) {
49         Boolean aBoolean = userService.addUser(user);
50         if (aBoolean) {
51             //添加成功则冲定向到用户展示页面
52             return "redirect:/user/list";
53         }
54         return "error";
55     }
56 
57     /**
58      * 根据id删除用户
59      *
60      * @param userId
61      * @return
62      */
63     @RequestMapping("/del")
64     public String delUser(int userId) {
65         Boolean aBoolean = userService.delUser(userId);
66         if (aBoolean) {
67             //添加成功则冲定向到用户展示页面
68             return "redirect:/user/list";
69         }
70         return "error";
71     }
72 
73     /**
74      * 修改用户信息
75      * @param user
76      * @return
77      */
78     @RequestMapping("/change")
79     public String changeUser(User user) {
80         Boolean aBoolean = userService.changeUser(user);
81         if (aBoolean) {
82             //添加成功则冲定向到用户展示页面
83             return "redirect:/user/list";
84         }
85         return "error";
86     }
87 
88     /**
89      * 用于跳转到增加用户的jsp页面
90      * @return 地址
91      */
92     @RequestMapping(value = "/addAction",method = RequestMethod.GET)
93     public String add() {
94         return "addUser";
95     }
96 }
UserController.java

9.前端页面

  •  首页

1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4     <title>Title</title>
5 </head>
6 <body>
7     <a href="/user/list">查看所有用户</a>
8 </body>
9 </html>
index.jsp
  • 用户展示页面
 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2  3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 4 <html>
 5 <head>
 6     <title>Title</title>
 7 </head>
 8 <body>
 9 <table border="1px" cellspacing="0" cellpadding="0" align="center" width="500px">
10     <thead>
11     <tr align="center">
12         <th>编号</th>
13         <th>姓名</th>
14         <th>密码</th>
15         <th>年龄</th>
16         <th>操作</th>
17     </tr>
18     </thead>
19     <tbody>
20     <c:if test="${empty userList}">
21         <tr align="center">
22             <td colspan="5">暂无用户数据!</td>
23         </tr>
24     </c:if>
25     <c:if test="${not empty userList}">
26         <c:forEach items="${userList}" var="user">
27             <tr align="center">
28                 <td>${user.userId}</td>
29                 <td>${user.userName}</td>
30                 <td>${user.userPwd}</td>
31                 <td>${user.userAge}</td>
32                 <td>
33                     <button><a href="/user/del?userId=${user.userId}">删除</a></button>
34                     <button><a href="/change.jsp?userId=${user.userId}">修改</a></button>
35                 </td>
36             </tr>
37         </c:forEach>
38     </c:if>
39     </tbody>
40     <tfoot>
41     <tr align="center">
42         <td colspan="5">
43             <button><a href="/user/addAction">添加用户</a></button>
44         </td>
45     </tr>
46     </tfoot>
47 </table>
48 </body>
49 </html>
showUser.jsp
  • 增加用户界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>增加用户</title>
</head>
<body>
<form action="/user/add">
    <table  align="center" width="300px">
        <thead>
        <tr align="center">
            <th colspan="2">添加用户</th>
        </tr>
        </thead>
        <tbody>
        <tr >
            <td align="right">用户名:</td>
            <td><input type="text" name="userName"/></td>
        </tr>
        <tr >
            <td align="right">密码:</td>
            <td><input type="text" name="userPwd"/></td>
        </tr>
        <tr >
            <td align="right">年龄:</td>
            <td><input type="text" name="userAge"/></td>
        </tr>
        </tbody>
        <tfoot>
        <tr align="center">
            <td colspan="2"><input type="submit" value="提交"></td>
        </tr>
        </tfoot>
    </table>
</form>
</body>
</html>
addUser.jsp 
  • 修改用户页面(未完善,后续会改动)
 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>修改用户信息</title>
 5 </head>
 6 <body>
 7 <%
 8     String userId = request.getParameter("userId");
 9 %>
10 <form action="/user/change" >
11     <table align="center" width="300px">
12         <thead>
13         <tr align="center">
14             <th colspan="2">修改用户信息</th>
15         </tr>
16         </thead>
17         <tbody>
18         <tr>
19             <td align="right">用户编号:</td>
20             <td><input type="text" name="userId" value="<%=userId%>" readonly/></td>
21         </tr>
22         <tr>
23             <td align="right">用户名:</td>
24             <td><input type="text" name="userName"/></td>
25         </tr>
26         <tr>
27             <td align="right">密码:</td>
28             <td><input type="text" name="userPwd"/></td>
29         </tr>
30         <tr>
31             <td align="right">年龄:</td>
32             <td><input type="text" name="userAge"/></td>
33         </tr>
34         </tbody>
35         <tfoot>
36         <tr align="center">
37             <td colspan="2"><input type="submit" value="确认修改"></td>
38         </tr>
39         </tfoot>
40     </table>
41 </form>
42 </body>
43 </html>
change.jsp

10.整个项目目录

 

posted @ 2020-08-18 20:33  书洋  阅读(617)  评论(7编辑  收藏  举报