AppFramework1.0数据库访问组件使用说明(二)入门

【工业软件开发学习——AnyCAD篇】模式(Schema)、组件(Component)与参数化对象(Part II) 基于AnyCAD实现属性修改与关联更新 阅读详情
 

2.1 安装

1.1.1  软件环境

要求已安装如下软件:

1、       安装了.Net Framework 2.0

2、       安装了Visual Studio 2005

3、       如果要访问MSAccess数据库,需安装了MDAC(1.7以上版本)

4、       如果要访问Oracle数据库,需安装了ODP.NET

专业的开发人员一般都知道如何获取和安装MDAC和ODP.NET,所以本文不再累赘。

1.1.2  准备

解压缩AppFramework.DBAccess.rar压缩包,得到如下目录结构:

1.1.3  安装CodeGenPlogin工具

执行Tools/AppFramework.Tools.CodeGenPluginSetup.msi:

按向导提示完成安装。

1.1.4  复制AppFramework到项目目录下

把AppFramework目录复制到您解决方案目录或子目录下任意位置,方便项目引用到程序集。如果解决方案里已经存在AppFramework的其它组件,可以覆盖之。

1.2  添加引用

假设解决方案目录结构如下:

其中AppFramework是将要引用的程序集目录。在IDE解决方案资源管理器项目节点的引用上打开右键菜单,选择添加,浏览到AppFramework目录,选中AppFramework.Data.dll 和 AppFramework.DBAccess.dll,点击“确定”。例如:

1.3  添加配置文件

从安装包里复制Config目录:

粘贴到解决方案里的项目节点下:

 

完成后,将会看到Config目录下有三个文件:

注意,不要修改Config目录名字和位置,DAOManager类默认从应用程序启动目录的Config子目录下加载DBAccess.config配置文件。

1.3.1  配置DBAccess.config文件

第一、配置文件内容

DBAccess.config作用是集中定义程序中用到的数据库连接串。在IDE解决方案资源管理器双击“DBAccess.config”,看到如下信息:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <DataSource

    Name="IMS"

DBType="SQLServer" DBVersion="8.0"

Default="true"

ConnectionString="Data Source=./SQL2005;Initial Catalog=IMS;User ID=IMSUser;Password=12345678" />

</configuration>

其中,

Name:表示数据源标识,可以随意取名,在程序中对应到DBSessionManager.Default.GetSession(string dataSourceName)方法的dataSourceName参数。

DBType:数据库类型标识,只允许为SQLServer, Oracle, Access三种。

DBVersion:数据库的版本号,目前只有DBType为SQLServer才有用,8.0表示SQLServer2005,其他表示SQLServer2005以下的版本。

Default:表示默认的数据库连接,如果设置Default=”true”,则DBSessionManager.Default.GetSession()会默认创建此数据库连接。

ConnectionString:数据库连接串,不同类型的数据库有不同的写法,不同数据库的DataSouce配置可以参考如下:

(1) SQLServer

<DataSource

         Name=" IMS "

           DBType=" SQLServer "

          DBVersion="8.0"

           ConnectionString=" Data Source=./SQL2005;Initial Catalog=IMS;User ID=IMSUser;Password=12345678"

/>

 

(2) Oracle

<DataSource

                  Name="IMS"

                   DBType="Oracle"

        DBVersion="9.0.14"

                   ConnectionString="Data Source=IMSDB;User ID=IMSUser;Password=12345678"

         />

(3) Access

<DataSource

         Name="IMS"

           DBType="Access"

          DBVersion=""

           ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMS.mdb;Jet OLEDB:Database Password=12345678;Persist Security Info=False"

/>

第二、设置文件属性

在IDE解决方案资源管理器选中“DBAccess.config”,在IDE对象属性窗设置“复制到输出目录”为“始终复制”:

1.3.2  配置CodeGenPlugin.config文件

第一、配置文件内容

因为代码生成器要实时连接到数据库获取表结构并生成实体类和访问类与接口,所以CodeGenPlugin.config作用是配置代码生成器使用的数据库连接串、配置生成代码的保存位置。对每个“Xxx.DaoGen”结尾的文件,代码生成器会生成三个文件:

1、 XxxModel.cs:包含各种实体类

2、 XxxDAOInterface.cs:包含各种DAO的接口

3、 XxxDao.cs:包含各种DAO类,实现了XxxDAOInterface.cs里所定义的接口。

 

默认情况下,这三个文件生成在同一目录下。如果代码用到三层结构,这三个文件应该分属不同的项目,那么可以通过配置“CodeGenPlugin.config”,指定XxxModel.cs、XxxDAOInterface.cs在IDE解决方案资源管理里的保存位置。而XxxDao.cs的生成位置无法配置,只能固定在与Xxx.DaoGen文件同一目录下。

 

在IDE解决方案资源管理器双击“CodeGenPlugin.config”,看到如下信息:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <DataSource

         Name=" IMS "

           DBType=" SQLServer "

          DBVersion="8.0"

           ConnectionString=" Data Source=./SQL2005;Initial Catalog=IMS;User ID=IMSUser;Password=12345678"

  />

  <SavePath

    Model=" Demo/GeneratedCode"

    DAOInterface=" Demo/GenefatedCode"

   />

</configuration>

      其中<DataSource>节与DBAccess.config的<DataSource>节语法完全相同。<SavePath>则定义了Model空间下和DAOInterface空间下生成代码的保存路径。路径的格式为:

      项目名称/项目目录1/项目目录2/.../项目目录n、

      例如本例的:Demo/GeneratedCode

     

第二、设置文件属性

在IDE解决方案资源管理器选中“CodeGenPlugin.config”,在IDE对象属性窗设置“复制到输出目录”为“不复制”:

1.3.3  添加.DaoGen文件

Xxx.DaoGen文件作用是配置ORMap信息,用于生成数据表实体和对应的DAO类和接口。特别注意:Xxx.DaoGen文件所在的目录下必须有一个CodeGenPlugin.config文件。程序中可以有多个.DaoGen文件,对于每个.DaoGen文件,代码生成器都会生成三个.cs文件:

1、 XxxModel.cs:包含各种实体类

2、 XxxDAOInterface.cs:包含各种DAO的接口

3、 XxxDao.cs:包含各种DAO类,实现了XxxDAOInterface.cs里所定义的接口。

 

默认情况下,这三个文件生成在同一目录下。如果代码用到三层结构,这三个文件应该分属不同的项目,那么可以通过配置“CodeGenPlugin.config”实现把文件保存到不同的项目下(具体请参考上一节)。

 

第一、配置文件内容

在例子中,双击IDE解决方案资源管理器上的“Sample.DaoGen”结点打开文件,可以看到如下信息:

 

<?xml version="1.0" encoding="gb2312" ?>

<Map>

  <Head

    Namespace="Demo"

    Using=""

    >

    <Description>

      Type: Table(默认), View, SQL

      TableName: 表或视图名,如果Type为SQL, TableName 表示 SQL 的 Alias

      CSharpTableName: 对应到 CSharp 代码里的表名

      PrimaryKey: 主键,格式 XX|XX|XX

      InheritedTableName: 表示表之间的继承关系,从哪个表继承,其值是某个 MapItem 的 TableName

      ReadOnly: false 或 true,true 表示只生成查询方法, 默认:false

    </Description>

  </Head>

 

  <MapItem TableName="BAS_User" PrimaryKey="ID">

    <statement id="GetBasUserList">

       <dynamic prepend="dept_id in (select id from BAS_Dept where" append=")" seprator="or">

        <isNotNull property="DeptName"> name like #DeptName# </isNotNull>

        <isNotNull property="CreatedTimeBegin"> created_time >= #CreatedTimeBegin# </isNotNull>

      </dynamic>

    </statement>

 

    <statement id="GetBasUserList1">

      <dynamic prepend="" seperator="and">

        <isNotNull property="ID"><![CDATA[ID < #ID# ]]> </isNotNull>

        <isNotNull property="Name">Name like #Name# </isNotNull>

      </dynamic>

    </statement>

   

  </MapItem>

  <MapItem TableName="BAS_Dict" PrimaryKey="ID" />

  <MapItem Type="View" TableName="BAS_User_V" PrimaryKey="ID" InheritedTableName="BAS_User" />

 

  <statement id="GetUserAgeAvg">

    <!-- 获取(某个部门下)人员的平均年龄 -->

    select avg(a.age) from (

      select age from bas_user

      <dynamic prepend="where dept_id in (" append=")" seperator="and">

        <isNotNull property="Names">select id from bas_dept where Name in ($Names$)</isNotNull>       

      </dynamic>

    ) a

  </statement> 

</Map>

DaoGen文件详细的语法请参考下一节。

 

第二、设置文件属性

在IDE解决方案资源管理器选中“Xxx.DaoGen”,在IDE对象属性窗设置“复制到输出目录”为“不复制”,并把“自定义工具”设置为“CodeGenPlugin”:

注意,一定要事先在CodeGenPlugin.config的<DataSource>节里配置好数据库连接,否则无法连接数据库久无法生成代码,IDE还会报告类似如下错误信息:

1.4  编写.DaoGen文件

1.4.1  生成代码的结构

对于每个Yyy.DaoGen文件,代码生成器都会生成三个.cs文件、三个命名空间:

文件名

命名空间

类

YyyModel.cs

___.Model

包含表的元数据类、各种实体类及其接口,例如Yyy、YyyParam、IYyy、IYyyParam、YyyDef;

YyyDAOInterface.cs

___.Access.Interface

包含各种DAO的接口;

Yyy.cs

___.Access

包含各种DAO类和DAOFactory类,实现YyyDAOInterface.cs里所定义的接口。

三个文件的依赖关系为:

 

YyyModel.cs

AppFramework.DBAccess.dll

YyyDAOInterface.cs

AppFramework.Data.dll

Yyy.cs

  

代码生成的类可以直观地表示为下图:

数据库

Yyy表

Yyy实体

 

YyyParam实体

IYyy接口

IYyyParam接口

YyyDef元数据

YyyDAO

YyyDAOFactory

IYyyDAO接口

Zzz表

 

 

  


1.4.2  生成代码的功能

类名

功能说明

YyyDef元数据

 

提供了Yyy表的名称、Yyy表的字段列表、Yyy表的主键字段名等等定义在.DaoGen中的映射信息,共程序使用,避免了对表名、字段名硬编码。

Yyy实体

用于映射查询语句返回的记录。

YyyParam实体

用于提供插入和更新记录的数据。

IYyy接口

描述Yyy实体的接口,提高代码的集成能力。

IYyyParam接口

描述YyyParam实体的接口,提高代码的集成能力。

IYyyDAO

描述YyyDAO的接口,提高代码的集成能力。

YyyDAO

封装了Yyy表进行增删改查功能。

YyyDAOFactory

构造YyyDAO的工厂类。

 

1.4.3  最简单的.DaoGen文件

大部分情况下我们都只会用到最简单的几种标签。一个最简单的.DaoGen文件内容如下:

<?xml version="1.0" encoding="gb2312" ?>

<Map>

  <Head Namespace="Demo" >

    <Description>

        一个最简单的.DaoGen文件

    </Description>

  </Head>

  <MapItem TableName="BAS_User" PrimaryKey="ID" />

  <MapItem TableName="BAS_Dict" PrimaryKey="ID" />

</Map>

 

在这个例子里,只需要关注以下几个节点或属性:

节点

属性

说明

Head

Namespace

制定生成代码的命名空间前缀。例如设置为“Demo”,则将得到三个命名空间:

(1) Demo.Model

(2) Demo.Access

(3) Demo.Access.Interface

MapItem

TableName

指定数据库中的表名。例如输入“BAS_User”,则得到BasUser、BasUserDAO、BasUserDAOFactory、BasUserDef、BasUserParam、IBasUser、IBasUserParam、IBasUserDAO等若干个类。

 

PrimaryKey

指定主键字段名,一般都是单主键,且默认名字为“ID”。如果表的主键名正好是“ID”,此属性可以不填写。如果有多个字段组成联合主键,字段名间用“|”符号间隔。

 

从上例,我们可以生成BAS_User和BAS_Dict两张表的实体类、DAO类。

1.4.4  代码生成

在IDE解决方案资源管理器.DaoGen文件节点上右键菜单里点击“运行自定义工具”,或在IDE编辑器打开.DaoGen文件再保存,都会触发代码生成器插件生成代码:

 

根据CodeGenPlugin.config里<SavePath>节点设置,生成的Model和DAOInterface文件被保存到Demo项目的GeneratedCode目录下,而DAO文件则以子项的方式存放在Sample.DaoGen节点下:

 

(1)Sample.cs:

/*

下列代码由 [代码生成器 V1.0] 生成

时间:2007-08-12 17:57:21

*/

using System;

using System.Data;

using System.Collections;

using System.Collections.Generic;

using System.Collections.Specialized;

using System.Text;

 

using AppFramework.Data;

 

 

using AppFramework.DBAccess;

 

using Demo.Model;

 

using Demo.Access.Interface;

 

/// <summary>

/// 此命名空间下的类或接口由代码生成器生成

/// </summary>

namespace Demo.Access

{

    /// <summary>

    /// BAS_User 的数据访问类,处理字段包括:

    /// ID,Name,En_Name,Password,Dept_ID,Org_ID,Employee_No,Email,State,Creator_ID,Created_Time,Updated_By,Updated_Time,Age

    /// </summary>

    public class BasUserDAO : DAOBase, IBasUserDAO

    {

……

 

 

(2)SampleDAOInterface.cs:

/*

下列代码由 [代码生成器 V1.0] 生成

时间:2007-08-12 17:57:21

*/

using System;

using System.Data;

using System.Collections;

using System.Collections.Generic;

using System.Collections.Specialized;

using System.Text;

 

using AppFramework.Data;

 

 

using AppFramework.DBAccess;

 

using Demo.Model;

 

/// <summary>

/// 此命名空间下的类或接口由代码生成器生成

/// </summary>

namespace Demo.Access.Interface

{

    /// <summary>

    /// BAS_User 的数据访问类接口,处理字段包括:

    /// ID,Name,En_Name,Password,Dept_ID,Org_ID,Employee_No,Email,State,Creator_ID,Created_Time,Updated_By,Updated_Time,Age

    /// </summary>

    public interface IBasUserDAO : IDAOBase, IBasUserFactory, IBasUserParamFactory

{

……

 

 

(3)SampleModel.cs:

/*

下列代码由 [代码生成器 V1.0] 生成

时间:2007-05-12 17:57:21

*/

using System;

using System.Data;

using System.Collections;

using System.Collections.Generic;

using System.Collections.Specialized;

using System.Text;

 

using AppFramework.Data;

 

 

/// <summary>

/// 此命名空间下的类或接口由代码生成器生成

/// </summary>

namespace Demo.Model

{

    /// <summary>

    /// BAS_User 表实体类接口,处理字段包括:

    /// ID,Name,En_Name,Password,Dept_ID,Org_ID,Employee_No,Email,State,Creator_ID,Created_Time,Updated_By,Updated_Time,Age

    /// </summary>

    public interface IBasUser : IInfoBase

{

……

上述代码只列出片段,具体情况可以查看示例程序。

1.5  编写简单的程序

1.5.1  相关类的关系图

有两个基础类,一个是DAOManager,可以获得IXxxDAO接口;另一个是IDBSession,从DBSessionManager.GetSession()获得。IXxxDAO的大部分数据库访问方法都要依赖IDBSession来实现。

1.5.2  引用

引用DLL:

AppFramework.Data.dll

AppFramework.DBAccess.dll

 

引用命名空间:

using AppFramework.Data;

using AppFramework.DBAccess;

 

using Xxx.Model;

using Xxx.Access.Interface;

1.5.3  插入一个实体

// 构造用户信息参数类

IBasUserParam user = new BasUserParam();

user.Name.Value = "MyBasName";

user.EnName.Value = "EnMyBasName" ;

user.CreatorID.Value = 0;

user.DeptID.Value = 100;

user.Email.Value = "Email";

user.EmployeeNo.Value = "EmployeeNO" ;

user.OrgID.Value = 0;

user.Password.Value = "Password";

user.State.Value = 0;

user.UpdatedBy.Value = 0;

user.Age.Value = 25;

 

// 获得dao

IBasUserDAO dao = DAOManager.Default.GetDAO<IBasUserDAO>();

// 获得数据库会话

using (IDBSession session = DBSessionManager.Default.GetSession())

{

    dao.Insert(session, user); // 插入数据库

}

 

// 获得新记录的ID

int id = user.ID.Value;

1.5.4  根据主键获取一个实体

public BasUser Get(string fields, int id)

{

    // 获得dao

    IBasUserDAO dao = DAOManager.Default.GetDAO<IBasUserDAO>();

    // 获得数据库会话

    using (IDBSession session = DBSessionManager.Default.GetSession())

    {

        return dao.Get(session, fields, id);//返回得到的实体,如果未找到记录,返回null

    }

}

1.5.5  根据主键更新一个实体

// 构造用户信息参数类

IBasUserParam user = new BasUserParam();

user.ID.Value = 100;// 设置要更新记录的主键值

user.Name.Value = "MyBasName";

user.EnName.Value = "EnMyBasName" ;

user.CreatorID.Value = 0;

user.DeptID.Value = 100;

user.Email.Value = "Email";

user.EmployeeNo.Value = "EmployeeNO" ;

user.OrgID.Value = 0;

user.Password.Value = "Password";

user.State.Value = 0;

user.UpdatedBy.Value = 0;

user.Age.Value = 25;

 

// 获得dao

IBasUserDAO dao = DAOManager.Default.GetDAO<IBasUserDAO>();

// 获得数据库会话

using (IDBSession session = DBSessionManager.Default.GetSession())

{

    return dao.Update(session, user); // 更新记录,返回真实更新的记录数

}

 

1.5.6  根据主键删除一个实体

public int DeleteUser(int id)

{

    // 获得dao

    IBasUserDAO dao = DAOManager.Default.GetDAO<IBasUserDAO>();

    // 获得数据库会话

    using (IDBSession session = DBSessionManager.Default.GetSession())

    {

        return dao.Delete(session, id); // 根据id删除记录,返回真实删除的记录数

    }

}

1.5.7  查询实体集

假设界面上有三个查询条件,如下所示:

 

 

点击“查找”按钮后执行查询,代码如下:

 

QueryFilter filter = new QueryFilter();

 

filter.AddString(BasUserDef.Name_FieldName, txtUserName.Text, QueryFuzzyType.RightFuzzy);

filter.AddDateRangeBegin(BasUserDef.UpdatedTime_FieldName, beginDate.Text);

filter.AddDateRangeEnd(BasUserDef.UpdatedTime_FieldName, endDate.Text);

 

string fields = “ID, Name, Updated_Time”;

string orderBy = “ID asc”;

 

// 获得dao

IBasUserDAO dao = DAOManager.Default.GetDAO<IBasUserDAO>();

// 获得数据库会话

using (IDBSession session = DBSessionManager.Default.GetSession())

{

    ObjectTable<BasUser> users = dao.SelectList(session, fields, filter, orderBy); // 执行查询,获得结果集

}

 

其中关键的一个类是:QueryFilter,通过它可以拼装出几乎所有可能的查询逻辑。具体可以参考“精通”篇相关内容。

1.5.8  事务处理

有关数据库事务的IDBSession方法如下所示:

// 摘要:

//     开始新事务,重复执行此操作只会增加嵌套级别但不出错。

void BeginTran();

//

// 摘要:

//     以 level 事务级别开始新事务,重复执行此操作只会增加嵌套级别但不出错。

void BeginTran(IsolationLevel level);

//

// 摘要:

//     提交事务,若有事务嵌套,则只在最外层才提交。如果事务尚未打开则抛出 TransactionNotBeginException。

void CommitTran();

//

// 摘要:

//     如果已启动事务,无论嵌套多少级别回滚整个事务,重复调用也不出错。

void RollbackTran();

 

例子:

// 获得数据库会话

using (IDBSession session = DBSessionManager.Default.GetSession())

{

    try

    {

        session.BeginTran();

        dao.Update(session, user);

        dao.Delete(session, 100);

        ……

        session.ComminTran();

}

catch (Exception e)

{

    session.RollbackTran();

}

}

 

Debian 9下手工部署Nextcloud 18:LAMP深度调优与安全加固指南 Nextcloud 是开源私有云的核心平台,其本质是基于 PHP 的 Web 应用服务,依赖 LAMP(Linux-Apache-MySQL-PHP)技术栈实现文件同步、协作办公与数据自治。理解其运行原理需掌握 Apache MPM 模式切换、PHP-FPM 进程管理、OPcache 缓存机制及 MariaDB 字符集配置等底层知识。这类传统部署方式虽步骤较多,但具备极高的可审计性、安全可控性和长期稳定性,特别适合教育机构、中小团队及边缘服务器等对数据主权和运维透明度要求严格的场景。本文聚焦 Debian 阅读详情

相关推荐

Ubuntu 18.04 搭建 ownCloud 私有云盘全指南

私有云盘是企业与个人实现数据自主可控的核心基础设施,其本质是基于 Web 服务架构的文件同步与共享系统。原理上依赖 LAMP(Linux-Apache-MySQL-PHP)栈协同工作,需精确匹配组件版本、字符集(如 utf8mb4)、缓存机制(OPcache/APCu)及安全策略(trusted_domains、HTTPS 强制)。技术价值在于规避公有云风险、满足等保合规、支持离线协作与细粒度权限管控。典型应用场景包括中小企业文档中心、家庭 NAS Web 化管理、教育机构资源分发及 Linux 运维实训环

weixin_30791095的博客 481

AppFramework通用数据库访问组件之来龙去脉

  一、起因AppFramework,名字起得是有点大 。我的原始目标是做个全面的企业应用程序框架,内容涵盖B/S、C/S结构,从UI到DA,其功能应该覆盖大部分 ApplicationBlocks 所包含的功能。整体思路还是采用拿来主义,从开源软件提取精华,组织装配出成熟好用的框架。但是数据访问无疑是最基础、最关键的问题,涉及到性能、稳定性、易用性、开发效率等诸多问题。在这方面,

框架提高生产力 1745

AppFramework数据库访问组件_V1.2.rar

修改了 V1.1/V1.0 的代码生成bug:当主键是字符串类型时,生成重复的DAO方法导致编译失败。修改了 TextParameter 类名为 TextField 保持命名风格统一。扩展了 IParamBase,增加了发个方法,使用起来跟方便,便于开发底层通用代码。

在android应用上直接访问数据库

今天突然想在Android的应用上直接访问mysql数据库,结果还是遇到一些困难,所以和大家分享下。虽然不提倡把在前端直接访问数据库,因为安全性太差了,什么都暴露在外面的。

zhang_d_t的博客 5260

纽贝尔门禁软件

纽贝尔门禁软件 门禁IP搜索软件 CHD805AT智能门禁控制器说明书

单片机毕业设计-基于STM32单片机的智能镜系统-仿真设计

可通过MQ-2监测当前烟雾浓度可通过温湿度传感器监测当前温湿度可通过光照强度传感器监测光照强度可通过蜂鸣器进行烟雾报警可通过语音识别模块进行反馈播报状态可通过按键设置阈值三个继电器控制灯、加湿、风扇标签:STM32单片机、OLED112864、DHT11、BH1750、继电器、SU-03T、MQ-2、蜂鸣器题目扩展:智能家居安防、智能大棚控制系统、智能环境检测系统项目编号:ZL-32-240604-FZ。

bsdog11的博客 966

AppFramework1.0数据库访问组件使用说明(六)QueryFilter的使用

 1.1  QueryFilter的使用QueryFilter是AppFramework提供的一个功能强大、不需要编写SQL语句、跨数据库、参数化、执行性能优异的查询条件构造器。有了QueryFilter我们不需要再拼装SQL语句,不用再担心单引号导致SQL注入的安全漏洞,不用担心被众多的AND、OR、NOT等逻辑运算符弄得晕头转向,不用区分处理TO_DATE、UPPER等无法跨数据库的表

框架提高生产力 5312

人工智能100问☞第5问:什么是AI三要素?

人工智能的核心三要素是​​数据、算法和算力​​,分别作为AI的“燃料”、“大脑”和“动力”,三者协同驱动智能系统的学习、推理与决策能力。

bjdx_001的博客 1991

AppFramework1.0数据库访问组件使用说明(四)基础数据类型

 1.1  基础数据类型1.1.1  有关DBValue 为了规避IBatisNet的空值问题,AppFramework不使用C#基本类型来构造实体类。AppFramework对C#基本类型作了简单封装,增加了一个是否有值的属性来标志字段值是否非空。每一种基本的C#类型都有对应的DBValue对其进行封装。

框架提高生产力 1399

数通基础(基本网络通信原理、IP地址如何配置、DHCP、DNS域名系统、路由技术基础、静态路由 、TCP和UDP、vlan虚拟局域网、trunk、三层交换)

我们知道了1、电脑开机,通过dhcp获取ip地址2、电脑输入域名,www.baidu.com电脑把www.baidu.com发到自己的dns服务器3、dns服务器把域名解析成对应的ip地址4、电脑向百度服务器发送一个请求。

qq_53235556的博客 6475

SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models

大型语言模型(LLM)被认为是推进智能教育的一项关键技术,因为它们展示了深入理解教学场景和为学生提供个性化指导的潜力。然而,当前个性化教学中基于LLM的应用主要遵循“问答”范式,学生被动地获得答案和解释。在本文中,我们提出了苏格拉底式教学模式(SocraticLM ),它实现了一种苏格拉底式的“发人深省”的教学范式,实现了真正的课堂教师的角色,让学生积极参与到真正掌握解决问题所需的思考过程中。

weixin_43961909的博客 2882

AppFramework1.0数据库访问组件使用说明(一)引言

   1  概述1.1  引言约有90%的企业信息化管理系统基于数据库实现,这类系统中又有超过30%的代码集中在数据访问层负责业务数据存取。除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有:1、    提供简单易用的数据库访问方法,

框架提高生产力 2177

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

AppFramework1.0数据库访问组件使用说明(八)DAO类的使用

 1.1  DAO类的使用在AppFramework里DAO类可以由代码生成工具自动生成,开发者只需要通过DAO类基本上就可以完成大部分增删查改业务,一些特殊的业务如果无法用DAO实现,则可以通过SqlMap结合IDBSession来实现。DAO主要处理三类对象:1、       表:生成的代码有增删改查等方法;2、       视图:生成的代码有查询方法;3、      

框架提高生产力 1409

windows下宝塔安装教程

windows下宝塔安装教程 目录宝塔是什么?宝塔安装流程1.下载2.配置3.登录4.安装的环境套件小结 宝塔是什么? 宝塔是管理服务器的免费的软件,宝塔上面可以进行对你的服务器批量进行管理,对于运维人员来说还是必不可少的一个软件,值得使用。 宝塔安装流程 1.下载 链接: https://download.bt.cn/win/panel/BtSoft.zip 下载后安装买最好自定义目录,方便找 2.配置 下载完成后会出现这个页面,对着页面进行配置 点击默认密码复制进来,这里注意一点就是一定要查看

你在看屏幕的同时,屏幕也在注视着你 4422

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1898

AppFramework1.0数据库访问组件使用说明(五)IDBSession使用详解

 1.1  IDBSession使用详解IDBSession负责与数据库打交道,它通过ADO.NET实现几种常用数据库的连接。目前支持3种数据库:SQLServer(7.0、2000、2005三个版本,推荐2005)、ORACLE(8.1.7以上,推荐9i)、MSAccess(需要MDAC1.7以上支持)。与IDBSession有关的关系图如下:       

框架提高生产力 2444

CAN 通信测试工具 canutils

概述 CAN,Controller Area Network,控制器局域网,一种高可靠性的现场总线。广泛用于汽车电子、工业控制通信。 canutils 工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。这几个程序的功能简述如下: canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。 candump...

一个软件工程师的技术笔记 1万+

AppFramework1.0数据库访问组件使用说明(七)SqlTemplate与SqlMap的使用

 1.1  SqlTemplate与SqlMap的使用1.1.1  SqlTemplate原理在早期做过报表系统开发的都知道,众多的查询条件和复杂的统计逻辑都直接硬编码在程序里,程序代码与SQL代码交织在一起,程序文件变得冗长杂乱,时间久了就变得难以维护。SqlTemplate是AppFramework提供的一种可视化、结构化的动态SQL语法,其代码为XML格式,从程序中剥离出来编写在

框架提高生产力 1711

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

用 AppFramework 替换 Discuz!NT 的数据库访问层

(一)分析DIscuz!NT 支持2种数据源,SqlServer和MSAccess,但其数据库访问层实际上已经支持了 MySQL,只是安装程序还未提供基于 MySQL  的。 Discuz!NT采用了"页面类 -> 业务类 -> 数据库访问类 -> DbHelper -> 数据库"这样的分层方式。数据库访问类有1个大接口3个大实现。所谓大接口就是 IDataProvider 接口,定义了9

框架提高生产力 2289

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

AppFramework1.0数据库访问组件使用说明(三)配置文件详解

  1.1  配置文件详解1.1.1  在DBAccess.config配置多个数据源如果应用系统规模较大,有可能会使用多个数据源。AppFramework支持多个数据源,配置方法是在DBAccess.config里配置多个节点,并给每个数据源命名不同的名称。注意,为了提高性能,应该把最常用的数据源设置为默认数据源,在DataSource节点里把Default属性设置值为true,例如

框架提高生产力 1456

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

用AppFramework重写Discuz数据访问层源代码

下载地址:http://download.csdn.net/source/331414 修改的地方主要有:1)在解决方案里增加了“Discuz.Data.AppFramework”项目2)AppFramework插件生成的代码放在“Discuz.Data.AppFramework”项目的GenerateCode目录下3)对论坛管理的数据访问类源代码ForumManage.cs做了重

框架提高生产力 2311

凌驾于数据库之上的数据静态缓存技术思考和范例

    一个性能良好的系统,数据的读、写、查、删、改效率至关重要,其中读和查更是重中之重,本篇将以一个简单的实例来探索与数据库无关的数据静态缓存技术。所谓与数据库无关,就是无论存储数据库是何种类型,这个缓存技术都是适用的,要实现这样的数据库无关性,我们需要在数据访问层动刀,及将数据访问层进一步细分为数据库访问中间件层-数据缓存层-数据访问层,其中:    数据库访问中间件层负责与物理数据库打交

liveweb的专栏 1016

java lzma解压_lzma-java

相关开源项目DWR NetBeans plugin:DWR NetBeans pluginCapivara:Capivara是一个文件同步(FileSync)管理器,支持SFTP与FTP服务器.纯Java开发,支持Linux与Windows系统.Jeppers:Jeppers是一个基于Web的Java电子表格.它同时也提供一个用在Swing应用程序的LGPL Grid组件.GWTChismes:G...

weixin_34175388的博客 459

10分钟学会使用mybatis

pipeliner/src/main/java/com/age/sale/dao/SqlMapConfig.xml 数据库配置文件:(这里配置了,tomcat的server.xml就不用配了)

ouyida3的专栏 819
上一篇: AppFramework通用数据库访问组件之来龙去脉
下一篇: AppFramework1.0数据库访问组件使用说明(三)配置文件详解
AppFramework
博客等级 码龄19年 61粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值