ssm整合

一、导入相关包

二、开发流程

1.写entity

  1. package com.eggtwo.euq.entity;
  2.  
  3. import java.io.Serializable;
  4. import java.math.BigDecimal;
  5. import java.util.Date;
  6.  
  7. public class Member {
  8. private int id;
  9.  
  10. public int getId() {
  11. return id;
  12. }
  13.  
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17.  
  18. private String name;
  19. private int age;
  20. private Date birthday;
  21. private boolean man;
  22. private BigDecimal score;
  23.  
  24. public BigDecimal getScore() {
  25. return score;
  26. }
  27.  
  28. public void setScore(BigDecimal score) {
  29. this.score = score;
  30. }
  31.  
  32. public String getName() {
  33. return name;
  34. }
  35.  
  36. public void setName(String name) {
  37. this.name = name;
  38. }
  39.  
  40. public int getAge() {
  41. return age;
  42. }
  43.  
  44. public void setAge(int age) {
  45. this.age = age;
  46. }
  47.  
  48. public Date getBirthday() {
  49. return birthday;
  50. }
  51.  
  52. public void setBirthday(Date birthday) {
  53. this.birthday = birthday;
  54. }
  55.  
  56. public boolean isMan() {
  57. return man;
  58. }
  59.  
  60. public void setMan(boolean man) {
  61. this.man = man;
  62. }
  63.  
  64. @Override
  65. public String toString() {
  66. return "Member{" +
  67. "id=" + id +
  68. ", name='" + name + '\'' +
  69. ", age=" + age +
  70. ", birthday=" + birthday +
  71. ", man=" + man +
  72. ", score=" + score +
  73. '}';
  74. }
  75. }

Member

2.配mapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="com.eggtwo.euq.dao.MemberDao">
  7. <!--
  8. *******当实体属性和表字段名称一致的话resultMap标签可以省略********
  9. resultMap标签:映射实体和表关系
  10. id:映射关系id,要唯一
  11. type:实体全路径
  12. -->
  13. <resultMap id="memberMap" type="com.eggtwo.euq.entity.Member">
  14. <!--id:映射主键属性
  15. result:映射非主键属性
  16. property:实体属性名称
  17. column:表字段名称
  18. -->
  19. <id property="id" column="id"/>
  20. <result property="name" column="name"/>
  21. <result property="age" column="age"/>
  22. <result property="birthday" column="birthday"/>
  23. <result property="man" column="man"/>
  24. <result property="score" column="score"/>
  25. </resultMap>
  26.  
  27. <insert id="add" parameterType="com.eggtwo.euq.entity.Member" useGeneratedKeys="true" keyProperty="id">
  28. insert into t_member(name,age,birthday,man,score)
  29. values(#{name},#{age},#{birthday},#{man},#{score})
  30. </insert>
  31.  
  32. <update id="update" parameterType="com.eggtwo.euq.entity.Member">
  33. update t_member set
  34. name = #{name},
  35. age = #{age},
  36. birthday = #{birthday},
  37. man = #{man},
  38. score = #{score}
  39. where id = #{id}
  40. </update>
  41.  
  42. <delete id="delete" parameterType="int">
  43. delete from t_member where id = #{id}
  44. </delete>
  45.  
  46. <!-- <select id="getById" parameterType="int" resultType="com.eggtwo.entity.Member">-->
  47. <!--resultType使用mybatis.xml中设置的别名,这样可以简化难度-->
  48. <select id="getById" parameterType="int" resultMap="memberMap">
  49. select id,name,age,birthday,man,score
  50. from t_member
  51. where id=#{id}
  52. </select>
  53. <!--
  54. 理论上resultType的值应该是:List<com.eggtwo.entity.Member>
  55. 实际上只需要写List集合中的类型就可以
  56. -->
  57. <select id="getAll" resultMap="memberMap">
  58. select *
  59. from t_member
  60. </select>
  61. <!--分页:多参数的写法-->
  62. <select id="getPageList" parameterType="map" resultMap="memberMap">
  63. select id,name,age,birthday,man,score
  64. from t_member limit #{start},#{size}
  65. </select>
  66.  
  67. <!--多条件查询-->
  68. <select id="getListByWhere" parameterType="map" resultMap="memberMap">
  69. select id,name,age,birthday,man,score
  70. from t_member
  71. <where>
  72. <if test="name!=null and name!=''">
  73. and name like #{name}
  74. </if>
  75. <if test="score!=null">
  76. and score > #{score}
  77. </if>
  78. </where>
  79. </select>
  80.  
  81. <!--动态更新:可以支持部分字段更新-->
  82. <update id="dynamicUpdate" parameterType="map">
  83. update t_member
  84. <set>
  85. <if test="name!=null">
  86. name = #{name},
  87. </if>
  88. <if test="age!=null">
  89. age = #{age},
  90. </if>
  91. <if test="birthday!=null">
  92. birthday = #{birthday},
  93. </if>
  94. <if test="man!=null">
  95. man = #{man},
  96. </if>
  97. <if test="score!=null">
  98. score = #{score},
  99. </if>
  100. </set>
  101. where id=#{id}
  102. </update>
  103.  
  104. <!--根据ids数组批量删除数据-->
  105. <delete id="batchDelete" >
  106. delete from t_member where id in
  107. <!--
  108. 循环数组
  109. 解析成:(1,2,34)
  110. #id表示数组中的每一个元素,名称可以任意写
  111. -->
  112. <foreach collection="array" open="(" close=")" separator="," item="id">
  113. #{id}
  114. </foreach>
  115. </delete>
  116. <!--根据ids列表批量删除数据-->
  117. <delete id="batchDeleteList" >
  118. delete from t_member where id in
  119. <!--
  120. 循环数组
  121. 解析成:(1,2,34)
  122. #id表示数组中的每一个元素,名称可以任意写
  123. -->
  124. <foreach collection="list" open="(" close=")" separator="," item="id">
  125. #{id}
  126. </foreach>
  127. </delete>
  128. </mapper>

3.配mybatis.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!--配置类的别名:使用type的地方可以直接写alias的值-->
  6. <typeAliases>
  7. <!--用类名做别名-->
  8. <package name="com.eggtwo.euq.entity"/>
  9. </typeAliases>
  10.  
  11. </configuration>

4.编写dao

  1. package com.eggtwo.euq.dao;
  2.  
  3. import com.eggtwo.euq.entity.Member;
  4.  
  5. public interface MemberDao {
  6. public void add(Member member);
  7. }

4.1编写service

  1. package com.eggtwo.euq.service;
  2.  
  3. import com.eggtwo.euq.dao.MemberDao;
  4. import com.eggtwo.euq.entity.Member;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7.  
  8. import javax.annotation.Resource;
  9.  
  10. //用注解实现IOC
  11. @Service("memberService")
  12. public class MemberService {
  13.  
  14. @Autowired
  15. private MemberDao memberDao;
  16.  
  17. public void add(Member member) throws Exception {
  18. memberDao.add(member);
  19. // int a = 3 / 0;
  20.  
  21. }
  22. }

5.配置spring.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:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:mvc="http://www.springframework.org/schema/mvc"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop.xsd
  15. http://www.springframework.org/schema/tx
  16. http://www.springframework.org/schema/tx/spring-tx.xsd
  17. http://www.springframework.org/schema/mvc
  18. http://www.springframework.org/schema/tx/spring-mvc.xsd
  19.  
  20. ">
  21.  
  22. <!-- 配置C3P0连接池,目的:管理数据库连接 -->
  23. <bean id="comboPooledDataSourceID" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  24. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  25. <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf8"/>
  26. <property name="user" value="root"/>
  27. <property name="password" value="123456"/>
  28.  
  29. <!-- c3p0连接池的私有属性 -->
  30. <property name="maxPoolSize" value="30" />
  31. <property name="minPoolSize" value="10" />
  32. <!-- 关闭连接后不自动commit -->
  33. <property name="autoCommitOnClose" value="false" />
  34. <!-- 获取连接超时时间 -->
  35. <property name="checkoutTimeout" value="10000" />
  36. <!-- 当获取连接失败重试次数 -->
  37. <property name="acquireRetryAttempts" value="2" />
  38.  
  39. </bean>
  40.  
  41. <!-- 配置SqlSessionFactoryBean,目的:加载mybaits配置文件和映射文件,即替代原Mybatis工具类的作用 -->
  42. <bean id="sqlSessionFactoryBeanID" class="org.mybatis.spring.SqlSessionFactoryBean">
  43. <property name="dataSource" ref="comboPooledDataSourceID"/>
  44. <!--加载mybatis.xml文件-->
  45. <property name="configLocation" value="classpath:mybatis.cfg.xml"/>
  46. <!--配置扫描式加载sql映射文件,去掉mybatis.xml中的mappers-->
  47. <property name="mapperLocations" value="classpath:com/eggtwo/euq/entity/*.xml"/>
  48. </bean>
  49.  
  50. <!-- 配置Mybatis的事务管理器,即因为Mybatis底层用的是JDBC事务管事器,所以在这里依然配置JDBC事务管理器 -->
  51. <bean id="dataSourceTransactionManagerID" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  52. <property name="dataSource" ref="comboPooledDataSourceID"/>
  53. </bean>
  54.  
  55. <!-- 配置事务通知,即让哪些方法需要事务支持 -->
  56. <tx:advice id="tx" transaction-manager="dataSourceTransactionManagerID">
  57. <tx:attributes>
  58. <!-- 默认只处理运行时异常,可加rollback-for="Exception/Throwable"等处理所有异常或包括错误 -->
  59. <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
  60. <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
  61. <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
  62. <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
  63. <tx:method name="*" propagation="SUPPORTS"/>
  64. </tx:attributes>
  65. </tx:advice>
  66.  
  67. <!-- 配置事务切面,即让哪些包下的类需要事务 -->
  68. <aop:config>
  69. <!--在service包下面使用事务-->
  70. <aop:pointcut id="pointcut" expression="execution(* com.eggtwo.euq.service.*.*(..))"/>
  71. <aop:advisor advice-ref="tx" pointcut-ref="pointcut"/>
  72. </aop:config>
  73.  
  74. <!-- 配置SessionTemplate,已封装了繁琐的数据操作 -->
  75. <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  76. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBeanID"/>
  77. </bean>
  78.  
  79. <!-- 自动扫描组件,要把controller去除,他们是在spring-mvc.xml中配置,如果不去除会影响事务管理。 -->
  80. <context:component-scan base-package="com.eggtwo.euq">
  81. <context:exclude-filter type="annotation"
  82. expression="org.springframework.stereotype.Controller"/>
  83. </context:component-scan>
  84.  
  85. <!-- 配置 转换器,对于在basePackage设置的包(包括子包)下的接口类,
  86. 如果接口类的全类名在Mapper.xml文件中和定义过命名空间一致,
  87. 将被转换成spring的BEAN,在调用的地方通过@Autowired方式将可以注入接口实例 -->
  88. <!--ps:mappeer.xml中的namespace="com.eggtwo.euq.dao.MemberDao 标签:id="add"
  89. servcie中的类在调用dao中的方法时会查找(dao.way=com.eggtwo.euq.dao.MemberDao.add)
  90. -->
  91. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  92. <property name="sqlSessionFactory" ref="sqlSessionFactoryBeanID"/>
  93. <property name="basePackage" value="com.eggtwo.euq.dao"/>
  94. </bean>
  95.  
  96. </beans>

6.配置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:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:mvc="http://www.springframework.org/schema/mvc"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop.xsd
  15. http://www.springframework.org/schema/tx
  16. http://www.springframework.org/schema/tx/spring-tx.xsd
  17. http://www.springframework.org/schema/mvc
  18. http://www.springframework.org/schema/tx/spring-mvc.xsd
  19.  
  20. ">
  21.  
  22. <!-- 注册Action:自动扫描 单例模式-->
  23. <context:component-scan base-package="com.eggtwo.euq.action" />
  24.  
  25. <!-- 通知springioc容器这些注解的作用 -->
  26. <context:annotation-config/>
  27.  
  28. <!--注解映射器:可省略-->
  29. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
  30.  
  31. <!--视图解析器-->
  32. <!--
  33. 如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
  34. 如果Action中书写的是视图真实名称,那么视图解析器就不能配置
  35. -->
  36. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  37. <!-- 路径前缀 -->
  38. <property name="prefix" value="/WEB-INF/jsp/"/>
  39. <!-- 路径后缀 -->
  40. <property name="suffix" value=".jsp"/>
  41. <!-- 前缀+视图逻辑名+后缀=真实路径 -->
  42. </bean>
  43.  
  44. <!-- 注册json解析适配器 -->
  45. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  46. <property name="messageConverters">
  47. <list>
  48. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
  49. </list>
  50. </property>
  51. </bean>
  52. <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
  53. <bean id="multipartResolver"
  54. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  55. <property name="defaultEncoding" value="utf-8"/>
  56. <property name="maxUploadSize" value="10485760000"/>
  57. <property name="maxInMemorySize" value="40960"/>
  58. </bean>
  59. </beans>

7.配置web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6.  
  7. <!-- Spring配置 -->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>
  11. <context-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>classpath:spring.xml</param-value>
  14. </context-param>
  15.  
  16. <!-- 注册springmvc核心控制器-->
  17. <servlet>
  18. <!--servlet-name的值对应一个文件:/WEB-INF/DispatcherServlet-servlet.xml -->
  19. <servlet-name>springmvc</servlet-name>
  20. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  21. <init-param>
  22. <!-- 指定application.xml文件 -->
  23. <param-name>contextConfigLocation</param-name>
  24. <param-value>classpath:springmvc.xml</param-value>
  25. </init-param>
  26. <load-on-startup>1</load-on-startup>
  27. </servlet>
  28. <servlet-mapping>
  29. <servlet-name>springmvc</servlet-name>
  30. <url-pattern>*.action</url-pattern>
  31. </servlet-mapping>
  32.  
  33. <!--spring编码过滤器:解决POST提交中文乱码问题-->
  34. <filter>
  35. <filter-name>CharacterEncodingFilter</filter-name>
  36. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  37. <init-param>
  38. <param-name>encoding</param-name>
  39. <param-value>utf-8</param-value>
  40. </init-param>
  41. </filter>
  42. <filter-mapping>
  43. <filter-name>CharacterEncodingFilter</filter-name>
  44. <url-pattern>/*</url-pattern>
  45. </filter-mapping>
  46.  
  47. </web-app>

8.编写action

  1. package com.eggtwo.euq.action;
  2.  
  3. import com.eggtwo.euq.entity.Member;
  4. import com.eggtwo.euq.service.MemberService;
  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.math.BigDecimal;
  12. import java.util.Date;
  13.  
  14. @Controller
  15. @RequestMapping("member")
  16. public class MemberController extends BaseController {
  17. @Autowired
  18. private MemberService memberService;
  19. @RequestMapping(value = "add", method = RequestMethod.GET)
  20. public String add(Model model) {
  21.  
  22. try{
  23. Member member = new Member();
  24. member.setName("旺旺");
  25. member.setScore(new BigDecimal(12));
  26. member.setMan(new Boolean(true));
  27. member.setBirthday(new Date());
  28. member.setAge(14);
  29. memberService.add(member);
  30. }catch (Exception e){
  31. e.printStackTrace();
  32. }
  33. return "member/add";
  34.  
  35. }
  36. }

java web开发入门八(ssm整合)基于intellig idea的更多相关文章

  1. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  2. 【Java Web开发学习】Spring4整合thymeleaf视图解析

    [Java Web开发学习]Spring4整合thymeleaf视图解析 目录 1.简单介绍2.简单例子 转载:https://www.cnblogs.com/yangchongxing/p/9111 ...

  3. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  4. java web 开发入门实例

    学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多.看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了. 有的知识点要深入学习的,有的是了解下 ...

  5. java web 开发入门 --- tomcat/servlet/jsp

    在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...

  6. java web 开发入门

    Java web,是java技术用来解决web互联网领域的技术总和.Java web技术主要包括客户端和服务端,java在客户端的服务有java applet,不过用的非常少,大部分应用在服务端,比如 ...

  7. java web开发入门一(servlet和jsp)基于eclispe

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  8. java web开发入门汇总

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  9. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat

    第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...

随机推荐

  1. Logstash:Data转换,分析,提取,丰富及核心操作

    Logstash:Data转换,分析,提取,丰富及核心操作 Logstash plugins Logstash是一个非常容易进行扩张的框架.它可以对各种的数据进行分析处理.这依赖于目前提供的超过200 ...

  2. kali渗透综合靶机(十六)--evilscience靶机

    kali渗透综合靶机(十六)--evilscience靶机 一.主机发现 1.netdiscover -i eth0 -r 192.168.10.0/24 二.端口扫描 1. masscan --ra ...

  3. Nginx的相关问题

    1.什么是Nginx的虚拟主机? 答:虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务 ...

  4. C#与vb.net源码代码互转网站

    该转换器是印度开发团队推出的,推出时间也挺长,仅支持C#和VB.net代码转换.代码转换地址: C# -> VB.NET  http://www.dotnetspider.com/convert ...

  5. ABP中文网的一些BUG

    之前一些翻译了的文档没有及时更新.比如 IAsyncCrudAppService接口在很久之前的版本就已经改为了ICrudAppService,如果是在官网下载的最新实例中IAsyncCrudAppS ...

  6. docker 安装与基本命令

    安装 Install Docker for Linux Download Docker for Mac Install Docker for Windows 镜像是docker三大核心概念中最重要的. ...

  7. RV32I基础整数指令集

    RV32I是32位基础整数指令集,它支持32位寻址空间,支持字节地址访问,仅支持小端格式(little-endian,高地址高位,低地址地位),寄存器也是32位整数寄存器.RV32I指令集的目的是尽量 ...

  8. undefined reference to `BN_new'

    出现如下错误 undefined reference to `BN_CTX_new' undefined reference to `BN_new' undefined reference to `B ...

  9. DDL创建数据库,表以及约束(极客时间学习笔记)

    DDL DDL是DBMS的核心组件,是SQL的重要组成部分. DDL的正确性和稳定性是整个SQL发型的重要基础. DDL的基础语法及设计工具 DDL的英文是Data Definition Langua ...

  10. Alpha版本1

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在哪里 https:// ...