哪个ORM框架可以最好地处理MVCC数据库设计

哪个ORM框架可以最好地处理MVCC数据库设计,第1张

1、传统的建表方式

其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。

那我们现在就来试试SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。本篇文章只需要把注意力放在创建数据库这里就行了,升级数据库我们会在下一篇文章中去讨论。

新建一个MySQLiteHelper类并让它继承SQLiteOpenHelper,这样一个最基本的数据库帮助类的代码如下所示:

[java] view plain copy

public class MySQLiteHelper extends SQLiteOpenHelper {

public MySQLiteHelper(Context context, String name, CursorFactory factory,

int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

其中,当数据库创建的时候会调用onCreate()方法,在这里去执行建表 *** 作就可以了。比如说我们想新建一张news表,其中有title,content,publishdate,commentcount这几列,分别代表着新闻标题、新闻内容、发布时间和评论数,那么代码就可以这样写:

[java] view plain copy

public class MySQLiteHelper extends SQLiteOpenHelper {

public static final String CREATE_NEWS = "create table news ("

+ "id integer primary key autoincrement, "

+ "title text, "

+ "content text, "

+ "publishdate integer,"

+ "commentcount integer)";

public MySQLiteHelper(Context context, String name, CursorFactory factory,

int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

dbexecSQL(CREATE_NEWS);

}

}

可以看到,我们把建表语句定义成了一个常量,然后在onCreate()方法中去执行了这条建表语句,news表也就创建成功了。这条建表语句虽然简单,但是里面还是包含了一些小的细节,我来解释一下。首先,根据数据库的范式要求,任何一张表都应该是有主键的,所以这里我们添加了一个自增长的id列,并把它设为主键。然后title列和content列都是字符串类型的,commentcount列是整型的,这都很好理解,但是publishdate列该怎么设计呢?由于SQLite中并不支持存储日期这种数据类型,因此我们需要将日期先转换成UTC时间(自1970年1月1号零点)的毫秒数,然后再存储到数据库中,因此publishdate列也应该是整型的。

现在,我们只需要获取到SQLiteDatabase的实例,数据库表就会自动创建了,如下所示:

[java] view plain copy

SQLiteOpenHelper dbHelper = new MySQLiteHelper(this, "demodb", null, 1);

SQLiteDatabase db = dbHelpergetWritableDatabase();

LitePal的基本用法

虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。

快速配置

1 引入Jar包或源码

首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示:

如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。

2 配置litepalxml

接着在项目的assets目录下面新建一个litepalxml文件,并将以下代码拷贝进去:

[java] view plain copy

<xml version="10" encoding="utf-8">

<litepal>

<dbname value="demo" ></dbname>

<version value="1" ></version>

<list>

</list>

</litepal>

配置文件相当简单,<dbname>用于设定数据库的名字,<version>用于设定数据库的版本号,<list>用于设定所有的映射模型,我们稍后就会用到。

3 配置LitePalApplication

由于 *** 作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样 *** 作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifestxml中配置一下LitePalApplication,所有的数据库 *** 作就都不用再传Context了,如下所示:

[java] view plain copy

<manifest>

<application

android:name="orglitepalLitePalApplication"

>

</application>

</manifest>

当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:

[java] view plain copy

<manifest>

<application

android:name="comexampleMyApplication"

>

</application>

</manifest>

没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:

[java] view plain copy

public class MyApplication extends LitePalApplication {

}

但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。

仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。

开始建表

前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。

但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来 *** 作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。

那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:

[java] view plain copy

package comexampledatabasetestmodel;

public class News {

}

然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:

[java] view plaincopy

[java] view plain copy

public class News {

private int id;

private String title;

private String content;

private Date publishDate;

private int commentCount;

// 自动生成get、set方法

}

其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。

这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。

那么有的朋友可能会问了,既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。

现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepalxml文件,在<list>标签中加入News模型类的声明:

[java] view plain copy

<xml version="10" encoding="utf-8">

<litepal>

<dbname value="demo" ></dbname>

<version value="1" ></version>

<list>

<mapping class="comexampledatabasetestmodelNews"></mapping>

</list>

</litepal>

注意这里一定要填入News类的完整类名。

OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的 *** 作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:

[java] view plain copy

SQLiteDatabase db = ConnectorgetDatabase();

好了,到目前为止你已经算是对LitePal的用法有点入门了,那么本篇文章的内容就到这里,下篇文章当中我们将学习使用LitePal进行升级表的 *** 作。感兴趣的朋友请继续阅读 Android数据库高手秘籍(三)——使用LitePal升级表 。

松下(Panasonic)DMC-GF1GK(20mm/f17 ASPH) 单电相机 类型镜头可换的数码相机录制载体SD记忆卡、SDHC记忆卡图像传感器尺寸173 x 130毫米(采用4:3宽高比时)镜头卡口微型4/3卡口图像传感器类型Live MOS传感器总像素1310万像素相机有效像素1210万像素彩色滤镜基色滤镜除尘系统超声波滤镜录制系统录制文件格式静像:JPEG(DCF, Exif 221)、RAW、对应DPOF带配音的静像:JPEG(DCF, Exif 221)+ QuickTime影像:AVCHD Lite / QuickTime Motion JPEG宽高比4:3, 3:2, 16:9, 1:1画质RAW、RAW+精细、RAW+标准、精细、标准色彩空间sRGB, Adobe RGB文件

尺寸

(像素)静像[4:3] 4000 x 3000(大)、2816 x 2112(中)、2048 x 1536(小)[3:2] 4000 x 2672(大)、2816 x 1880(中)、2048 x 1360(小)[16:9] 4000 x 2248(大)、2816 x 1584(中)、1920 x 1080(小)[1:1] 2992 x 2992(大)、2112 x 2112(中)、1504 x 1504(小)影像Motion

JPEG[4:3] QVGA:320 x 240, 30帧每秒 / VGA:640 x 480, 30帧每秒[16:9] WVGA:848 x 480, 30帧每秒[高清] 1280 x 720, 30帧每秒AVCHD

LitePAL[高清] 1280 x 720, 50p (传感器输出为25帧/秒)

(SH: 17 Mbps, H: 13 Mbps, L: 9 Mbps)连续录制时间(影像)画质设为[SH]的AVCHD Lite格式:使用H-H020时约为210分钟;

使用H-FSO14045时约为170分钟

画质设为[HD]的Motion JPEG格式:使用H-H020时约为210分钟;

使用H-FSO14045时约为170分钟实际录制时间(影像)画质设为[SH]的AVCHD Lite格式:使用H-H020时约为110分钟;

使用H-FSO14045时约为100分钟

画质设为[HD]的Motion JPEG格式:使用H-H020时约为110分钟;

使用H-FSO14045时约为100分钟聚焦类型反差自动聚焦系统聚焦模式单次自动聚焦 / 连续拍摄自动聚焦 / 手动聚焦自动聚焦模式人脸识别 / AF追踪 / 23区聚焦 / 1区聚焦自动聚焦检测范围EV 0-18(F35镜头,ISO 100)自动聚焦辅助灯有自动聚焦锁定自动聚焦/自动曝光锁键或在单次自动聚焦模式下半按快门其它预先自动聚焦(快速AF / 连续AF)、AF+MF、MF辅助(5倍、10倍)曝光控制测光系统144个分区多区域感应系统测光模式智能多点 / 中央重点 / 定点测光范围EV 0-18(F20镜头,ISO 100)曝光模式自动编程曝光、光圈优先自动曝光、快门优先自动曝光、手动ISO感光度

(标准输出感光度)自动 / 100 / 200 / 400 / 800 / 1600 / 3200 / 智能ISO曝光补偿每级1/3EV ±3EV自动曝光锁定自动聚焦/自动曝光锁键或半按快门自动包围曝光3、5、7帧,每级1/3或2/3 EV,±2 EV白平衡白平衡自动 / 日光 / 阴天 / 阴影 / 卤素灯 / 闪光灯 / 预设白平衡1、2 /色温设置白平衡调整蓝色/琥珀色色轴、品红色/绿色色轴色温设置2500-10000K,每级100K白平衡包围3重曝光设置,采用蓝色/琥珀色色轴或品红色/绿色色轴快门类型焦平面快门快门速度静像:1/4000 ~ 60和长时间曝光(最长约4分钟)自拍定时器2秒 / 10秒 / 10秒、3张连拍遥控具有长时间曝光功能的遥控,采用DMW-RSL1(选购件)场景模式静像场景模式肖像 / 柔肤 / 风景 / 建筑 / 运动 / 周边失焦 / 花 / 食物 / 物体 /

夜间肖像 / 夜景 / 灯火 / 宝宝1、2 / 宠物 / 聚会 / 日落影像场景模式肖像 / 柔肤 / 风景 / 建筑 / 运动 / 鲜花 / 食物 / 物体 / 低照度 / 聚会 /日落

(通过选择静像场景模式然后按摄像键即可启动。如选用与影像场景模式

不相符的静像场景模式,将会以标准模式或其它相关模式进行录制。)我的色彩模式我的色彩模式富有表现力 / 乡愁怀旧 / 纯洁自然 / 文雅上品 / 单色 / 动态艺术 / 轮廓 / 自定义模式

(可调整色彩、亮度、饱和度)连拍连拍速度3张/秒(高速)或2张/秒(低速)可拍照片数量7张(采用特定速度录制RAW文件时)无限连拍(没有RAW文件时)

(取决于记忆卡容量、电池余量、画面尺寸及压缩)内置闪光灯类型TTL内置闪光灯、GN60等效(ISO 100 m)、内置d出式闪光灯闪光灯模式自动、自动/红眼抑制、强制开启、强制开启/红眼抑制、慢速同步、

慢速同步/红眼抑制、强制关闭同步速度低于1/160秒闪光灯输出调整每级1/3EV ±2EV闪光灯同步前帘同步、后帘同步热靴TTL自动采用FL220/FL360/FL500(选购件)LCD显示屏类型低温多晶硅TFT LCD显示屏尺寸30英寸 / 3:2宽高比 / 宽视角像素460K点视野率约100%显示屏调整亮度(7个等级)、色彩(7个等级)LCD模式关 / 自动调光LCD / 增亮式LCD动态检视数码变焦2倍、4倍延伸光学变焦最高2倍(采用全像素录制时无效。放大倍数取决于录制的像素量与宽高比。)其它功能坐标线(3种样式)实时柱形图胶片模式彩色标准 / 动态 / 自然 / 流畅 / 怀旧 / 鲜艳黑白标准 / 动态 / 流畅其它我的胶片1 / 我的胶片2 / 多胶片播放播放模式标准播放、30张缩略图显示、12张缩略图显示、日历显示、变焦播放

(最大16倍)、幻灯片播放、播放模式(标准 / 照片 / AVCHD Lite /

Motion JPEG / 分类 / 收藏夹)、标题编辑、文本印章、调整大小、剪裁、

宽高比转换、旋转、旋转显示、打印设置、保护、音频复制图像保护/删除保护单张 / 多张或取消删除单张 / 多张 / 全部 / 收藏夹除外打印直接打印兼容PictBridge(可选择打印尺寸、布局、日期设置)接口USBUSB 20高速HDMIminiHDMI 类型C

视频:自动 / 1080i / 720p / 480p (PAL制为576p)

音频:Dolby�0�3 Digital Creator(杜比数字制作)音像输出单声道、 PAL遥控�0�125毫米内置麦克风单声道、风声消除:关 / 低 / 标准 / 高外置麦克风接口无扬声器有语种屏幕显示语言英文、德文、法文、意大利文、西班牙文、波兰文、捷克文、匈牙利文、

俄文、中文(繁体)、中文(简体)、荷兰文、泰文、韩文、土耳其文、

葡萄牙文、阿拉伯文、波斯文、日文、瑞典文、丹麦文、芬兰文

有关市场上可购买的产品屏幕显示语种详细情况,请查询您所在国家或

地区的Panasonic经销商网站。电源电池ID安全锂电池(72伏,1250毫安时)(标配)

充电器 / 交流电源适配器(输入:110~240伏 交流,需要使用直流电源线)电池工作时间静像

CIPA标准:约380张(LCD)

使用LUMIX G 20毫米/F17 ASPH镜头体积 / 重量体积(宽x高x厚)119 x 71 x 363毫米 / 469 x 280 x 143英寸重量约285克 / 1005盎司(仅机身)工作环境工作温度0℃至40℃( 32�0�2F至104�0�2F )工作湿度10%至80%标准配件软件PHOTOfunSTUDIO 40 HD Edition, SILKYPIX�0�3 Developer Studio 30 SE,

USB驱动程序标准配件充电器 / 交流电源适配器、电池、机身护盖、AV接线、USB接线、

交流电源线、挂带、CD-ROM LUMIX G 20毫米 / F17 ASPH(相当于35毫米相机:40毫米)镜头结构5组7片(包括2枚非球面镜片)镜头卡口微型4/3卡口光学防抖无焦距f=20毫米(相当于35毫米相机:40毫米)光圈类型7片控光片 / 圆形光圈光圈F17最小光圈F16最短聚焦距离02米 / 066英尺最大放大倍数约013倍/025倍(35毫米相机等效值)对角线视角57°滤镜尺寸�0�146毫米 / 181英寸最大直径�0�163毫米 / 248英寸总长度约255毫米 / 100英寸(镜头前端至镜头卡口底端)重量约100克 / 353盎司标准配件镜头护盖、镜头背面护盖、镜头存放包LEICA DG MACRO-ELMARIT 45毫米 / F28 ASPH / 光学防抖(相当于35毫米相机:90毫米)镜头结构10组14片(包括1片非球面镜片、1片ED镜片)镜头卡口微型4/3卡口光学防抖有焦距f=45毫米(相当于35毫米相机的90毫米)光圈类型7片控光片 / 圆形光圈光圈F28最小光圈F22最短聚焦距离全范围:015米 / 05英尺,限定范围:05米 / 164英尺最大放大倍数约10倍 / 20倍(35毫米相机等效值)对角线视角27°滤镜尺寸�0�146毫米 / 181英寸最大直径�0�163毫米 / 248英寸总长度约625毫米 / 246英寸(镜头前端至镜头卡口底端)重量约225克 / 794盎司标准配件镜头护盖、镜头护罩、镜头背面护盖、镜头存放包

这个标题起的太标题党,不过为了让遇到过相同问题的朋友们能够准确的搜到就只能这样了。

这几天遇到过一个问题,在LitePal模型中进行如下设置

然而在获取main_id的时候确不能够成功获取,原因是只要model中属性有id这个字符串,就会被默认替代成ID主键,而这个主键是自动生成的。也就是所有含有id的属性都会失效,这也就造成了虽然有set、get方法却不能够获取正确的值。

解决方法 :如果仅仅是为了通过一个唯一的键获取数据,那就可以通过如下修改来获取

虽然这个参数依旧有id这个字符串,但是其get方法是可用的,只需要将其的返回类型设置成主键的类型,也就是int即可。要注意的是,此时set方法是不可用的,因为它是想要设置主键的,所以必然失效。

如果是为了设置一个具有唯一值的属性,那就把id从其中去掉就行。

1、传统的建表方式

其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。

那我们现在就来试试SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。本篇文章只需要把注意力放在创建数据库这里就行了,升级数据库我们会在下一篇文章中去讨论。

新建一个MySQLiteHelper类并让它继承SQLiteOpenHelper,这样一个最基本的数据库帮助类的代码如下所示:

[java] view plain copy

public class MySQLiteHelper extends SQLiteOpenHelper {

public MySQLiteHelper(Context context, String name, CursorFactory factory,

int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

其中,当数据库创建的时候会调用onCreate()方法,在这里去执行建表 *** 作就可以了。比如说我们想新建一张news表,其中有title,content,publishdate,commentcount这几列,分别代表着新闻标题、新闻内容、发布时间和评论数,那么代码就可以这样写:

[java] view plain copy

public class MySQLiteHelper extends SQLiteOpenHelper {

public static final String CREATE_NEWS = "create table news ("

+ "id integer primary key autoincrement, "

+ "title text, "

+ "content text, "

+ "publishdate integer,"

+ "commentcount integer)";

public MySQLiteHelper(Context context, String name, CursorFactory factory,

int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

dbexecSQL(CREATE_NEWS);

}

}

可以看到,我们把建表语句定义成了一个常量,然后在onCreate()方法中去执行了这条建表语句,news表也就创建成功了。这条建表语句虽然简单,但是里面还是包含了一些小的细节,我来解释一下。首先,根据数据库的范式要求,任何一张表都应该是有主键的,所以这里我们添加了一个自增长的id列,并把它设为主键。然后title列和content列都是字符串类型的,commentcount列是整型的,这都很好理解,但是publishdate列该怎么设计呢?由于SQLite中并不支持存储日期这种数据类型,因此我们需要将日期先转换成UTC时间(自1970年1月1号零点)的毫秒数,然后再存储到数据库中,因此publishdate列也应该是整型的。

现在,我们只需要获取到SQLiteDatabase的实例,数据库表就会自动创建了,如下所示:

[java] view plain copy

SQLiteOpenHelper dbHelper = new MySQLiteHelper(this, "demodb", null, 1);

SQLiteDatabase db = dbHelpergetWritableDatabase();

LitePal的基本用法

虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。

快速配置

1 引入Jar包或源码

首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示:

如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。

2 配置litepalxml

接着在项目的assets目录下面新建一个litepalxml文件,并将以下代码拷贝进去:

[java] view plain copy

<xml version="10" encoding="utf-8">

<litepal>

<dbname value="demo" ></dbname>

<version value="1" ></version>

<list>

</list>

</litepal>

配置文件相当简单,<dbname>用于设定数据库的名字,<version>用于设定数据库的版本号,<list>用于设定所有的映射模型,我们稍后就会用到。

3 配置LitePalApplication

由于 *** 作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样 *** 作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifestxml中配置一下LitePalApplication,所有的数据库 *** 作就都不用再传Context了,如下所示:

[java] view plain copy

<manifest>

<application

android:name="orglitepalLitePalApplication"

>

</application>

</manifest>

当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:

[java] view plain copy

<manifest>

<application

android:name="comexampleMyApplication"

>

</application>

</manifest>

没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:

[java] view plain copy

public class MyApplication extends LitePalApplication {

}

但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。

仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。

开始建表

前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。

但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来 *** 作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。

那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:

[java] view plain copy

package comexampledatabasetestmodel;

public class News {

}

然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:

[java] view plaincopy

[java] view plain copy

public class News {

private int id;

private String title;

private String content;

private Date publishDate;

private int commentCount;

// 自动生成get、set方法

}

其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。

这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。

那么有的朋友可能会问了,既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。

现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepalxml文件,在<list>标签中加入News模型类的声明:

[java] view plain copy

<xml version="10" encoding="utf-8">

<litepal>

<dbname value="demo" ></dbname>

<version value="1" ></version>

<list>

<mapping class="comexampledatabasetestmodelNews"></mapping>

</list>

</litepal>

注意这里一定要填入News类的完整类名。

OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的 *** 作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:

[java] view plain copy

SQLiteDatabase db = ConnectorgetDatabase();

好了,到目前为止你已经算是对LitePal的用法有点入门了,那么本篇文章的内容就到这里,下篇文章当中我们将学习使用LitePal进行升级表的 *** 作。感兴趣的朋友请继续阅读 Android数据库高手秘籍(三)——使用LitePal升级表 。

以上就是关于哪个ORM框架可以最好地处理MVCC数据库设计全部的内容,包括:哪个ORM框架可以最好地处理MVCC数据库设计、谁知道这个相机是松下的什么型号呀据说新出了第二代可以自拍、LitePal无法获取ID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9332519.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存