前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[NewLife.XCode]增删改查入门

[NewLife.XCode]增删改查入门

作者头像
大石头
发布于 2019-05-24 12:28:44
发布于 2019-05-24 12:28:44
83900
代码可运行
举报
文章被收录于专栏:智能大石头智能大石头
运行总次数:0
代码可运行

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。

开源地址:https://github.com/NewLifeX/X (求star, 620+)

增删改查入门

新建控制台项目(.NET Core),从nuget引用NewLife.XCode,(也可以从别的项目引用下载后拷贝XCode.dll和NewLife.Core.dll来使用,区分nfx和netcore版本),敲入以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 启用控制台日志
XTrace.UseConsole();

// 添加
var user = new UserX
{
    Name = "大石头",
    Enable = true
};
user.Insert();
// 自增字段user.ID已经取得值
XTrace.WriteLine("用户ID:{0}", user.ID);

// 查询
var user2 = UserX.Find(UserX._.Name == "大石头");

// 更新
user2.Logins++;
user2.LastLogin = DateTime.Now;
user2.Update();

// 删除
var user3 = UserX.FindByID(user.ID);
user3.Delete();

Console.ReadLine();

先跑起来看看效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Software: ConsoleApp4
#ProcessID: 21252 x64
#AppDomain: ConsoleApp4
#FileName: C:\Program Files\dotnet\dotnet.exe
#BaseDirectory: D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\
#CommandLine: D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\ConsoleApp4.dll
#ApplicationType: Console
#CLR: 4.0.30319.42000, 
#OS: Microsoft Windows NT 6.2.9200.0, X3/Stone
#CPU: 8
#GC: IsServerGC=False, LatencyMode=Interactive
#Date: 2019-02-25
#字段: 时间 线程ID 线程池Y网页W普通N 线程名 消息内容
#Fields: Time ThreadID IsPoolThread ThreadName Message
22:57:13.089  1 N - NewLife.Core v8.0.2019.0101 Build 2019-01-26 23:22:36 
22:57:13.104  1 N - 新生命X组件核心库 ©2002-2019 新生命开发团队
22:57:13.114  1 N - ConsoleApp4 v1.0.0.0 Build 2000-01-01 
22:57:13.115  1 N - ConsoleApp4 
22:57:13.115  1 N - Setting的配置文件Config\Core.config 不存在,准备用默认配置覆盖!
22:57:13.277  1 N - Setting的配置文件Config\XCode.config 不存在,准备用默认配置覆盖!
22:57:13.282  1 N - XCode v9.10.2019.0101 Build 2019-01-26 23:22:38 
22:57:13.282  1 N - 数据中间件 ©2002-2019 新生命开发团队
22:57:13.628  1 N - 自动为[Membership]设置SQLite连接字符串:Data Source=.\Membership.db;Migration=On
22:57:13.652  1 N - System.Data.SQLite.dll不存在或平台版本不正确,准备联网获取 http://x.newlifex.com/
22:57:13.835  1 N - 下载链接 http://x.newlifex.com/,目标 System.Data.SQLite.win-x64,System.Data.SQLite.win,System.Data.SQLite.st,System.Data.SQLite
22:57:13.964  4 Y 1 WebClientX.Get http://x.newlifex.com/
22:57:15.660  1 N - 分析得到文件 System.Data.SQLite.win-x64_20180823112512.zip,准备下载 http://x.newlifex.com/System.Data.SQLite.win-x64_20180823112512.zip
22:57:15.663  4 Y 19 WebClientX.Get http://x.newlifex.com/System.Data.SQLite.win-x64_20180823112512.zip
22:57:16.897  1 N - 下载完成,共924,475字节,耗时1,232毫秒
22:57:16.897  1 N - 解压缩到 D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Plugins
22:57:17.074  1 N - TypeX.GetType("System.Data.SQLite.SQLiteFactory") => Plugins\System.Data.SQLite.dll
22:57:17.074  1 N - System.Data.SQLite驱动D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Plugins\System.Data.SQLite.dll 版本v1.0.109.0
22:57:17.145  1 N - Data Source=D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Membership.db;Cache Size=-524288;Synchronous=Off;Journal Mode=WAL
22:57:17.154  4 Y 198 检查实体XCode.Membership.UserX的数据表架构,模式:CheckTableWhenFirstUse
22:57:17.160  4 Y 198 创建数据库:Membership
22:57:17.161  4 Y 198 创建数据库:D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Membership.db
22:57:17.181  4 Y 198 select * from sqlite_master
22:57:17.284  4 Y 198 创建表:User(用户)
22:57:17.298  4 Y 198 Create Table User(
    ID integer Primary Key AUTOINCREMENT,
    Name nvarchar(50) NOT NULL COLLATE NOCASE,
    Password nvarchar(50) NULL COLLATE NOCASE,
    DisplayName nvarchar(50) NULL COLLATE NOCASE,
    Sex int NOT NULL,
    Mail nvarchar(50) NULL COLLATE NOCASE,
    Mobile nvarchar(50) NULL COLLATE NOCASE,
    Code nvarchar(50) NULL COLLATE NOCASE,
    Avatar nvarchar(200) NULL COLLATE NOCASE,
    RoleID int NOT NULL,
    RoleIDs nvarchar(200) NULL COLLATE NOCASE,
    DepartmentID int NOT NULL,
    Online bit NOT NULL,
    Enab...etime NULL,
    LastLoginIP nvarchar(50) NULL COLLATE NOCASE,
    RegisterTime datetime NULL,
    RegisterIP nvarchar(50) NULL COLLATE NOCASE,
    Ex1 int NOT NULL,
    Ex2 int NOT NULL,
    Ex3 real NOT NULL,
    Ex4 nvarchar(50) NULL COLLATE NOCASE,
    Ex5 nvarchar(50) NULL COLLATE NOCASE,
    Ex6 nvarchar(50) NULL COLLATE NOCASE,
    UpdateUser nvarchar(50) NULL COLLATE NOCASE,
    UpdateUserID int NOT NULL,
    UpdateIP nvarchar(50) NULL COLLATE NOCASE,
    UpdateTime datetime NULL,
    Remark nvarchar(200) NULL COLLATE NOCASE
)
22:57:17.309  4 Y 198 Create Unique Index IU_User_Name On User (Name)
22:57:17.311  4 Y 198 Create Index IX_User_RoleID On User (RoleID)
22:57:17.312  4 Y 198 Create Index IX_User_UpdateTime On User (UpdateTime)
22:57:17.320  4 Y 198 UserX.Count 快速计算表记录数(非精确)[User/Membership] 参考值 -2
22:57:17.332  4 Y 198 开始检查连接[Membership/SQLite]的数据库架构……
22:57:17.355  4 Y 198 [Membership]的所有实体类(5个):Parameter,UserX,Menu,Role,Department
22:57:17.356  4 Y 198 [Membership]需要检查架构的实体类(1个):Parameter
22:57:17.357  4 Y 198 Membership待检查表架构的实体个数:1
22:57:17.358  4 Y 198 select * from sqlite_master
22:57:17.365  4 Y 198 创建表:Parameter(字典参数)
22:57:17.368  4 Y 198 Create Table Parameter(
    ID integer Primary Key AUTOINCREMENT,
    Category nvarchar(50) NULL COLLATE NOCASE,
    Name nvarchar(50) NULL COLLATE NOCASE,
    Value nvarchar(200) NULL COLLATE NOCASE,
    LongValue nvarchar(2000) NULL COLLATE NOCASE,
    Kind int NOT NULL,
    Enable bit NOT NULL,
    Ex1 int NOT NULL,
    Ex2 int NOT NULL,
    Ex3 real NOT NULL,
    Ex4 nvarchar(50) NULL COLLATE NOCASE,
    Ex5 nvarchar(50) NULL COLLATE NOCASE,
    Ex6 nvarchar(50) NULL COLLATE NOCASE,
    CreateUser nvarchar(50) NULL COLLATE NOCASE,
    CreateUserID int NOT NULL,
    CreateIP nvarchar(50) NULL COLLATE NOCASE,
    CreateTime datetime NULL,
    UpdateUser nvarchar(50) NULL COLLATE NOCASE,
    UpdateUserID int NOT NULL,
    UpdateIP nvarchar(50) NULL COLLATE NOCASE,
    UpdateTime datetime NULL,
    Remark nvarchar(200) NULL COLLATE NOCASE
)
22:57:17.369  4 Y 198 Create Unique Index IU_Parameter_Category_Name On Parameter (Category, Name)
22:57:17.370  4 Y 198 Create Index IX_Parameter_Name On Parameter (Name)
22:57:17.370  4 Y 198 Create Index IX_Parameter_UpdateTime On Parameter (UpdateTime)
22:57:17.372  4 Y 198 检查连接[Membership/SQLite]的数据库架构耗时38ms
22:57:17.383  4 Y 198 Select * From User Order By ID Desc limit 1
22:57:17.388  4 Y 198 Select Count(*) From User
22:57:17.398  4 Y 198 Select Count(*) From User
22:57:17.401  4 Y 198 开始初始化UserX用户数据……
22:57:17.455  4 Y 198 Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('admin', '21232F297A57A5A743894A0E4A801FC3', '管理员', 0, null, null, null, null, 1, '', 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.479  4 Y 198 自动为[Log]设置SQLite连接字符串:Data Source=.\Log.db;Migration=On
22:57:17.491  4 Y 198 Data Source=D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Log.db;Cache Size=-524288;Synchronous=Off;Journal Mode=WAL
22:57:17.514  4 Y 198 完成初始化UserX用户数据!
22:57:17.548  1 N - Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('大石头', null, null, 0, null, null, null, null, 0, null, 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.561  1 N - 用户ID2
22:57:17.574  1 N - Select * From User Where Name='大石头' Order By ID Desc limit 1
22:57:17.601  1 N - Update User Set Logins=Logins+1, LastLogin='2019-02-25 22:57:17' Where ID=2
22:57:17.613  1 N - Select * From User Order By ID Desc
22:57:17.620  1 N - Delete From User Where ID=2
22:57:18.519  6 Y 199 检查实体XCode.Membership.Log的数据表架构,模式:CheckTableWhenFirstUse
22:57:18.520  6 Y 199 创建数据库:Log
22:57:18.521  6 Y 199 创建数据库:D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Log.db
22:57:18.532  6 Y 199 创建表:Log(日志)
22:57:18.537  4 Y EQ 开始检查连接[Log/SQLite]的数据库架构……
22:57:18.555  4 Y EQ [Log]的所有实体类(3个):Log,UserOnline,VisitStat
22:57:18.555  4 Y EQ [Log]需要检查架构的实体类(2个):UserOnline,VisitStat
22:57:18.558  4 Y EQ Log待检查表架构的实体个数:2
22:57:18.559  4 Y EQ 创建表:UserOnline(用户在线)
22:57:18.561  4 Y EQ 创建表:VisitStat(访问统计)
22:57:18.564  4 Y EQ 检查连接[Log/SQLite]的数据库架构耗时24ms

这是前述代码的完整执行日志,这里我们不做过多分析。

日志大意是:自动配置SQLite数据库,下载平台要求的SQLite驱动,建库建表,增删改查

这里特别需要关注的是这几行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
22:57:17.548  1 N - Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('大石头', null, null, 0, null, null, null, null, 0, null, 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.561  1 N - 用户ID2
22:57:17.574  1 N - Select * From User Where Name='大石头' Order By ID Desc limit 1
22:57:17.601  1 N - Update User Set Logins=Logins+1, LastLogin='2019-02-25 22:57:17' Where ID=2
22:57:17.613  1 N - Select * From User Order By ID Desc
22:57:17.620  1 N - Delete From User Where ID=2

一句user.Insert,生成了一个Insert Into语句,并取得自增字段赋值给ID。

一个简单的Find单字段查找,通过user2.Update更新了两个字段,user3.Delete则删除了这行数据。

这就是一个完整的增删改查!

短短的一段代码,也许带给你许多疑问,这些疑问都将在后续文章中得到详细解答:

  • UserX类来自哪里?(XCode内置权限体系Membership)
  • 为何不需要配置数据库?(无配置时默认使用SQLite)
  • 下载了什么东西?(SQLite驱动分为.Net2.0/.Net4.0/.Net4.5等,还有.netstandard以及Linux版本之分,XCode根据平台自动下载正确版本)
  • 为何会自动建表?(这是XCode最为强大的反向工程,2008年开始支持,类似于EF后来的数据迁移
  • 自增ID。Insert后会即刻取回新插入的自增值
  • Logins=Logins+1。这叫做累加字段
  • UserX.FindByID为何生成不带where的Select查询?(UserX.FindByID内部带有实体缓存,并非简单的Find(ID==2))

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[NewLife.XCode]高级增删改
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.6K0
[NewLife.XCode]数据模型文件
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
8280
[NewLife.XCode]实体类详解
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.3K0
[NewLife.XCode]高级统计(数据报表利器)
NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2020)开发完成并维护至今,以下简称XCode。
大石头
2020/03/19
1.2K0
[NewLife.XCode]批量添删改操作(提升吞吐率)
NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2020)开发完成并维护至今,以下简称XCode。
大石头
2022/05/10
6250
QT5连接MySQL实现增删改查
实现代码 #include #include #include #include #include #include #include #include using namespace std; #include #include #include const char *kDbType = "QMYSQL"; // 数据库类型 const QString& kHost = "127.0.0.1"; // 数据库的ipd地址 const int kPort = 3306;
静谧星空TEL
2021/04/27
1.6K0
QT5连接MySQL实现增删改查
Mybatis由浅入深 - 02增删改查CRUD
这是Mybatis由浅入深的第2节,上文传送门:【Mybatis由浅入深 -01入门】
天罡gg
2022/12/02
7250
Mybatis由浅入深 - 02增删改查CRUD
[NewLife.XCode]角色权限
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/07/02
2.2K0
MySQL增删改查语句_MySQL comment
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说MySQL增删改查语句_MySQL comment,希望能够帮助大家进步!!!
Java架构师必看
2022/10/05
3.3K0
MySQL增删改查语句_MySQL comment
django-orm框架表单的增删改查
08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject django项目名称 pycharm就直接创建新project选择django 2.settings.py文件配置 1.需要在install_app中配置需要连接的app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth',
小小咸鱼YwY
2019/09/11
1.2K0
MyBatis 实战:增删改查入门
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
耕耘实录
2021/12/07
5600
商城项目整理(三)JDBC增删改查
商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABLE 2 ( 3 gid NUMBER not null, 4 gname VARCHAR2(90), 5 gdetails CLOB, 6 gpicture VARCHAR2(100), 7 gprice NUMBER, 8 gleixing NUMBER, 9 gpinpai VAR
二十三年蝉
2018/02/28
1.3K0
php实现带权限的增删改查功能
原生php实现简易的招聘网站:逻辑流程如下: 第一:boss能增删改查(招聘内容)。求职者只能看招聘内容.(权限的不同) 第二:不登录不能查看。必须登录某个账号才能查看. 第三:防止重复提交 防止输出空数据 第四:多用户的哦
贵哥的编程之路
2022/10/24
2.7K0
php实现带权限的增删改查功能
MySQL入门,问题不大【增删改查极速上手】
当你登录你的QQ账号和别人吹水的时候,当你期末交作业去度娘复制的时候,当你在工作中登录一些网站的时候,再比如当你查看自己几乎没有什么余额的银行卡的时候(捂脸),或许自己也没注意,(非需要,大部分人也不想注意哈哈哈)我们一直都在以某种方式与数据库打交道,或许你是一个开发人员,也或许你也只是一个普通的用户,数据库与我们的生活息息相关,作为一名程序员,现在学习 MySQL 和 Oracle 的会多一些,像微软的 SQL Server 以前配合 asp 的时候用的还是挺多的,不过现在就没那么流行了,
BWH_Steven
2020/06/03
7660
MongoDB增删改查操作
创建集合分为两步,-是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。
清出于兰
2022/01/05
6.2K0
MongoDB增删改查操作
JAVA增删改查XML文件
  最近总是需要进行xml的相关操作。   不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作。   读取XML配置文件   首先我们需要通过DocumentBuilderFactory获取xml文件的工厂实例。 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace(true);   创建文档对象
用户1154259
2018/01/17
1.5K0
JAVA增删改查XML文件
ado.net的简单数据库操作(三)——简单增删改查的实际应用
  上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦。
CherishTheYouth
2019/09/11
1.4K0
ado.net的简单数据库操作(三)——简单增删改查的实际应用
数据库的增删改查加遍历
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160891.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
8290
MyBatis 学习笔记(2) 增删改查
实际开发中,我们经常遇到“ 插入自增列的主键后,还想要获得主键的值”,我们可以使用 useGeneratedKeys="true" keyProperty="id" 来实现。
张云飞Vir
2021/07/08
2770
JDBC【1】-- 入门教程之增删改查
我的mysql是使用docker创建的,如果是windows环境可以使用wamp较为方便。
秦怀杂货店
2020/11/22
5960
JDBC【1】-- 入门教程之增删改查
相关推荐
[NewLife.XCode]高级增删改
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文