C# 使用NHibernate连接MySQL实现数据的增删改查
使用 NHibernate 连接 MySQL 并实现数据的增删改查操作是一个非常典型的场景。以下是一个简单的示例,演示了如何配置 NHibernate 与 MySQL 连接并进行基本的 CRUD 操作。
目录
步骤 1: 安装必要的包
步骤 2: 配置 NHibernate
配置文件方式
代码方式
步骤 3: 定义实体类和映射
实体类
映射文件
步骤 4: CRUD 操作
步骤 1: 安装必要的包
首先,需要安装 NHibernate 和 MySQL 数据库驱动程序。在你的项目中,可以使用 NuGet 来安装这些包。打开 NuGet 包管理器控制台并运行以下命令:
Install-Package NHibernate
Install-Package MySql.Data
步骤 2: 配置 NHibernate
接下来,配置 NHibernate。我们需要创建一个 NHibernate 配置文件或通过代码配置 NHibernate。
配置文件方式
创建一个 hibernate.cfg.xml 文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"><session-factory><property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property><property name="dialect">NHibernate.Dialect.MySQLDialect</property><property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property><property name="connection.connection_string">Server=localhost;Database=test;User Id=root;Password=password;</property><property name="show_sql">true</property></session-factory>
</hibernate-configuration>
代码方式
也可以通过代码配置 NHibernate,如下所示:
var configuration = new Configuration();
configuration.DataBaseIntegration(db =>
{db.ConnectionString = "Server=localhost;Database=test;User Id=root;Password=password;";db.Dialect<NHibernate.Dialect.MySQLDialect>();db.Driver<NHibernate.Driver.MySqlDataDriver>();db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;db.SchemaAction = SchemaAutoAction.Update;
});
步骤 3: 定义实体类和映射
定义一个简单的实体类和它的映射文件。
实体类
public class Person
{public virtual int Id { get; set; }public virtual string Name { get; set; }public virtual int Age { get; set; }
}
映射文件
创建一个 Person.hbm.xml 文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="YourNamespace" assembly="YourAssembly"><class name="Person" table="Persons"><id name="Id" column="id"><generator class="identity" /></id><property name="Name" column="name" /><property name="Age" column="age" /></class>
</hibernate-mapping>
步骤 4: CRUD 操作
配置好 NHibernate 后,就可以进行数据的增删改查操作了。
public class Program
{private static ISessionFactory sessionFactory;static void Main(string[] args){var configuration = new Configuration();configuration.Configure(); // 配置文件方式configuration.AddAssembly(typeof(Person).Assembly); // 加载映射文件sessionFactory = configuration.BuildSessionFactory();using (var session = sessionFactory.OpenSession())using (var transaction = session.BeginTransaction()){// 创建var person = new Person { Name = "John Doe", Age = 30 };session.Save(person);// 读取var retrievedPerson = session.Get<Person>(person.Id);Console.WriteLine($"Retrieved Person: {retrievedPerson.Name}, {retrievedPerson.Age}");// 更新retrievedPerson.Age = 31;session.Update(retrievedPerson);// 删除session.Delete(retrievedPerson);transaction.Commit();}}
}
数据库表脚本:
CREATE TABLE `person` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(255) DEFAULT NULL COMMENT '姓名',`age` int(11) DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
相关文章:
C# 使用NHibernate连接MySQL实现数据的增删改查
使用 NHibernate 连接 MySQL 并实现数据的增删改查操作是一个非常典型的场景。以下是一个简单的示例,演示了如何配置 NHibernate 与 MySQL 连接并进行基本的 CRUD 操作。 目录 步骤 1: 安装必要的包 步骤 2: 配置 NHibernate 配置文件方式 代码方式 步骤 3: 定…...
IDEA2024.2重磅发布,更新完有4G!
JetBrains 今天宣布了其 IDE 家族版本之 2024.2 更新,其亮点是新 UI 现在已是默认设置,并且对 AI Assistant (AI助手)进行了几项改进。 安装密道 新 UI 的设计更加简约,可以根据需要以视觉方式扩展复杂功能。值得开发…...
QWT+Qt Creator+MSVC的配置与使用
目录 一、介绍 二、QWT下载 三、QWT编译 3.1 设置构建套件 3.2 修改QWT相关文件 3.3 进行QWT编译 四、QWT配置 4.1 配置QWT的lib文件 4.2 配置QWT的dll文件 4.3 配置QWT的designer的dll文件 五、代码实验 一、介绍 QWT,全称是Qt Widgets for Technical…...
Netty高性能数据结构
文章目录 Netty高性能数据结构FastThreadLocalHashedWheelTimer时间轮Mpsc无锁队列 Netty高性能数据结构 Netty 用高性能数据结构的主要目的是为了提高网络通信的效率和系统的整体性能。 所谓的高性能数据结构是指,那些在特定场景下优化了性能和效率的数据结构&am…...
关于百度、微软语音合成的实现案例
关键词 自助机产品、排队呼叫功能、网络喇叭、百度语音合成SDK、微软TTS 阅读建议 对自助机产品功能扩展感兴趣的读者、需要实现远程语音呼叫功能的开发者、想要了解网络喇叭选型及其使用的技术人员、对百度语音合成SDK和微软TTS感兴趣的开发者 阅读时长 预计阅读时长…...
二叉树:镜像树,子结构,二叉树转链表,二叉树的倒数K个数,对称,Z型打印
1.把一棵二叉树转换为它的镜像树。 void mirror_tree(TreeNode *root) {if(rootNULL) return ;TreeNode *temproot->right;root->rightroot->left;root->lefttemp;mirror_tree(root->right);mirror_tree(root->left);}2、输入两棵二叉树A,B&…...
瑞秋,詹妮弗·安妮斯顿多年来与本·阿弗莱克保持着“调情”友谊 又一个詹妮弗
尽管所有迹象都表明本阿弗莱克和詹妮弗洛佩兹的婚姻即将走向离婚,但他尚未公开评论此事。不过,好莱坞圈内人士已经纷纷将他与另一位名人联系起来。事实上,是另一位詹妮弗。 一位消息人士向媒体透露,詹妮弗安妮斯顿和阿弗莱克一直都很有默契——无论是在银幕上还是在银幕外…...
指纹失效,忘记iPhone屏幕解锁密码怎么应对?
为保证手机的安全及隐私,我们会给手机设置屏幕锁屏密码,通过输入设置密码来解锁手机屏幕锁,但为了给大家提供快速便捷的解锁方式,苹果公司提供了指纹解锁,不仅解锁更便捷了还极大地增强了设备的安全性。但有时我们手指…...
09.XSS跨站脚本攻击(超详细!!!)
1、什么是XSS XSS(跨站脚本攻击):攻击者利用这个漏洞将恶意脚本注入到网页中,当其它用户浏览这些页面时,恶意脚本会在用户的浏览器中执行。XSS攻击允许攻击者在用户的浏览器上执行脚本,从而可能获取用户的…...
讲解人工智能在现代科技中的应用和未来发展趋势-水文
人工智能(Artificial Intelligence,简称AI)是一种模拟人类智能的科技领域,它通过计算机模拟人类的思维、学习、推理和决策能力,以便解决复杂的问题。近年来,人工智能技术的发展取得了惊人的进展,…...
2.2 QT 环境配置
2.2 QT环境配置 QT是一个1991年由QT Company开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序,也可以用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器&…...
2.类和对象(上)
1. 类的定义 1.1 类定义格式 • class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; (类和结构体非常像&#…...
【实际案例】服务器宕机情况分析及处理建议
了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理机 外网/私有网络/无网络 私有网络 处理器: Kunpeng 920 内存: 4 TiB BIOS版…...
Linux系统之ncdu命令的基本使用
Linux系统之ncdu命令的基本使用 一、ncdu命令命令介绍1.1 ncdu简介1.2 ncdu特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统镜像源3.4 更新软件列表 四、安装ncdu工具4.1 安装ncdu软件4.2 n…...
STM32L051K8U6-HAL-LED闪烁设计
HAL三步法: 1、配置下载线 2、配置晶振 3、配置时钟 注意:中断优先级(这里防止HAL_Delay卡死,详细请看 http://t.csdnimg.cn/NQhQV) 4、 配置灯引脚属性为输出模式。并设置标签为LED 生成代码:编写while里…...
记一次远程API调用失败
记一次远程API调用失败 最近开发忙,项目紧,系统出现一些忽隐忽现的问题,本地也不能复现,当时也无法理解,就先搁置了,现在回想起来,这里还是明智的。 这个bug很神奇 今天,原本好好的…...
【力扣】746.使用最小花费爬楼梯
题目描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例…...
06:【stm32】中断一:NVIC的配置
中断 1、中断的简介1.1、什么是中断1.2、为什么需要中断 2、中断的优先级2.1、中断优先级的表示方法 3、NVIC3.1、什么的NVIC3.2、NVIC的内部结构3.3、中断向量表3.4、程序实现①开启中断源②配置NVIC③中断响应函数 1、中断的简介 1.1、什么是中断 正在进行的事务被突发事件打…...
Flutter简介
Flutter是一个由Google开发的开源移动UI框架,它允许开发者使用Dart语言来构建高性能、高保真的iOS和Android应用。Flutter的设计理念是"编写一次,到处运行"(write once, run everywhere),这意味着开发者可以…...
WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一
一、产品概况 对讲机市场是一个技术成熟且具有广泛应用前景的市场。对讲机作为无线通信设备的一种,在许多不同的领域和业务中发挥着重要作用。从技术发展角度来看,对讲机经历了从模拟到数字的转型,以及从简单通信工具向多功能设备的演进。当…...
2025最权威的五大AI科研网站解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 毕业论文写作领域里人工智能技术的应用,带来了好多积极影响,明显提高…...
proteus新手福音:用快马平台轻松生成第一个电路仿真项目
作为一个刚接触电子电路设计的萌新,第一次打开Proteus时真的被满屏的英文界面和密密麻麻的元件库吓到了。直到发现了InsCode(快马)平台,用自然语言描述就能生成完整的仿真项目,简直是新手救星!下面分享我的第一个LED闪烁电路仿真实…...
保姆级教程:在Ubuntu 20.04上从零搭建宇树Go1机器狗的ROS仿真环境(含Gazebo避坑)
从零构建宇树Go1机器狗的ROS仿真环境:Ubuntu 20.04全流程指南 当四足机器人从实验室走向消费市场,宇树科技的Go1凭借其灵活动作和开源生态迅速成为开发者新宠。但第一次打开Gazebo看到机器狗瘫倒在地时,多数新手都会陷入手足无措的境地——依…...
终极指南:3分钟解锁百度网盘SVIP下载特权,让下载速度飙升70倍!
终极指南:3分钟解锁百度网盘SVIP下载特权,让下载速度飙升70倍! 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在…...
【优化设计】基于人工蜂群算法机械设计优化附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
从原生UI到插件化框架:RAGENativeUI在GTA模组开发中的架构重构
从原生UI到插件化框架:RAGENativeUI在GTA模组开发中的架构重构 【免费下载链接】RAGENativeUI 项目地址: https://gitcode.com/gh_mirrors/ra/RAGENativeUI 在Grand Theft Auto V模组开发领域,界面系统长期面临着原生集成度低、性能开销大、开发…...
AI辅助开发:探索快马AI生成智能命令提示与分析的下一代终端工具
今天想和大家分享一个有趣的开发实践:如何用前端技术模拟实现一个具备AI辅助功能的智能命令行终端Web应用。这个项目的灵感来源于日常开发中频繁使用终端工具时遇到的痛点,比如记不住复杂命令、报错信息难以理解等问题。 基础终端界面搭建 首先需要创建一…...
基于Docker和Jellyfin打造全能家庭媒体中心(支持电影、音乐、电子书一站式管理)
1. 为什么选择DockerJellyfin方案 最近两年我测试过市面上几乎所有主流媒体服务器方案,最终发现DockerJellyfin的组合最能满足家庭多媒体需求。先说几个真实痛点:以前用Plex时电子书管理需要额外安装Calibre-web,Emby的电子书插件经常崩溃&am…...
ADI AD5940阻抗测量板初体验:从GitHub源码下载到IAR工程编译的完整避坑指南
ADI AD5940阻抗测量开发板实战:从源码获取到工程编译的深度避坑手册 第一次接触ADI的AD5940阻抗测量开发板时,那种既兴奋又忐忑的心情至今记忆犹新。作为一款专为生物阻抗测量设计的高精度前端芯片,AD5940在医疗穿戴设备、体脂分析等领域有着…...
UE5回放系统避坑指南:解决ReplaySystem在蓝图项目中的常见崩溃与Bug
UE5回放系统深度排雷手册:蓝图项目中的崩溃预防与高阶调试技巧 当你第一次在UE5中成功录制并回放角色动作时,那种成就感无与伦比。但很快,奇怪的崩溃、无法解释的画面冻结、以及幽灵般的抗锯齿异常就会接踵而至。这些不是你的代码问题——而是…...
