`

理解 pureQuery:IBM 最新的 Java 数据库应用编程范例

阅读更多

http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0708ahadian/index.html

 

 

简介

关系数据访问的对象化

大多数业务都建立在信息管理系统的基础上,而这些信息管理系统主要的底层基础设施又是基于存储在一个或多个关系数据库中的数据。这些系统由一些软件程序组成,这些软件程序专门用于信息处理,并且是以 Java 之类的托管语言实现的。

作为一种以封装、继承和多态为特征、易于使用、基于面向对象的语言,Java 一方面用于实现信息处理程序的计算和逻辑方面,另一方面则用于访问和操纵关系数据。Java 按照对象 来定义信息,而数据库则使用 。对象是其所属类的惟一实例,在物理上,对象之间互有区别。同样,关系数据库中的行也是惟一的,它们由主键值标识。另一方面,对象是独立的,只要还被一个或多个其它对象引用,它就继续存在着。而行被包含在表当中,当被从表中删除时,也就随之消失。

因此,虽然对象与行在很多方面相似,但对象对于模块化编程的内在价值在于可伸缩性、可扩展性和高效的代码维护,这是通过 对象化(objectization) 抽 象关系行的设计基础。我们把对象化定义为这样一种过程:将面向对象的基本概念(封装、继承和多态)引入到使用 SQL 执行的指令式的、内联的数据查询实践。简言之,对象化就是创建无缝对象的过程,使用的方法可以通过纯面向对象范例执行数据库操作(包括创建、替换、更新和 删除)。

对于通过对象化来编程式地访问和操纵关系数据,最流行的方式是通过一些 API 和包装器,这些 API 和包装器提供了一个或多个编写为文本字符串的 SQL 语句。整个关系数据处理都是基于这些封装的 SQL 语句的,它们是程序逻辑的重要组成部分。但是,这些 SQL 语句对于 Java 语言不是透明的,不能享受编译时优化和语义及语法验证的好处 —— 更不用说诸如内容辅助之类可以在底层设计和实现过程中节省大量时间的设计时特性了。

因此,在提高程序员的效率和生产率时,一个主要的挑战是将关系数据转换为可通过自然的面向对象方式无缝使用的对象,从而编写底层代码。要实现这种转换,需 要很好地理解如何安排数据访问 API 调用的顺序,并从技术上理解底层的数据访问编程模型(例如 JDBC),此外,还需要具备优秀的编程技能并能够将软件(尤其是它的数据访问层)拆分成多个模块化部分。

pureQuery 项目为数据库应用开发人员提供了一套基于 GUI 且易用的方法,它能够显著提高应用程序的设计和实现阶段的生产效率。通过将关系数据自动转换为 Java 对象的实现方式,方便了用户对数据的访问和操纵。将关系数据转换为 Java 对象后,就可以很自然的通过面向对象编程范例无缝地利用这些对象来编写业务逻辑和底层代码。通过将查询语言与 Java 本身相集成,pureQuery 可以代替传统的 JDBC 编程。

本文对 pureQuery 进行了概述,并提供一个详细的场景,以展示 pureQuery 如何显著提高程序员的生产率。

 




回页首


pureQuery 是什么?

pureQuery 是一个基于 Eclipse 的、可插拔的组件,它可以与 Eclipse 集成开发环境(IDE)无缝集成。它自动提供设计和运行时方式,可将关系数据作为对象管理。这种设计使开发人员可以指定一个数据库连接(例如使用 DB2®),然后使 Eclipse Java 项目能够识别底层的数据库工件(例如表、存储过程等)。在建立连接并完成所有数据库工件的自动发现之后,用户可以通过 GUI 直观地将任何底层关系表实体转换成 Java 对象。这是通过自动生成相关 SQL 语句和自动创建封装这些语句的父 Java 对象来实现的。然后,还可以在一个自然的 Eclipse IDE 编程环境中,使用充分集成的 SQL 和 Java 编辑功能对生成的 Java 对象和其中包含的 SQL 语句进行进一步定制。

Java 编辑器与 SQL 的紧密集成可以提高编程生产率,提供无缝的设计时体验,并在编写 Java 代码时简化 SQL 编码。编辑器集成包括设计时编译过程中完全支持的语义和语法验证、内容辅助、语法着色以及在 Java 中动态、选择性执行 SQL,当出错时,像处理 Java 错误一样在错误面板中进行标记。

而且,设计和运行时之间的紧密联合,使得 SQL 语句可在设计时运行。运行 SQL 语句时,将考虑所使用的全部主机变量和参数,以预览结果集,并自动回滚执行 SQL 语句导致的副作用。

此外,在设计时,可通过启动 Visual Explain 对选择的 SQL 语句进行性能分析,为查询请求的优化器实现提供可视化表示。查询请求被拆分成不同的部分,每个部分用图标表示。Visual Explain 还包括关于查询优化器所考虑和选择的数据库对象的信息。Visual Explain 提供了对查询实现的详细表示,在设计时就可以从集成的 SQL-Eclipse Java 编辑器中轻松找到造成昂贵成本的原因。

pureQuery 对象化过程

pureQuery 系统提供三种不同的方式来将关系访问层转换成基于对象的模型。

  • 数据库驱动的对象化(Database-driven objectization,DDO):
    pureQuery 的最常见用法是选择一个表,然后生成用于数据访问和操纵(即创建、替换、更新、删除)的对象。此时,pureQuery 生成基于面向对象的类和接口,用于在所选表上执行 CRUD 操作。它还生成一个特殊的类,这个类可用于对创建的对象进行单元测试。实际上,这是一个表到 Java 的转换,其中,根据底层表的特征生成以 Java 为中心的 CRUD 操作。在 概览 小节中我们将对此作详细讨论。
  • 查询驱动的对象化(Query-driven objectization,QDO):
    通常,需要从一组已有的数据库查询语句(SQL)实现应用程序构建。这时就需要基于已有的查询语句生成对象层次,这些查询语句又可用于构建底层的应用程 序。实际上,这是一个 SQL 到 Java 的转换,此转换过程将查询语句无缝地转换为以 Java 为中心的对象。在 pureQuery 系统中,只需单击选中一个查询语句,利用直观的 GUI 方式(弹出的上下文菜单),就可以很容易地生成相关的对象类层次。该系统实际上利用作为解析查询语句的结果的元数据(或者通过它所维护的来自底层数据库连 接的元数据)自动生成所需的对象类。
  • 对象-关系映射(ORM):
    有 时候已经存在表示一个关系表的 bean 类,但是还不存在该类与所需的数据库表之间的实际链接。pureQuery 凭借其丰富的内容辅助基础设施提供了一种直观的机制,可以执行类名到底层数据库中给定表名之间的一对一映射,并能够将类的受保护(或公共)变量映射到表中 的列。实际上,这是一个 Java 到 SQL 的转换,此转换过程将以 Java 为中心的实体无缝地转换成基于 SQL 的 CRUD 操作。

有时候,已经存在一个 bean 类,其中包含所有需要的关系映射元数据,但是这个类所映射的底层物理表却丢失了。pureQuery 提供了直观的 GUI 方式来根据 bean 类生成所需的 DDL 语句,以创建所需的底层数据库工件(即表和列)。

 




回页首


概览

接下来的小节将介绍 pureQuery 的最常见用法,包括 pureQuery 对象化过程 小节中介绍的 DDO 过程、QDO 过程和 ORM 过程 。最后,对 pureQuery 与 Eclipse Java Editor 的紧密集成和它所提供的附加特性作一个概述。这包括设计与运行时之间的联合,从而测试 SQL 语句的运行。

在尝试下面的场景之前,应确保已安装以下软件:

  • DB2 for Linux®, UNIX®, and Windows® Version 8.0 或更高版本,以及附带的 SAMPLE 数据库
  • Developer Workbench Version 9.5
  • pureQuery plug-in Version 1.0

在本文 参考资料 小节中可以找到用于下载 DB2 和 IBM Viper Developer V9.5 Open Beta (含 Developer Workbench 和 pureQuery 插件)的链接。

数据库驱动的对象化(DDO)案例场景

在本节中,我们研究一个简单的雇员场景,该场景的目的是以面向对象范例编程式地访问和操纵雇员数据。

下面的步骤将创建一个可感知 pureQuery 的 Java 项目,该项目将 DB2 SAMPLE 数据库中的 Employee 表转换成一个对象模型,后者可在任何 Java 应用程序中以一种自然的、面向对象的方式使用。

使用 pureQuery 开发数据库应用程序的设计模式由以下基本步骤组成:

步骤 1. 在 Eclipse IDE 中创建 Java 项目

在创建 Java 项目时,应确保创建 source 和 bin 文件夹。将项目命名为 “Personnel”。

步骤 2. 为 Personnel Java 项目启用 pureQuery 支持

  1. 右键单击 Personnel Java 项目,在弹出菜单中选择 Add pureQuery Support

    图 1. 为 Eclipse Java 项目启用 pureQuery 支持
    为 Eclipse Java 项目启用 pureQuery 支持

    要查看放大后的图像,请单击 这里

    这时会打开 Add pureQuery Support 向导,通过该向导可以为 Java 项目启用 pureQuery。

  2. 该向导的第一页包括一些常规选项。可以保留默认值。最重要的是,要确保选中 Import required pureQuery JAR files into project 旁边的复选框。这是因为 pureQuery 有它自己特定的设计和运行时 JAR 文件,必须将这些文件包括在 Java 项目中。


    图 2. Add pureQuery Support 向导:pureQuery 常规选项页面
    Add pureQuery Support 向导:pureQuery 常规选项页面


    单击 Next 进入 Add pureQuery Support 向导的下一个页面。

  3. 接下来创建数据库连接。该页面显示所有已发现的数据库连接。从列表中选择一个数据库连接。如果不存在连接,该向导将指导您创建一个新的连接。对于这个例子,选择 SAMPLE 数据库,Employee 表就在这个数据库中。


    图 3. Add pureQuery Support 向导:pureQuery 数据库连接页面
    Add pureQuery Support 向导:pureQuery 数据库连接页面


  4. 单击 Finish 按钮关闭该向导,进入提供 pureQuery 支持的 Personnel Java 项目。

步骤 3. 将关系工件转换为 Java 对象并自动生成 pureQuery 代码

建立数据库连接后,这个 Java 项目就可以感知数据库了。这将导致特定连接上的所有数据库工件都会在 IDE 的 Database Explorer 树型视图中自动显示,如图 4 所示。


图 4. 包含 SAMPLE 数据库中所有工件的 Database explorer
包含 SAMPLE 数据库中所有工件的 Database explorer

要查看放大后的图像,请单击 这里

pureQuery 的威力在于,它能够自动生成将底层关系数据库表工件转换成 Java 对象所需的代码。只需选中所需的数据库工件,然后启动 pureQuery Code Generation 向导,就可以自动生成代码。

下面的步骤将关系工件转换成 Java 对象,并自动生成 pureQuery 代码:

  1. 对于本例,从数据库浏览器树型视图中选择 Employee 表节点,然后在该节点上单击鼠标右键,如图 5 所示。

    图 5. 将 Employee 表转换为 Java 对象:自动生成 pureQuery 代码
    将 Employee 表转换为 Java 对象:自动生成 pureQuery 代码

    要查看放大后的图像,请单击 这里


  2. 从弹出菜单中选择 Generate the pureQuery code 选项。 这时会打开 Generate pureQuery Code 向导,如图 6 所示。


    图 6. pureQuery Code Generation 向导
    pureQuery Code Generation 向导


  3. 指定 Java Bean General 选项。

    图 6 所示,Generate pureQuery Code for a Table 向导的第一页包含一些用于描述一个表示 Employee 表的 bean 类的属性。可以保留其中的默认值。我们来研究其中一些属性:

    • Source folder :该字段指定用于保存生成的 Java 文件的物理位置。可以保留默认值: Personnel/Src
    • Name : 该字段表示生成的 Java Bean 的名称。默认情况下,这个 bean 的名称与之前在 Database Explorer 中选择的、为之生成 pureQuery 代码的数据库表工件(在此即为 Employee)的名称相同。可以更改这个名称,但最后生成的文件中会有一个标注,以表明这个 bean 与相应的数据库表工件之间的映射。

      对于这个例子,将这个名称改为 MyEmployee 。于是,生成的标注为:

      @Table(name="EMPLOYEE", schema="DB2ADMIN")
      

    • Generate annotated-method interface for table : 这将导致生成一个 Interface 文件,该文件包含数据库 Create/Update/Delete/Insert 方法。这些方法实际上为前面 1.0 小节描述的数据库行的对象化提供了便利。当构建项目时,还会生成该接口的一个默认的实现,其中包含所有需要的 SQL 语句。注意,默认的接口名称也是可以更改的。
    • Generate test class for annotated-method interface for table :这将导致生成一个特殊的类,这个类可用于对 bean 接口进行单元测试。这个测试类的名称可以更改。
    • Generate test class for Inline-method style : 这将导致生成一个包含显式的内联 SQL 语句的文件,默认情况下,这些 SQL 语句将被生成为接口实现的方法。通过一个简化的 API,可以以一致的方式使用 SQL 来查询各个数据源。可以对应用程序进行配置,使其静态地运行数据库 SQL,而不会影响编程或用户体验。测试类的名称也可以修改。
    • 注意,无论出现上述哪一种情况,都可以通过选择 Generate JUnit test cases 复选框,请求系统自动生成一组 JUnit 测试实例。
    • Include Connection information and user name :该选项可以将连接字符串和用户名包括在所有生成的测试类中。
  4. 指定如何定义生成的 bean 变量。

    在该向导的第二个页面(如图 7 所示),可以指定生成 public 还是 protected 字段,是否包含 public 访问方法。



    图 7. 定义 bean 字段
    定义 bean 字段


    还可以更改 bean 变量的名称(默认情况下,bean 变量的名称与 Employee 表列的名称相同)。注意,对于变量名与其所映射的列的名称不相同的每个变量,会生成一个专门的标注。标注的格式如下所示:

    @Column(name="name of the table column")
    

    该标注被放在变量声明之前。例如,在这个例子中,将 Bean 字段名称 firstnme 改为 firstnme_new 。于是,Java 文件中生成的、放在声明之前的标注为:
    @Column(name="FIRSTNME") protected string firstnme_new
    

    对于其他所有不同于表列名的变量名也是如此(见 图 9 )。

    对于这个例子,确保选中 Protected Fields with Public accessor methods 。还可以将变量类型改为与其映射的列数据的类型不相同的类型。

  5. 指定所生成的 SQL 语句的风格。

    在该向导的最后一个页面中(见图 8),可以选择生成不同风格的 SQL 语句。对于这个例子,选择 Generate all SQL statements



    图 8. 生成不同风格的 SQL 语句
    生成不同风格的 SQL 语句


  6. 单击 Finish 生成 pureQuery 代码。

单击 Finish 按钮时,该向导除了生成以下 5 个完成 pureQuery 对象化过程 小节中描述的 DDO 过程的主要文件以外,还生成一个实用包。我们来看看生成的工件有哪些:

  • 构成对象层次的文件
    1. MyEmployee.java (见图 9):这是主 bean 类。这个类包含一些变量及其相应的访问方法,这些变量与 Employee 表中的列存在 1 对 1 的映射。

      图 9. 表示 Employee 表的 Java bean 类
      表示 Employee 表的 Java bean 类

      要查看放大后的图像,请单击 这里

    2. MyEmployeeData.java (见图 10):这是抽象数据库访问层的文件,用于数据查询和操纵。它包含一些抽象方法,实现这些方法的惟一目的是在底层表上执行 CRUD 操作。

      图 10. 包含用于 CRUD 操作的接口的 MyEmployeeData.java
      包含用于 CRUD 操作的接口的 MyEmployeeData.java

      要查看放大后的图像,请单击 这里

    3. MyEmployeeDataImpl.java (见图 11):这是前面提到的 MyEmployeeData 接口的默认实现。该实现包含封装所有用于数据访问和操纵的 SQL 语句的方法。

      请注意: 该文件当且仅当项目构建时生成。可以通过从主 Eclipse IDE 菜单中设置 Build Automaticallyoption of the Project 来构建项目,或者由开发人员手动构建项目。



      图 11. 包含接口方法实现的类
      包含接口方法实现的类

      要查看放大后的图像,请单击 这里

    4. MyEmployeeDataTest.java (见图 12):这是由 pureQuery 系统生成的默认类,这个类可用于单元测试。它包含一个 static main 函数,该函数实际上用于测试实现类(即 MyEmployeeDataTest.java)中所有方法的运行。

      图 12. 生成的类可用于单元测试
      生成的类可用于单元测试

      要查看放大后的图像,请单击 这里

    5. MyEmployeeInLineSample.java (见图 13):当且仅当 Generate Sample Class With Inline method call syntax 选项被选中时,才会生成该文件。实际上,这将通过 pureQuery 的运行时 API 使用内联风格的方法调用测试所有生成的 SQL 语句。

      图 13. 自动生成的测试类可以内联运行生成的 SQL 语句
      自动生成的测试类可以内联运行生成的 SQL 语句

      要查看放大后的图像,请单击 这里

  • 实用包

    除了前一小节提到的那些文件以外,pureQuery 系统还生成一个实用包,其中包含一个名为 SampleUtil.java 的文件(见图 14)。该文件包含很多常见的静态实用函数(例如获取连接、打印等),例如,生成的测试类(即 MyEmployeeDataTest.java)可以使用这些函数打印输出结果,以及创建底层数据库连接。



    图 14. 自动生成的示例类包含很多常见的静态实用函数
    自动生成的示例类包含很多常见的静态实用函数

    要查看放大后的图像,请单击 这里

 




回页首


查询驱动的对象化(QDO)案例场景

给定一个或多个 SQL 语句,通过 pureQuery 可以直观地为关系数据访问层自动创建对象层次。下面的逐步讲解将演示 pureQuery 仅根据给定的 SQL 语句创建对象模型的功能。

  1. 打开 DDO 案例场景 小节中创建的 Eclipse Java Personnel 项目。
  2. 在项目中添加一个新的 Java 文件,并在其 Main 方法中包括以下 SQL 语句:
    SELECT BIRTHDATE, BONUS, COMM, EDLEVEL, EMPNO, FIRSTNME, HIREDATE, JOB, LASTNAME, 
    MIDINIT, PHONENO, SALARY, SEX, WORKDEPT from EMPLOYEE
    

  3. 在 SQL 语句中的任何位置单击鼠标右键,从弹出的上下文菜单中选择 pureQuery Assist -> Generate SQL Bean 选项。这将打开 Create Bean for a SQL Result Set 向导。

    图 15. 根据 SQL 语句创建 bean
    根据 SQL 语句创建 bean

    要查看放大后的图像,请单击 这里

  4. 在第一个页面中,为生成的 Bean 类指定一个名称。对于这个例子,输入 “MySQLEmployee” 并单击 Next 按钮。

    图 16. 指定根据 SQL 语句生成的 Bean 类的名称
    指定根据 SQL 语句生成的 Bean 类的名称


  5. 在该向导的第二个页面中,可以指定如何定义 bean 字段。对于这个例子,可以保留默认值。还可以将变量类型改为与它所映射的列的数据类型不同的类型(见图 17)。

    图 17. 指定 bean 字段
    指定 bean 字段


  6. 单击 Finish 按钮。这将生成 bean 文件 MySQLEmployee.Java。

为了创建接口和默认实现类,可以像下一小节描述的那样使用 pureQuery 的 ORM 过程。

 




回页首


对象-关系映射(ORM)案例场景

给定一个 Java bean 类,通过 pureQuery 可以直观地将该类的成员映射为底层数据库表中的任何给定的关系实体。

注意需要根据表模式和相关规则 来进行设计时映射。例如,虽然在运行时可以将 double 类型的变量映射到 XML 类型的表列,但是这可能导致不可预测的运行时结果,并因此而产生错误。下面的例子演示了这种映射。

  1. 打开 DDO 例子 中创建的 Eclipse Java Personnel 项目。
  2. 为了演示 ORM 特性,可以使用一个已有的 bean,也可以使用表示数据库中某个表的 Java 用户定义类。在这个例子中,我们使用一个已有的 bean,所以删除 MyEmployee.Java 之外的所有生成的 Java 文件。

    图 18. 将一个 bean 映射到一个关系表
    将一个 bean 映射到一个关系表

    要查看放大后的图像,请单击 这里

  3. 在编辑器中打开 MyEmployee.Java 类,在类名的上面添加以下标注:
    @Table (name = "EMPLOYEE", Schema = "DB2ADMIN")

    该标注执行类名与底层数据库表之间的实际映射。

  4. 在要映射的每个字段/变量的上面添加以下注释。在这个例子中,我们只映射 BIRTHDAY 和 FIRSTNME 字段,因此在 BIRTHDAY 变量名之上添加
    @Column (name = "BIRTHDAY")

    ,在 FIRSTNME 变量名之上添加
    @Column (name = "FIRSTNME")

    (见图 19)。

    图 19. 标注创建主机变量与表列之间的映射
    标注创建主机变量与表列之间的映射

    要查看放大后的图像,请单击 这里

  5. 在编辑器中,在 MyEmployee 类中的任何地方单击鼠标右键,从弹出的上下文菜单中选择 pureQuery Assist -> Generate pureQuery CODE 选项。这将打开 Generate pureQuery Code for a Table 向导,该向导最终将生成相关的 pureQuery 代码(包括接口文件、测试类、实现代码等)。

注意,由于 Java bean 类已经存在,该向导的 Bean Field 页面被省略,没有提供给用户。

 




回页首


pureQuery 的内容辅助以及与 Java 编辑器的紧密集成

pureQuery 提供的最强大的一个特性是 SQL 与 Java 在同一个编辑器中的无缝集成。这种紧密集成为 Java 和 SQL 提供了一组相同的设计时特性,包括代码辅助、语法验证和着色,以及 SQL 语句的语义验证。

代码辅助提供:

 

  • SQL 语句完成(SQL statement completion ) 当输入 SELECT 之类的 SQL 关键字时,或者在期望一个操作符时,就会出现一个上下文窗口,其中显示用于完成语句的可能的方式。

    图 20. 语句完成
    语句完成

    要查看放大后的图像,请单击 这里

  • 内容辅助(Content Assist) 显示一组可能的实体名称,与一个给定的关系工件(例如一个表、模式等)相关,或者当需要在一个语句中指定参数时显示一组 Java 主机变量(见图 21 和 22)。

    图 21. 内容辅助
    内容辅助

    要查看放大后的图像,请单击 这里



    图 22. 主机变量内容辅助
    主机变量内容辅助

    要查看放大后的图像,请单击 这里

  • 快速修复(Quick Fix) 提供一种内联动态语法验证机制,通过这种机制可以检测并快速修复拼写错误之类的错误。

    图 23. 快速修复:Select 关键字被误拼为 Selct
    快速修复:Select 关键字被误拼为 Selct

    要查看放大后的图像,请单击 这里

  • 自动发现数据库定义 (见图 24 和 25),通过该特性,只需点击选择任何一个 bean 成员名称,就可以快速跳转到数据库浏览器中的数据库定义(例如,点击映射一个表名的类名就会跳转到数据库浏览器中的表节点,点击映射列名的变量名就会跳转 到数据库浏览器中的列节点,依此类推)。

    图 24. 点击选择 bean 类中的成员名称
    击选择 bean 类中的成员名称

    要查看放大后的图像,请单击 这里



    图 25. 点击选择将跳转到数据库浏览器
    点击选择将跳转到数据库浏览器

    要查看放大后的图像,请单击 这里

 




回页首


设计与运行时联合

pureQuery 的设计时功能当中最优越的一个特性是它能在编辑器中动态地运行任何给定的 SQL 语句。这个独特的特性使得在设计时能够动态执行 SQL 语句并允许回滚。

在 Java 编辑器中,要查看这个特性,只需在任何生成的 SQL 语句上单击鼠标右键。从上下文菜单中选择 pureQuery Assist -> Run SQL (见图 26)。 这将执行该 SQL 语句,并在 Eclipse IDE 的 Data View 中显示结果集(见图 27)。


图 26. 在设计时通过点击选择运行 SQL
在设计时通过点击选择运行 SQL

要查看放大后的图像,请单击 这里


图 27. Data View 中显示在设计时执行 SQL 的结果
Data View 中显示在设计时执行 SQL 的结果

要查看放大后的图像,请单击 这里

分享到:
评论

相关推荐

    IBM_软件产品清单

    根据提供的IBM软件产品清单及其描述,我们可以总结出以下关键知识点: ### 1. IBM Passport Advantage Program IBM的Passport Advantage计划是一种为客户提供软件许可、支持和技术服务的方式。在这个列表中,所有的...

    dnSpy-net-win32-222.zip

    dnSpy-net-win32-222.zip

    和美乡村城乡融合发展数字化解决方案.docx

    和美乡村城乡融合发展数字化解决方案.docx

    如何看待“适度宽松”的货币政策.pdf

    如何看待“适度宽松”的货币政策.pdf

    C#连接sap NCO组件 X64版

    NCO 3.0.18 64位

    法码滋.exe法码滋2.exe法码滋3.exe

    法码滋.exe法码滋2.exe法码滋3.exe

    基于MATLAB的导航科学计算库

    * GPS IMU经典15维ESKF松组合 * VRU/AHRS姿态融合算法 * 捷联惯导速度位置姿态解算例子 * UWB IMU紧组合融合 * 每个例子自带数据集

    毕业设计Jupyter Notebook基于深度网络的垃圾识别与分类算法研究项目源代码,用PyTorch框架中的transforms方法对数据进行预处理操作,后经过多次调参实验,对比不同模型分类效果

    在现代社会生活与生产活动下,不可避免的会产生巨量且多样的垃圾。我国的人口和经济总量均位居世界前列,因此,必然面临着庞大数量的垃圾处理的难题。如何通过人工智能来对垃圾进行有效分类,成为当前备受关注的研究热点。本文为展开基于深度网络的垃圾识别与分类算法研究,先使用PyTorch框架中的transforms方法对数据进行预处理操作,后经过多次调参实验,对比朴素贝叶斯模型、Keras卷积神经网络模型、ResNeXt101模型的垃圾分类效果。确定最佳分类模型是ResNeXt101,该模型在GPU环境下的分类准确率达到了94.7%。最后利用postman软件来测试API接口,完成图片的在线预测。在微信开发者工具的基础上,利用一些天行数据的垃圾分类的API接口再结合最佳模型的API接口,开发出了一个垃圾分类微信小程序。本文的研究内容丰富和完善了垃圾图像分类的相关研究,也为后续的研究提供了一定的参考价值。

    C#上位机开发与工控通讯实战课程

    一、上位机简介   在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互 串口转WIFI(ESP8266)—— 上位机和下位机基于TCP/IP协议通过以太网或者WIFI传输数据 串口转蓝牙(HC-06)—— 不多用,暂不介绍   Windows上位机(EXE可执行程序),最早用VB语言开发,后来由于C++的发展,采用MFC开发,近几年,微软发布了基于.NET框架的面向对象语言C#,更加稳定安全,再配合微软强大的VS进行开发,效率奇高。   本文使用Visual Studio 2022作为开发环境,上位机开发主要有WPF框架与Winform框架,他们都是基于.NET框架 WPF需要C/S基础,使用XAML来构建应用UI,界面比较美观,但是内存开销大 Winform可以使用窗口控件来构建应用,比较简单易学 二、开发环境设置 1. 安装Visual Studio 首先,确保你已经

    course_s4_ALINX_ZYNQ_MPSoC开发平台Linux驱动教程V1.04.pdf

    course_s4_ALINX_ZYNQ_MPSoC开发平台Linux驱动教程V1.04.pdf

    基于JavaWeb的毕业季旅游一站式定制服务平台_88z1j4jp_208-wx-(1).zip

    基于JavaWeb的毕业季旅游一站式定制服务平台_88z1j4jp_208-wx-(1).zip

    数据恢复软件 Apeaksoft Data Recovery for Mac v1.6.16

    Apeaksoft Data Recovery for Mac v1.6.16

    cms测试练习项目(linux系统部署)

    cms测试练习项目(linux系统部署),可以用来进行python的测试练手项目

    大学录取结果数据集,大学录取结果分析数据,大学录取因素分析

    数据集简介:大学录取结果分析 概述 大学录取结果数据集包含了有关大学录取过程的信息,包括关键变量,可用于分析不同学术因素与申请者是否被录取之间的关系。该数据集非常适合进行探索性数据分析、训练预测模型以及研究影响录取决策的因素。 数据集列描述 admit:指示申请者是否被录取(1=被录取,0=未录取)。 paes:申请者在高等教育能力测试(PAES)中获得的分数。 nem:中学教育成绩平均分,评分范围从1.0到7.0。 rank:申请者在其班级中的排名,数值越低表示排名越好。 数据集目的 本数据集旨在让用户探索学术指标(如PAES分数、GPA和排名)与大学录取成功率之间的关系。这可以用于: 开发预测模型:基于学术表现预测录取可能性。 识别趋势:找出影响录取的关键学术因素。 生成可视化图表:理解分数分布及录取结果的关系。 数据集规模 记录数:1813条。 列数:5列。

    STM32F427+rtthread下的bootload 网口(webclient)+串口(ymodem)传输,代码无质量,谨慎使用

    STM32F427+rtthread下的bootload 网口(webclient)+串口(ymodem)传输,代码无质量,谨慎使用

    电影院购票-JAVA-基于springBoot的电影院购票系统设计与实现(毕业论文)

    1. 用户管理功能 用户注册与登录:用户可以通过手机号、邮箱等方式注册账户,并且可以通过账号登录系统进行购票、查看历史订单等操作。 个人信息管理:用户可以查看和修改个人信息(如姓名、手机号、邮箱等),并进行密码重置等操作。 实名认证:部分电影院购票系统要求用户进行实名认证,确保用户身份的真实性。 2. 电影信息展示功能 电影排片查询:用户可以查看当前和未来一段时间内的电影排片表,包括电影名称、上映时间、影片时长、类型、导演、演员等详细信息。 电影详情页:点击具体电影后,用户可以查看电影的详细信息,如剧情介绍、影评、评分、预告片等内容。 电影评分与评论:用户可以查看其他观众的评分和评论,也可以对已观看的电影进行评分和评论。 3. 座位选择与预定功能 影厅座位图:系统展示每场次的影厅座位图,用户可以通过座位图查看当前座位的状态(如可选、已选、已售出、VIP座位等)。 座位选择:用户可以选择自己喜欢的座位,系统会实时更新座位的可用状态,避免重复选择。 座位偏好设置:用户可以设置自己的座位偏好,如选择前排、中排或后排,靠窗或靠过道等。 4. 电影票购买与支付功能 票价展示:系统会展示每个座位的

    Bukkit-BETA1.8.1服务端核心

    Bukkit-BETA1.8.1服务端核心

    快速排序在Go中的高效实现与应用

    内容概要:本文详细介绍了快速排序算法的原理和在Go语言中的高效实现方法。首先解释了快速排序的基本思想和实现步骤,接着提供了Go语言中实现快速排序的核心代码,并讨论了性能优化策略。最后,通过具体的应用场景实例,展示了快速排序在实际项目中的高效应用。 适合人群:具备一定编程基础,特别是对Go语言感兴趣的开发人员。 使用场景及目标:①理解快速排序算法的基本原理和分治策略;②学习如何在Go语言中高效实现快速排序;③掌握快速排序在实际项目中的应用实例。 阅读建议:本文不仅详细讲解了快速排序的原理,还提供了具体的实现代码和优化策略,建议读者在阅读过程中尝试实现和调试代码,以便更好地理解和掌握相关知识点。

    java毕设项目之学生社团管理系统+vue(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件,均测试可正常运行 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7

    NSMethodNotImplementedException如何解决.md

    NSMethodNotImplementedException如何解决

Global site tag (gtag.js) - Google Analytics