`
tianhandigeng
  • 浏览: 374483 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

项目开发全纪录(一)

阅读更多

1、环境
开发流程中,第一天往往是确定项目的开发架构,并同时搭建好开发环境
  开发工具:MyEclipse
  数据库:  MySQL

2、添加SSH支持
  顺序:A.Spring
        B. Hibernate
        C. Struts2

3、Web应用中添加Spring支持

   第一步:导入Spring包

  第二步:在WEB-INF/下创建配置文件,这里我们以applicationContext.xml为例

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
</beans>

  第三步:完成Spring容器的初始化
对于Spring的初始化有两种方式,其中一种方式在这里就不讲了,因为是对于Servlet2.3以下的版本来说的。在这里利用其中的一种方法,也是最为简单的一种方法,利用
ContextLoaderListener来初始化:
注:Spring提供了一个ContextLoaderListener类,该类可以作为Web应用的Listener使用,它会在Web应用启动时自动查找WEB-INF/下的applicationContext.xml配置文件,并根据该文件来创建Spring容器。
在这里就有就出现了两种情况:
第一:如果只有一个配置文件,并且文件名为"applicationContext.xml",并将该文件放在Web应用的WEB-INF路径下了,则只需在web.xml文件中增加如下一段即可:

<!-- 根据默认配置文件来初始化Spring容器 -->
<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
</listener>

 第二:如果有多个配置文件,则应该使用<context-param>元素来确定配置文件的文件名。ContextLoaderListener加载时,会查找名为"contextConfigLocation"的参数。因此,配置context-param时指定的参数名应该是"contextConfigLocation".

<!-- 确定多个配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/daoContext.xml,/WEB-INF/applicationContext.xml
		</param-value>
	</context-param>
	<!--采用Listener完成Spring容器的初始化 -->
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

 注:如果没有contextConfigLocation制定配置文件,Spring自动查找WEB-INF路径下的“applicationContext.xml”配置文件;如果有contextConfigLocation,则利用该参数指定的配置文件来初始化Spring容器;如果无法找到合适的配置文件,Spring将无法正常初始化。

总结:
Spring应用到Web应用程序中最重要的内容:在web.xml配置信息来初始化Spring容器

 

4、Spring整合Struts 2
   第一步:导入整合Struts 2需要的jar包:



  第二步;在WEB-INF/下创建struts.xml文件

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
</struts>

 第三步:在web.xml中配置Struts 2核心过滤器

 

<!-- 定义Struts 2的核心控制器:FilterDispatcher -->
	<filter>
		<!-- 定义核心Filter的名字 -->
		<filter-name>struts2</filter-name>
		<!-- 定义核心Filter的实现类 -->
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<!-- FilterDispatcher用来初始化Struts 2并且处理所有的HTTP请求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 Spring容器和Struts 2整合的关键所在是Spring容器为控制器注入业务逻辑组件,也就是在Struts 2中引用业务逻辑组件来处理时不再需要手工创建业务逻辑组件对象,业务逻辑组件对象的创建完全交给了Spring,而且我们在控制器中面向的是接口,所以可以在Spring容器中灵活地配置实现类,这种方法可以更好地降低控制器与业务实现类的耦合性。

控制器访问到Spring容器中的业务逻辑组件有以下两种策略:
● Spring管理控制器,并利用依赖注入为控制器注入业务逻辑组件
● 控制器定位Spring工厂,也就是Spring的容器,从容器中取得所需的业务逻辑组件
第一种整合流程:
正如前面所介绍的,Struts 2的核心控制器首先拦截用户的请求,然后将请求转发给对应的Action处理,这个过程是固定的(除非改写Struts 2的核心控制器)。但实际上,Action实例是由Spring容器产生的,而不是由Struts 2容器产生的。那么,如何将请求转发给Spring容器中的Action呢?
Spring插件提供了一种伪Action,当我们在struts.xml中配置Action时,通常需要指定class属性,这属性就是用于创建Action实例的实现类。但Spring插件允许我们指定class属性时,不是指向Action的实际实现类,而是指向Spring容器中的Bean ID。
通过上面的方式,我们发现了这种整合策略的关键:当Struts 2将请求转发给指定Action时,Struts 2中的该Action只是一个“傀儡”,它只是一个代号,并没有指定实际的实现类,当然不可能创建实际的Action实例,而隐藏在该Action下的是Spring容器中的Action实例----它才是真正处理用户请求的控制器。
下面是struts.xml中的配置

<action name=”login” class=”loginAction”>
</action>

下面是Spring的配置文件applicationContext.xml

<!—部署一个业务逻辑组件-->
<bean id=”myService” class=”lee.MyServiceImpl”/>
<!—配置Struts 2控制器对应的Bean实例-->
<bean id=”loginAction” class=”lee.LoginAction”>
<!—依赖注入业务逻辑组件-->
<property name=”ms” ref=”myService”/>
</bean>

 第二种整合:
在这种策略下,Action还是由Spring插件创建,Spring插件在创建Action实例时,利用Spring的自动装配策略,将对应业务逻辑组件注入到Action实例中。这种整合策略配置文件很简单,但是控制器和业务逻辑组件耦合又提升到了代码层次,耦合较高。
在这中情况下struts.xml的写法还是和单独使用的时候一样,Spring的配置文件中也不需要另外写aciton的bean,然后注入业务逻辑组件。
采用的是自动装配方式,有4中:name、type、auto、constructor。

 

无论是上面的那种方式,Struts中的Action的实例都是由Spring来创建。Struts 2整合Spring和不整合时当然存在区别,只是这个区别不是在配置文件中体现,而是在创建Action实例时体现出来的。如果不整合Spring框架,则Struts 2 框架负责创建该Action的实例,创建成功后就结束了;如果整合Spring框架,则由Spring插件负责创建该Action的实例,创建成功后,还需要将该Action所需的业务逻辑组件注入给该Action实例。

 

5、Spring整合Hibernate
  第一步:导入Hibernate包


 Spring与Hibernate整合,最重要的就是关于sessionFactory的处理,在Spring的SessionFactory配置灵活度很高,支持各种开发者的习惯,让开发者拥有充分的选择权。
有两种配置方式:
1、零过渡阻碍的配置方式
2、更具Spring风格的方式


更具Spring风格的方式:
    这种方式下,hibernate所有的配置信息都放置在Spring的配置文件中
在Spring容器中需要配置的hibernate的信息包括一下三个内容:
A、数据源(dataSource)
B、映射文件(Spring 提供了三种指定映射文件的方式)/实体类(基于annotation的配置)
C、Hibernate属性(hibernateProperties)

对于基于映射文件的方式在Spring容器中是这样配置的

<!--定义Hibernate的SessionFactory-->
	<bean id="sessionFactory"
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<!--依赖注入数据源,注入上面的数据源-->
		<property name="dataSource" ref="dataSource" />
		<!--mappingResources属性用来列出全部映射文件 -->
		<property name="mappingResources">
			<list>
			    <value>org/.../User.hbm.xml</value>
			</list>
		</property>
		<!-- 定义Hibernate的sessionFactory 属性 -->
		<property name="hibernateProperties">
		     。。。。。。
		</property>
	</bean>

 对于基于annotation的方式在Spring容器中是这样配置的:

<!--定义Hibernate的SessionFactory-->
	<bean id="sessionFactory"
	class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<!--依赖注入数据源,注入上面的数据源-->
		<property name="dataSource" ref="dataSource" />
		<!--用annotatedClasses属性来列出全部的实体类-->
		<property name="annotatedClasses">
			<list>
			    <value>test.Person</value>
			</list>
		</property>
		<!-- 定义Hibernate的sessionFactory 属性 -->
		<property name="hibernateProperties">
		    。。。。。。。
		</property>
	</bean>

 两种配置方式的不同体现在以下几个方面:
生成bean的class不同
  注解方式是:  
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
  映射文件方式是:
org.springframework.orm.hibernate3.LocalSessionFactoryBean
用于指定映射文件和实体类的属性不同
   注解方式是:
    <property name="annotatedClasses">
            <list>
                <value>test.Person</value>
            </list>
    </property>
   映射文件方式是:
   <property name="mappingResources">
            <list>
                <value>org/.../User.hbm.xml</value>
            </list>
  </property>
在这种配置方式中,关于映射文件的处理变得相当灵活,如果用的是书写映射文件的方式我们可以通过指定一个目录来加载目录下所有的映射文件,它允许用户指定多个映射文件目录。

<!--定义Hibernate的SessionFactory-->
	<bean id="sessionFactory"
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<!--依赖注入数据源,注入上面的数据源-->
		<property name="dataSource" ref="dataSource" />
		<!-- mappingDirectoryLocations属性用来指定映射文件目录-->
		<property name="mappingDirectoryLocations">
			<list>
			    <value>classpath:/com/baobaotao/domain/hbm </value>
			</list>
		</property>
		<!-- 定义Hibernate的sessionFactory 属性 -->
		<property name="hibernateProperties">
		     。。。。。。
		</property>
	</bean>

 除此之外,Spring还提供了以下三种指定映射文件的方式:
    mappingJarLocations:如果映射文件位于JAR文件中,则可以通过该属性指定,如WEB-INF/lib/example.hbm.jar
    mappingLocations:通过相对于类路径的方式指定映射文件,属性类型为Resource[],既可以通过内嵌多个<value>的<list>元素指定映射文件,也可以通过逗号分隔的方式指定,如:classpath:topic.hbm.xml,classpath:post.hbml.xml
    mappingResources:通过相对于类路径的方式制定映射文件,属性类型为
String[].既可以通过内嵌多个<value>的<list>元素指定映射文件,也可以通
过逗号分隔的方式指定


零过渡阻碍的配置方式
     这种方式下hibernate的配置文件依然存在,在Spring的配置文件中指定这个配置文件:

<!--定义Hibernate的SessionFactory-->
	<bean id="sessionFactory"
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property 
name=”configLocation” value=”classpath:conf/hibernate.cfg.xml”/>
	</bean>

 如果有多个配置文件可以通过configLocations属性指定。

 

6、关于配置文件的读取问题
  Spring 可以将所有的配置信息统一到一个文件中,也可以放置到多个文件中,对于简单的应用来说,由于配置信息少,仅用一个配置文件就足以应付。随着应用规模的扩大,配置信息量的增多,仅仅使用一个配置文件往往难以满足要求,如果不进行仔细规划,将给配置信息的查看和团队协作带来负面影响。
在这里我们将配置文件分成了几个,并且按照JpetStore的方式将这些文件放置到了WEB-INF下,因为是Web应用程序所以需要在启动时加载这些配置文件从而初始化Spring容器,在web.xml中这样配置:

<!-- 确定多个配置文件 -->
	<context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>
	       /WEB-INF/zuwoba-dao.xml,/WEB-INF/zuwoba-service.xml
	    </param-value>
	</context-param>

 我们有时候也需要读取这些配置文件,按下面的方式读取:

ApplicationContext context=new 
FileSystemXmlApplicationContext("WebRoot/WEB-INF/zuwoba-dao.xml")

 7、事务
   一》事务的传播特性


 

   编程式事务(事务的开启、提交、回滚、关闭都是手工的)
   A、openSession和getCurrentSession的区别
      * openSession必须关闭,currentSession在事务结束后自动关闭
      * openSession没有和当前线程绑定,currentSession和当前线程绑定
   B、如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:
      * 如果是本地事务(jdbc事务)
        <property name="hibernate.current_session_context_class">thread</property>
       * 如果是全局事务(jta事务)
        <property name="hibernate.current_session_context_class">jta</property>

实例:保存一个User就存一下日志

   
  * 声明式事务
      通常在业务逻辑层设置事务边界
声明式事务
声明式事务(Programmatic transaction management)是对程序事务管理的方式之一。   
Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中申明。用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可;在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便。  
 Spring使用声明式的事务管理,因而声明式事务是以方法为单位,Spring的事务属性自然就在于描述事务应用至方法上的策略,在Spring中事务属性有以下四个参数:   1.传播行为   2.隔离级别   3.只读提示   4.事务超时期间


    Spring中使用声明式事务
1、首先要做的就是加入aspect包



 2、要在Spring的配置文件中使用aop还必须声明Schema信息,下面是完整的声明

<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-2.5.xsd
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

3、大体如下:

 <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
         <property name="sessionFactory">
              <ref bean="sessionFactory"/>
         </property>
    </bean>
    
    <!-- 哪些业务类需要工作于事务环境下 -->
    <aop:config>
         <!-- 配置一个切入点,匹配com.zuwoba.service.impl包下所有以Impl结尾的类执行的所有方法 -->
         <aop:pointcut id="allServiceMethod" expression="execution(* com.zuwoba.service.impl.*Impl.*(..))"/>
         <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/>
    </aop:config>
    
    
    <!-- 事务的传播特性 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
         <tx:attributes>
              <tx:method name="add*" propagation="REQUIRED"/>
              <tx:method name="del*" propagation="REQUIRED"/>
              <tx:method name="modify*" propagation="REQUIRED"/>
              <tx:method name="*" propagation="REQUIRED" read-only="true"/>
         </tx:attributes>
    </tx:advice>

 8、关于数据库字段长度的问题
MySQL数据库中整型字段长度:
   这个可选的宽度规格说明是用于在数值显示时,对某些值的宽度短于该列宽度的值进行左填补显示的,而不是为了限制在该列中存储值的宽度,也不是为了限制那些超过该列指定宽度的值可被显示的数字位数。注意,如果一个整型列中存储一个超过显示宽度的更大值时,当MySQL为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,MySQL信任地认为所有的值均适合原始的列宽度。
    在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度。
整型列的显示宽度与mysql需要用多少个字符来显示该列数值,与整型需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。

字符串类字段长度:
   字符串类字段长度和数值类字段长度表示的意义就不同了,字符串类字段的长度就是表示了存储字符(一个汉字占一个字符)的个数,如果大于该长度,存入到数据库中的时候就会进行截断,如:varchar(4),存入字符串"hhhhh",则存入到数据库中的时候就只会存"hhhh",所以注意两种类型长度所表示的意义的不同。


浮点型字段:
   MySQL用三种浮点型数据列类型:分别是:FLOAT,DOUBLE和DECIMAL。
关于单精度浮点数和双精度浮点数:
   用4个字节(32位)来存放一个浮点数,尾数有7个有效数字左右,叫单精度浮点数,用64位来存放,尾数有效数字可以增加到15位或16位,叫双精度浮点数。
   在MySQL中浮点型数据的存储也有一个长度的问题:
 
这里Length指定了这个数有两个数字位,Decimals说明了小数占一位:
所以如果存的是"5.21",实际存的就是"5.2";
        存"50.2"存的就是"9.9".
9、Struts 2 的Action的书写
   Struts 2 的Action有三种写法:
    直接写
    实现Action接口
    继承ActionSupport类
在实际的开发过程中我们使用继承ActionSupport类的方法,它已经实现了Action接口,而且还实现了Validateable接口,提供了数据校验功能,在Validateable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fileErrors域中,然后通过OGNL表达式负责输出。
10、struts.xml文件配置信息

 <!-- 设置为开发模式 -->
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<package name="account" extends="struts-default">

     struts.devMode:该常量设置Struts2应用是否使用开发模式。如果该常量为true,则可以在应用出错的时候显示更 多、更友好的出错提示。该常量只接受true和false两个值,该常量的默认值是false。通常,应用在开发阶段,将该常量设置为true,当进入产品的发布阶段后,则该常量设置为false。
    struts-default.xml:该文件是Struts 2框架的默认配置文件,Struts 2框架每次都会自动加载该文件。在上面的配置文件中,名为account的包空间,继承了名为struts-default的包空间,struts-default包空间定义在struts-default.xml文件中。可见,Struts 2框架默认会加载struts-default.xml文件。
注意:虽然在配置Struts 2的常量的时候可以在web.xml中进行配置,但是在实际的开发中,不推荐将Struts 2 常量配置在web.xml中。推荐在struts.xml中配置Struts 2常量。
    包配置
为什么需要包呢?那就看看包有什么作用了,Struts 2框架中核心组件就是Action、拦截器等,Struts 2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。
配置包时,必须指定name属性,这个属性是引用这个包的key。除此之外,还可以指定一个可选的extends属性,extends属性值必须是另一个包的name属性。指定extends属性表示让该包继承其他包,子包可以继承一个或多个父包中的拦截器、拦截器栈、action等配置。
    包配置—>命名空间
考虑到在同一个Web应用中需要同名的Action,Struts 2以命名空间的方式来管理Action,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。
注意:如果某个包没有指定namespace属性,即该包使用默认的命名空间,则默认的命名空间总是“”。
      当某个包指定了命名空间后,该包下所有Action处理的URL应该是命名空间+Action名。

 

 

----未完待续-----

2
3
分享到:
评论
2 楼 hunan84229247 2010-12-19  
  
1 楼 chenhailong 2010-12-19  
努力啊 哈哈

相关推荐

    华为集成开发流程实施全纪录

    ### 华为集成开发流程(IPD)实施全纪录 #### 一、引言 华为在1998年引入了IBM的集成产品开发(Integrated Product Development, IPD)管理体系,这一举措对于华为后续的发展产生了深远的影响。本文将详细介绍华为...

    ossimplanet1.86以上版本编译全纪录

    《OssimPlanet 1.86以上版本编译全纪录》 OssimPlanet,一个可能不如WorldWind广为人知的开源数字地球项目,却因其强大的功能和技术魅力吸引着技术爱好者。尽管由于其基于C++的编程语言,以及相对稀缺的中文资料,...

    北风网免费视频地址全纪录

    "北风网免费视频地址全纪录"这个标题表明这是一份汇总了该网站所有免费视频课程链接的资源,涵盖了广泛的互联网技术领域。这份资源对于那些希望自我提升、学习新技能或者对某个IT主题感兴趣的初学者和专业人士来说,...

    完整版纪录源码.rar

    【描述】"完整版纪录源码.rar"可能指的是一个记录了项目开发全过程的源码集合。这通常意味着包含了从项目初始化到最终完成的所有阶段的代码,包括设计、实现、测试以及可能的优化过程。这样的源码库对于学习软件工程...

    软件硬件产品设计与开发详细流程.pdf

    该过程可以分为两个阶段:第一阶段是项目计划和确定,第二阶段是产品设计与开发。 第一阶段:项目计划和确定 1.1 新产品开发建议书:销售部根据公司的战略规确定新产品设计/开,提出产品开发计划。 1.2 可行性...

    jQuery焦点图切换简易插件制作过程全纪录

    - **jQuery插件开发**:了解如何将功能封装成jQuery插件,便于在多个项目中复用。 - **DOM操作**:通过jQuery对DOM进行选择、遍历、插入、删除等操作,实现动态的界面效果。 - **浏览器兼容性**:在编写插件时,需要...

    项目经理的福音,刚做项目经理的时候整理的,项目交付也是参考了本交付清单进行整理的文档,希望对大家有用

    一个详尽的项目交付清单是保证项目成功的关键工具,它涵盖了从立项到运维的全过程。以下将对这个项目交付清单的主要内容进行详细解释: 1. **项目准备阶段**: - **工作标准说明书(SOW)**:明确了项目的目标、...

    iTOP-4412开发板Android操作系统源码编译过程全纪录

    4412开发板上Android操作系统的源码编译过程进行了深入的探讨和记录,详述了硬件资源的要求、编译过程中的常见问题以及相应的解决方案,具有很高的实用价值和参考意义,对于进行类似项目的开发者来说是一份宝贵的...

    厦门大学信息学院 计算机图形学课程相关实验全纪录.zip

    1. **README.md**:这是一个Markdown格式的文件,通常包含项目简介、实验目的、步骤指南、注意事项等内容。对于学生来说,这是了解整个课程设计的重要入口,会提供实验的总体介绍和执行指导。 2. **Exp4**:实验4...

    软件硬件产品设计与开发详细流程管理【项目】.pdf

    "软件硬件产品设计与开发详细流程管理【项目】" 本文档详细介绍了软件硬件产品设计与开发的详细流程管理项目,该项目旨在确保产品设计和开发过程的可靠性、效率和质量。下面是该项目的详细流程: 第一阶段:计划和...

    信息化项目需求调研文档模板.pdf

    这份文档模板,名为"信息化项目需求调研文档模板-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN需求调研纪录表",提供了一个详细的框架,帮助项目团队系统性地收集、记录和分析业务需求。 首先,文档的标题表明了其核心...

    私藏酒窖项目商业计划书.pdf

    通过以上内容,我们可以看到,私藏酒窖项目商业计划书不仅仅是一份文档,它还是对公司发展蓝图的全面构建,涉及从市场分析、产品设计、营销推广到风险评估和财务规划的全方位策略。这份计划书的编制是公司为了实现其...

    河南郑州升龙城写字楼项目整体营销提案.pdf

    升龙集团自2005年起响应国家政策,参与郑州的城中村改造,通过开发大型城市综合体商业项目——曼哈顿广场,逐步崭露头角。至2007年底,升龙集团以14.9亿元的销售额进入郑州十强房企行列,并在后续几年内不断发展壮大...

    Spring Boot整合Swagger测试api构建全纪录

    Spring Boot整合Swagger测试API构建全纪录 Swagger是一个广泛使用的API工具,它遵循OpenAPI规范,旨在简化RESTful服务的开发、文档化和测试。Swagger提供了一整套框架和工具,帮助开发者生成、交互和可视化API。它...

    信息化项目需求调研文档模板实用.pdf

    综上所述,这份模板提供了一个全面的需求调研框架,涵盖了从计划、实施到分析和确认的全过程。通过这样的方法,可以确保信息化项目的实施更加符合实际业务需求,降低项目风险,提高项目成功率。在实际操作中,每个...

    trackmania-records:Nadeo世界纪录统计

    该项目的核心在于记录和展示Trackmania游戏中玩家所创下的最快纪录,让全世界的玩家都能看到这些令人惊叹的成绩。这种统计不仅提升了游戏的社区参与度,也让玩家们在挑战与超越中感受到竞技的乐趣。"Nadeo世界纪录...

    基于 C# WPF 的串口调试助手,允许用户通过串口与外部设备进行通信(包含详细的完整的程序和数据)

    通过此项目可以帮助开发者理解和掌握如何开发一个能够与外部设备通信的应用,实现多串口的支持、数据实时监控和发送、数据的日志纪录等功能。 适合人群:主要面向具有一定编程经验和对串口通讯感兴趣的技术人员,...

    C#简单操作MongoDB的步骤全纪录

    MongoDB是一款高性能的开源非关系型数据库,由C++编写,以其无模式、面向集合的存储方式和丰富的...在实际开发中,应根据项目需求灵活运用这些方法,同时注意性能优化和错误处理,确保数据的安全性和应用程序的稳定性。

Global site tag (gtag.js) - Google Analytics