[Nhibernate]sqlite数据库基本使用
目录
写在前面
昨天有朋友问我在nhibernate中如何使用sqlite数据库,当时实在忙的不可开交,下周要去山西出差,实在没空,按我的说法使用sqlite跟使用sqlserver,本质上其实没啥区别,nhibernate的配置文件不同而已,而且在下载nhibernate的时候,他已经提供了针对不同的数据库的模版了。你只需在这基础上修改即可。
别人问到了,再加上即将的项目中需要用到sqlite数据库,就也趁着这股风总结一下,算是弄一个在nhibernate中使用sqlite的模版吧。
操作步骤
可视化工具:http://www.oschina.net/news/43608/5-popular-and-free-sqlite-management-tools
SqliteSpy:http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index
说到sqlite,得创建一个sqlite数据库啊,上面的工具,你可以选择一个用着顺手的工具使用,我这里就使用sqlitespy这个工具,新建一个shop数据库,新建一个userinfo的数据表。
下载sqlite的dll:http://www.sqlite.org/,或者使用Nuget安装
创建数据表的sql语句
create table UserInfo
(
ID int primary key not null,
UserName nvarchar(32),
Gender bit,
Age int,
Address nvarchar(128)
)
如图:
新建个测试用的项目,项目结构如图所示:
关于项目结构就不进行说明了,项目名称已经比较清楚了。
项目Wolfy.Data和Wolfy.UnitTest需要引用System.Data.SQLite.dll,并把SQLite.Interop.dll放在bin\debug下(因为这个dll是引用不了的)。
从下载的nhibernate中找到sqlite的数据库的配置模版
将名称修改为hibernate.cfg.xml,复制到单元测试项目下,并修改该文件的属性为始终复制,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.connection_string">
Data Source=nhibernate.db
</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
</session-factory>
</hibernate-configuration>
修改内容,使其使用于当前项目
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="sqlite_session">
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.connection_string">
Data Source=C:\Users\Wolfy\Desktop\SQLiteSpy_1.9.8\Shop.db3
</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
<mapping assembly="Wolfy.Domain"/>
</session-factory>
</hibernate-configuration>
注意,把不必要的注释去掉,避免不不要的麻烦。
通用NHibernateHelper类
测试用的持久化类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Wolfy.Domain.Entity
{
/// <summary>
/// 用户持久化类
/// </summary>
public class UserInfo
{
/// <summary>
/// 用户标识
/// </summary>
public virtual int ID { set; get; }
/// <summary>
/// 用户姓名
/// </summary>
public virtual string UserName { set; get; }
/// <summary>
/// 性别
/// </summary>
public virtual bool Gender { set; get; }
/// <summary>
/// 年龄
/// </summary>
public virtual int Age { set; get; }
/// <summary>
/// 住址
/// </summary>
public virtual string Address { set; get; }
}
}
对应的持久化类的映射文件,UserInfo.hbm.xml并修改其属性生成操作为“嵌入资源”
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Wolfy.Domain" namespace="Wolfy.Domain.Entity">
<class name="Wolfy.Domain.Entity.UserInfo,Wolfy.Domain" table="UserInfo">
<!--主键 如果没有设置值则默认为0-->
<id name="ID" type="Int32" unsaved-value="0">
<column name="ID" sql-type="int" not-null="true" unique="true"/>
<!--主键自增-->
<generator class="increment"></generator>
</id>
<property name="UserName" type="String">
<column name="UserName" sql-type="nvarchar" not-null="false"/>
</property>
<property name="Gender" type="Boolean">
<column name="Gender" sql-type="bit" not-null="false"></column>
</property>
<property name="Age" type="Int32">
<column name="Age" sql-type="int" not-null="false"></column>
</property>
<property name="Address" type="String">
<column name="Address" sql-type="nvarchar" not-null="false"/>
</property>
</class>
</hibernate-mapping>
在Wolfy.Data下添加类UserInfoData
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate.Cfg;
using NHibernate;
using Wolfy.Domain.Entity;
namespace Wolfy.Data
{
/// <summary>
/// 用户数据层操作
/// </summary>
public class UserInfoData
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
public bool AddUserInfo(UserInfo userInfo)
{
ISession session = NHibernateHelper.GetOcextSession();
using (ITransaction trans = session.BeginTransaction())
{
try
{
session.SaveOrUpdate(userInfo);
session.Flush();
trans.Commit();
return true;
}
catch (Exception)
{
trans.Rollback();
return false;
throw;
}
}
}
}
}
在单元测试项目下添加DataTest.cs进行单元测试,如下
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Wolfy.Domain.Entity;
using Wolfy.Data; namespace Wolfy.UnitTest
{
[TestClass]
public class DataTest
{
private UserInfoData _userInfoData;
public DataTest()
{
_userInfoData = new UserInfoData();
}
[TestMethod]
public void AddUserInfoTest()
{
bool result = _userInfoData.AddUserInfo(new UserInfo()
{
Address = "北京",
Age = ,
Gender = true,
UserName = "wolfy"
});
Assert.IsTrue(result);
}
}
}
添加一个用户wolfy,并断言结果为true,即添加成功,测试结果,使用sqlitespy工具查看sqlite数据库中的数据
关于查删改的操作类似,就不再进行测试了。
总结
弄一个sqlite数据库的配置,其实也没多大难度,关键还是nhibernate的配置文件,及持久化类的映射文件这块,你把这两个弄通了,其他的都好说,基本上类似,比如映射文件,你完全可以把内容复制到其他持久化类的映射文件中,并在这个基础上改吧改吧就是一个新的,关键还是第一步,你有没有走通。总结就到这里吧,你在使用的过程中,如果用到sqlite,可以将上面nhibernate配置文件和userinfo的映射文件作为模版,使用的时候,就在这基础上改吧改吧就行了。本文已加入Nhibernate系列:http://www.cnblogs.com/wolf-sun/p/4138918.html
demo地址:http://pan.baidu.com/s/1c0F6cSC
[Nhibernate]sqlite数据库基本使用的更多相关文章
- SQLite数据库和JPA简单介绍
SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLit ...
- Android之SQLite数据库篇
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...
- Qt5 开发 iOS 应用之访问 SQLite 数据库
开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...
- 【Win 10 应用开发】Sqlite 数据库的简单用法
如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...
- Android之SQLite数据库使用
转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...
- 让PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- iOS sqlite数据库图像化查看
问题描述:在xocde上用sqlite数据库的时候,因为没有图形化界面,有些时候很难看出自己设计的数据库是否有问题,比如我刚上手sqlite数据库设计id为自增长时,很自然的用了identify(1, ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
- Android开发-之SQLite数据库
之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...
随机推荐
- 常用python机器学习库总结
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- 【java开发】方法重写和方法重载概述
类的继承 父类-子类 关键字 extends 新建一个父类 public class Person { private String name; private int ...
- [excel玩转表格教程][1G][AVI]
[excel玩转表格教程][1G][AVI] 下载地址 :http://www.fu83.cn/thread-222-1-1.html
- LAMP.md
LAMP Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越 ...
- EasyUI实现工地领款单项目
环境搭建 引入jar.配置Spring MVC.web.xml.日志等 建表 自动生成MyBatis相关文件 mybatis-generator-core-1.3.2.jar <?xml ver ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 几十套业务系统集中统一授权管理实现经验分享
由于这几年互联网电商的快速发展,快递公司也进入了快速发展的绝好快速成长期.随着社会的强劲需求公司的业绩年年攀新高.快速发展的公司都需要有强大的IT信息系统,硬件设备基本上款到了货也可以到了,但是软件系 ...
- C++与C# UDP通信实例(同一台PC)
对于同一个PC机而言,服务器端和客户端在一个PC机上面,端口必须要不一样,不然会冲突. 你总不能自己又当爹又当妈吧. 所以在进行程序设计的时候,需要考虑这一点: 在此接口设计中,C++当作UDP的服务 ...
- Error: Could not find the required version of the Java(TM) 2 Runtime Environment in'(null)'.
今天拿到一台新机器,搭一下开发环境,安装个JDK是个很基本的事情,从Orale的网站上下了个安装,但是一直出下面的错: 我信了你的邪,Google了一圈,有人说是可能文件下载有问题,重新下载安装就可以 ...
- p2p网贷系统即将上线
等有时间了,我将此项目的详细设计与开发流程进行陈述,想学习的朋友敬请期待 先上界面:首页 后台:
- Jenkins入门系列之——03PDF文档下载
啥都不说了,网页看着蛋疼的,自己下载pdf文档吧. 点击下载文档 http://files.cnblogs.com/zz0412/jenkins%E5%85%A5%E9%97%A8%E6%89%8B% ...