1. jar包下载

下载地址:http://ormlite.com/releases/,一般用core和android包即可。

如果使用的是android studio,也可以直接通过module settings加入依赖。

2. 实体类

使用OrmLite创建表不需要写任何SQL语句,而是通过创建一个对应的实体类,通过这一实体类建表,即一张表对应一个实体类,而数据表中的字段以及字段属性则通过给实体类的属性添加注解进行设置。这也就是OrmLite比起安卓原生的数据库操作方式更符合面向对象思想的地方。

需要注意的是,实体类必须有无参的构造函数,否则会报错。

常用注解:

@DatabaseTable(tableName="table_name"):加在类定义前,设置表名,不设置则默认表名为实体类的类名。

@DatabaseField:实体类的属性前若加了这个注解,则该属性作为数据表的字段,不加的话,创建数据表时则忽略该属性。

常用参数有:generatedId:true则声明该字段为主键并自动增长;

columnName:设置字段名,不设置则默认同属性名;

dataType:设置数据类型,不设置则同属性类型,类型定义在DataType中;

canBeNull:设置字段是否允许为空,默认为true;

unique:添加唯一约束;

foreign:设置该字段为外键,一般是引用另一个实体类的ID。比如A实体类中有一个属性B,而数据库中是没有B这样一个数据类型的,则通过外键形式存储B的ID;

foreignAutoRefresh:外键自动更新;

foreignAutoCreate:外键不存在时是否自动添加;

foreignColumnName:指定作为外键的字段,不设置则默认为主键列。

@ForeignCollectionField:自动把所有参照本类的外键元素加入。比如Company公司类有个属性Collection employees记录公司所有员工,而Employee类中有个外键属性参照Company类,那么在添加数据的时候会自动把所有参照了这一ID的员工全部加进来,而不需要手动添加。

@DatabaseTable(tableName = "tb_student")
public class Student { @DatabaseField(generatedId = true)
private int id; @DatabaseField(columnName = "stu_name", dataType = DataType.STRING, canBeNull = false)
private String name; @DatabaseField
private int age; @DatabaseField
private String phone; public Student(String name, int age, String phone) {
this.name = name;
this.age = age;
this.phone = phone;
} // 若添加了有参的构造方法,则必须添加显性的无参构造方法
public Student() {} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
}
}

3. 数据库帮助类

定义了实体类之后,就要写一个帮助类进行创建和更新数据库,继承自OrmLiteSqliteOpenHelper,最好为单例模式。

继承的类与SQLiteOpenHelper基本一致,不同的是,OrmLiteSqliteOpenHelper为我们提供了一个TableUtils类进行数据表的添加与删除操作,更加简便,也更加符合面向对象的思想:

创建表:TableUtils.createTable(ConnectionSource connectionSource, Class<? extends Object> dataClass)

删除表:TableUtils.dropTable(ConnectionSource connectionSource, Class<? extends Object> dataClass, boolean igoreErrors)

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    private final static int DATABASE_VERSION = 1;

    private static DatabaseHelper sHelper;

    private DatabaseHelper(Context context) {
super(context, "test.db", null, DATABASE_VERSION);
} // 单例模式
public static synchronized DatabaseHelper getInstance(Context context) {
if (sHelper == null) {
sHelper = new DatabaseHelper(context);
}
return sHelper;
} @Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
// 创建表,传入连接源与实体类
TableUtils.createTable(connectionSource, Person.class);
} catch (SQLException e) {
e.printStackTrace();
}
} @Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
}
}

4. 数据库操作类

OrmLite专门封装了一个Dao类对数据库中的数据进行操作,每操作一个数据表,则通过帮助类对象调用getDao()方法获取相应的Dao对象,类型需指定两个泛型,第一个是相应的实体类,第二个是ID的数据类型,例如Dao<Person, Integer> dao = helper.getDao(Person.class);

插入

(1)dao.create():参数是相应的实体类对象。

Person p = new Person("Tim", "男", 22);
dao.create(p);

(2)dao.createOrUpdate():插入或更新,即插入记录ID存在时则更新数据。

(3)dao.createIfNotExists():如果插入记录不存在则插入。

更新:更新的方法有两种,第一种是直接调用SQL语句,第二种是通过UpdateBuilder对象实现。

(1)通过dao.updateRaw(String statement, String... arguments):直接调用原生SQL语句,第一个参数为SQL语句,后面的可变参数为占位符对应的值。

dao.updateRaw("update tb_name set name = ?, age = ? where id = ?", "Tim", 22, 2);

(2)通过UpdateBuilder实现:

设置条件的常用函数有:eq()某字段等于多少、gt()大于多少、lt()小于多少、and()并且、or()或者...等等。根据英文记忆比较容易,例如大于gt()->greater than、小于lt()->less than。

// 获取UpdateBuilder对象
UpdateBuilder builder = dao.updateBuilder()
// 设置更新范围
builder.setWhere(update.where().eq("id", 1).or().gt("age", 16));// id等于1或者age大于16
// 设置更新值
builder.updateColumnValue(...)
// 更新
builder.update()

查询:查询的方法有很多种,这里介绍几种比较常用的:

(1)dao.queryForAll():查询全部记录,不需要参数,相当于SQL中的select * from tb_name;

(2)dao.queryForEq(String fieldName, Object value):根据某字段的值查询,第一个参数为字段名,第二个参数为值。

List<Person> persons = dao.queryForEq("name", "Tim");

(3)dao.queryForId(Integer id):根据id查询。

PS:查询也可以通过类似于更新的方法,使用QueryBuilder进行查询。

删除:删除的方法也有多种,可以通过delete()方法传入实体类对象删除相应记录,可以通过deleteById()传入id进行删除,也可以类似更新的方法,通过DeleteBuilder对象进行删除。

5. 事务

通过OrmLite使用事务时,直接把内容装进下面的回调函数中即可,Callable的泛型指定返回值的类型,不需要返回值则传入Void。

TransactionManager.callInTransaction(helper.getConnectionSource(),
new Callable<Void>() {
@Override
public Void call() throws Exception {
// 需要在事务中进行的操作
}
});

OrmLite-更符合面向对象的数据库操作方式的更多相关文章

  1. 更符合面向对象的数据库操作方式-OrmLite

    1. jar包下载 下载地址:http://ormlite.com/releases/,一般用core和android包即可. 如果使用的是android studio,也可以直接通过module s ...

  2. SEO之HTML优化:让你的网站HTML代码更符合SEO规范

    摘要HTML优化是网站内部优化的重点,可能对SEO新手来说,容易忽略.符合搜索引擎习惯的HTML代码是极利于SEO的,可以让你的网站获得更好的搜索引擎排名.如何制作一个标准的HTML网页,如何做HTM ...

  3. Mysqli面向对象操作数据库

    Mysqli面向对象操作数据库 首先配置一下数据库: 接着用PHP中的Mysqli扩展库面向对象查询这个数据表. 操作分为以下几个步骤: 连接数据库 操作数据库 处理结果 关闭资源 <?php ...

  4. Builgen 插件——IntelliJ IDEA和Eclipse Java Bean Builder模式代码生成器-比lombok更符合需求

    builder模式在越来越多的项目中使用,类似于alibaba fastjson JSONObject.fluentPut(),调用一个方法后返回这个对象本身,特别适合构建一些参数超级多的对象,代码优 ...

  5. FAQ:枚举和常规的值,到底哪种更符合程序使用?

    问: 枚举和常规的值,到底哪种更符合程序使用? 答: 肯定是根据不同的场景,做出不同的选择. 如果是不同的值需要不同的逻辑,肯定是枚举好一些.如果只是表示某个取值范围且这个范围会动态变化,用常规的值 ...

  6. 阿里云更懂你的数据库,免费提供DBA服务

    阿里云更懂你的数据库,免费提供DBA服务   阿里云云数据库(RDS)管理控制台近期将全面升级为云数据库管家.云数据库管家的使命是提供便捷的操作.贴心的服务.专业的处理建议,帮助用户管理好云数据库. ...

  7. ADO数据库操作方式

    微软公司的ADO (ActiveX Data Objects) 是一个用于存取数据源的COM组件.它提供了编程语言和统一数据访问方式OLE DB的一个中间层.允许开发人员编写访问数据的代码而不用关心数 ...

  8. C#面向对象之数据库(理论、插入、修改、删除、查询)

    1.数据库的作用:不仅仅是存储,更重要的是将数据进行存储以后怎么样才能方便快捷的查询修改 2.数据库的特点:海量存储.查找速度快.并发性问题控制.安全性.数据完整性(保存在数据库中的数据是正确的.真是 ...

  9. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 更优美的Oracle数据库上的代码生成器

    代码生成器进行了改进,针对Oracle数据库生成更优美的代码.这样生成出来的代码,更像微软的风格,更像C#.NET的标准规范,阅读起来也更优美.把Oracle表字段名默认大写, 有_分割等进行了优化, ...

随机推荐

  1. 『神坑』DotNetty 内存泄漏 解决办法

    背景 近来在用 DotNetty 实现一个文件上传下载的同步服务. 其中:客户端下载服务端的文件,客户端多次请求,从服务端将文件分片下载下来,追加到本地磁盘. —— 非常简单的代码,都写了几十次了,驾 ...

  2. springbatch的封装与使用

    springbatch 主要实现批量数据的处理,我对batch进行的封装,提出了jobBase类型,具体job需要实现它即可.Spring Batch 不仅提供了统一的读写接口.丰富的任务处理方式.灵 ...

  3. 解决Configuration 'compile' is obsolete and has been replaced with implementation

    项目中Gradle版本升级到4.4后,项目构建时,每次出现红色的警告信息: WARNING: Configuration 'compile' is obsolete and has been repl ...

  4. 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已. 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂. 不过,这些文章对于那些初学者而 ...

  5. DS控件库 Win7链接列表框的仿Windows开始菜单样式

    Win7链接列表框是依照Windows7的开始菜单开发的,同时进行了属性和功能的扩展. 效果图 项属性 控件属性 控件主要事件 点击项(Sender As Win7链接列表框, Itm As 链接项, ...

  6. android 请求接口报错 org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.90:9090 refused

    No Network Security Config specified, using platform defaultI/System.out: org.apache.http.conn.HttpH ...

  7. Windows Server 2016-Windows 时间服务概览

    同步 Windows 时间服务 (W32Time) 的日期和时间的所有运行 Active Directory 域服务 (AD DS) 的计算机. 时间同步至关重要的许多 Windows 服务和的业务线 ...

  8. 【机器学习笔记一】协同过滤算法 - ALS

    参考资料 [1]<Spark MLlib 机器学习实践> [2]http://blog.csdn.net/u011239443/article/details/51752904 [3]线性 ...

  9. C# ListView 控件和 INotifyPropertyChanged 接口

    ListView 控件和 DataGridView 控件 ListView 是跟 Winform 中 DataGridView 用法以及显示效果差不多的一个 WPF 控件,可以通过列表的方式方便的显示 ...

  10. mysql安装问题(一)

    mysql安装问题 mysql安装一直未响应 问题: 原因: 解决方案: 登录mysql时提示密码错误 问题: 解决方案: mysql安装问题 Author:母虎忠 日期:April 26, 2019 ...