作者:Le-麦兜_738 | 来源:互联网 | 2024-12-02 12:53
### 定义接口的优势
1. **清晰的方法视图**:通过接口可以清晰地看到需要实现哪些方法,便于理解和维护。
2. **灵活的实现切换**:接口允许不同的实现类,使得系统更加灵活,易于扩展和测试。
### 项目结构
项目通常包含三个主要文件夹:
- **Model**:存放实体类,每个类对应数据库中的一张表。
- **Mappings**:存放映射文件,用于将实体类的属性与数据库表的列进行关联。
- **Manager**:存放接口及其实现类,负责业务逻辑的实现。
#### Model 文件夹
在 `Model` 文件夹中,每个类对应数据库中的一张表。例如,`Unity` 类对应 `unity` 表。
```csharp
using System;
namespace NBOWeb.Model {
public class Unity {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int Age { get; set; }
public virtual int WorkAge { get; set; }
}
}
```
#### Mappings 文件夹
在 `Mappings` 文件夹中,每个映射文件对应一个实体类,确保类的属性与数据库表的列正确对应。
```xml
assembly="NBOWeb"
namespace="NBOWeb.Model">
```
#### Manager 文件夹
在 `Manager` 文件夹中,定义了接口和其实现类,负责业务逻辑的实现。
##### 接口定义
```csharp
using System.Collections.Generic;
using NBOWeb.Model;
namespace NBOWeb.Manager {
public interface IUnityManager {
void Add(Unity unity);
void Update(Unity unity);
void Remove(Unity unity);
Unity GetById(int id);
Unity GetByName(string name);
ICollection
GetAllUnityCollection();
bool VerifyUnity(string name, int age);
}
}
```
##### 接口实现
```csharp
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using NBOWeb.Model;
namespace NBOWeb.Manager {
public class UnityManager : IUnityManager {
public void Add(Unity unity) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Save(unity);
transaction.Commit();
}
}
}
public ICollection GetAllUnityCollection() {
using (ISession session = NHibernateHelper.OpenSession()) {
return session.CreateCriteria(typeof(Unity)).List();
}
}
public Unity GetById(int id) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
return session.Get(id);
}
}
}
public Unity GetByName(string name) {
using (ISession session = NHibernateHelper.OpenSession()) {
return session.CreateCriteria(typeof(Unity))
.Add(Restrictions.Eq("Name", name))
.UniqueResult();
}
}
public void Remove(Unity unity) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Delete(unity);
transaction.Commit();
}
}
}
public void Update(Unity unity) {
using (ISession session = NHibernateHelper.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(unity);
transaction.Commit();
}
}
}
public bool VerifyUnity(string name, int age) {
using (ISession session = NHibernateHelper.OpenSession()) {
Unity unity = session.CreateCriteria(typeof(Unity))
.Add(Restrictions.Eq("Name", name))
.Add(Restrictions.Eq("Age", age))
.UniqueResult();
return unity != null;
}
}
}
}
```
### NHibernateHelper 类
`NHibernateHelper` 类负责管理会话工厂的创建和打开会话。
```csharp
using NHibernate;
using NHibernate.Cfg;
namespace NBOWeb {
public class NHibernateHelper {
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory {
get {
if (_sessiOnFactory== null) {
var cOnfiguration= new Configuration();
configuration.Configure();
configuration.AddAssembly("NBOWeb");
_sessiOnFactory= configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
}
}
```
### 总体运行示例
下面是一个简单的示例,展示如何使用 `IUnityManager` 接口进行数据操作。
```csharp
using System;
using System.Collections.Generic;
using NHibernate;
using NBOWeb.Model;
using NBOWeb.Manager;
namespace MySql_StudyTest {
class Program {
static void Main(string[] args) {
IUnityManager unityManager = new UnityManager();
Console.WriteLine(unityManager.VerifyUnity("juhnko", 30));
Console.ReadKey();
}
}
}
```
通过上述代码,我们可以看到如何利用 NHibernate 和接口来管理和操作数据库中的数据。