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;@DatabaseFieldprivate int age;@DatabaseFieldprivate 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;}@Overridepublic void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {try {// 创建表,传入连接源与实体类TableUtils.createTable(connectionSource, Person.class);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic 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>() {@Overridepublic Void call() throws Exception {// 需要在事务中进行的操作}});

转载于:https://www.cnblogs.com/joahyau/p/7455094.html

OrmLite-更符合面向对象的数据库操作方式相关推荐

  1. 消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(二)

    在 "消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(一)"中,我们曾讨论过维护一个消息管理器来记录不同消息和它对应的消息处理类. 但是,这种实现 ...

  2. 面向对象的数据库开发--再论ORM

    实际上这是我第一次就ORM相关的话题发表自己的看法,但是由于此类文章早已有之,所以算上我这次应该是再论了.之所以写这篇博文,其原因是我自己实现了一个ORM框架,并且融入了很多自己的想法.所以本文想从面 ...

  3. 为什么 Vue 更符合这个时代的大势所趋

    不久前,尤雨溪发布了 Vue 3.0 Beta 版本. 发布之后我们对社区里的前端开发者做了一次调查沟通,大家普遍认为 Vue 已经具备了商业项目开发的必备条件,如语法精炼.优雅而简洁.代码的可读性高 ...

  4. Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式

    转自:swiftcafe Swift 3.0 更新越来越临近,这次更新会给我们带来很多实用的内容,比如对 Objc 库的迁移,会更符合 Swift 的语法风格.用过之前版本的 Swift,我们会发现很 ...

  5. java中间件_Java技术分享:一致性更强的分布式数据库中间件

    分布式数据库中间件 ShardingSphere 将 Sea t a 分布式事务能力进行整合,旨在打造一致性更强的分布式 数据库中间件 . 背景 数据库领域,分布式事务的实现主要包含:两阶段的 XA ...

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

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

  7. 网易163vip邮箱、163.net邮箱、新浪vip邮箱、QQ邮箱,哪款更符合商务邮件的需求

    在现代商务沟通中,邮箱成为职场人士沟通交流的工具,那究竟哪种邮箱更符合商务往来的需求,TOM小编做了一个测评,将网易163vip邮箱,163.net邮箱,新浪vip邮箱,QQ邮箱等市面上常见的邮箱作对 ...

  8. 专题页面设计,怎么做更符合网站SEO?

    通常我们做网站SEO,时间较长之后,网站中势必会出现大量具有相关性的文章,因此我们可能会通过tag标签进行汇集,然而只是利用tag标签来进行文章的简单汇集,又过于简陋,并不是最符合用户体验的方式,因此 ...

  9. 4星|《我们会被机器取代吗?》:机器会让我们有能力做比以前更高端的工作——更复杂、更有意义、更符合我们能力...

    哈佛商业评论·我们会被机器取代吗?[精选必读系列] (全5册) <哈佛商业评论>的两本正刊三本增刊的合集.正刊是今年第8期和第10期,增刊则分别出版于2015,2016,2017三年,其中 ...

最新文章

  1. Struts2 Hibernate Spring 整合的基本流程和步骤及其相关配置细节
  2. Windows内核工具Win64AST初步使用
  3. RxSwift之UI控件UIActivityIndicatorView与UIApplication扩展的使用
  4. 携程Apollo(阿波罗)配置中心在.NET Core项目快速集成
  5. Docker添加或者更改容器的端口映射
  6. linux操作-centos下载mysql
  7. android onSaveInstance方法项目中的实践
  8. 苹果公布App审查新机制 禁止发布疫情相关娱乐程序和游戏
  9. 牛客网-公司真题-买帽子
  10. 移动机顶盒migu-jt-u1 unt400c刷机 hi3798 root
  11. 短时傅里叶变换原理解
  12. 语音文件怎么转换文字?这两个方法就能轻松解决。
  13. 键盘符号中英文对照表
  14. Unity 实现蓄力攻击
  15. 利用Python解决利率相关计算问题(利率计算器):本金翻倍,定期取款,多重利率,通货膨胀等问题
  16. android 监听多个广播,同一个广播接收器监听多个广播及多个广播接收器监听同一个广播...
  17. hdu 2066 一个人的旅行 (多源最短路 )
  18. 桌面上的文件夹怎么保存到计算机硬盘里,电脑文件怎么保存到桌面
  19. Gettimeofday的用法
  20. BackTrack5(BT5)及BT5支持网卡列表

热门文章

  1. 为什么C标识符不能以数字开头
  2. 全球工业半导体市场占有率十大排名出炉
  3. python3安装PIL
  4. HTML5+CSS3小实例:菜单栏图标悬停效果
  5. 目标检测与YOLO算法(用Python实现目标检测)
  6. allennlp与pytorch版本匹配
  7. 清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+
  8. 升级cuda10.2+pytorch+cudnn
  9. Qt的QProgressDialog使用两条总结(去掉帮助和关闭、设置尺寸)
  10. Word 文件 删除后恢复出现乱码之解决方法