更符合面向对象的数据库操作方式-OrmLite
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的更多相关文章
- OrmLite-更符合面向对象的数据库操作方式
1. jar包下载 下载地址:http://ormlite.com/releases/,一般用core和android包即可. 如果使用的是android studio,也可以直接通过module s ...
- Android 数据库框架OrmLite的使用(一)
在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...
- SEO之HTML优化:让你的网站HTML代码更符合SEO规范
摘要HTML优化是网站内部优化的重点,可能对SEO新手来说,容易忽略.符合搜索引擎习惯的HTML代码是极利于SEO的,可以让你的网站获得更好的搜索引擎排名.如何制作一个标准的HTML网页,如何做HTM ...
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
- Android 数据库框架ormlite
Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...
- Mysqli面向对象操作数据库
Mysqli面向对象操作数据库 首先配置一下数据库: 接着用PHP中的Mysqli扩展库面向对象查询这个数据表. 操作分为以下几个步骤: 连接数据库 操作数据库 处理结果 关闭资源 <?php ...
- Builgen 插件——IntelliJ IDEA和Eclipse Java Bean Builder模式代码生成器-比lombok更符合需求
builder模式在越来越多的项目中使用,类似于alibaba fastjson JSONObject.fluentPut(),调用一个方法后返回这个对象本身,特别适合构建一些参数超级多的对象,代码优 ...
- FAQ:枚举和常规的值,到底哪种更符合程序使用?
问: 枚举和常规的值,到底哪种更符合程序使用? 答: 肯定是根据不同的场景,做出不同的选择. 如果是不同的值需要不同的逻辑,肯定是枚举好一些.如果只是表示某个取值范围且这个范围会动态变化,用常规的值 ...
- Android数据库框架-----ORMLite关联表的使用
上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...
随机推荐
- Win7 JBOSS的下载安装、环境变量配置以及部署
1. 下载安装 http://jbossas.jboss.org/downloads/ 我下载的是:JBoss AS7.1.1.Final 2. 解压安装包 D:\Java\jboss-as-7.1 ...
- Android开发相关操作
命令行启动DDMS工具,前提是有这个工具 ~/rustsoftware/adt-bundle-linux-x86_64-20140702/sdk/tools$ ./ddms 查看机器内存情况: adb ...
- 正则表达式小结(Regular Expressions)
(原创文章,谢绝转载~) 日常开发中,常用正则表达式方便的进行匹配.筛选工作.正则的常用内容有: 一般情况下原则:从左至右,越多越好(贪婪) 字符:转义:\ ,如 \*,\d (数字)等 选择,cas ...
- IBATIS动态SQL(1)
转:IBATIS动态SQL 直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的 ...
- (转)每天一个linux命令(15):tail 命令
场景:每次查看服务端的日志时候都需要反复重新加载服务端的日志.用tail命令可以很方便的查看服务器上的日志更新! tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅 ...
- HDOJ2001-两点坐标的距离
Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2 ...
- 正则替换内容中图片的src
string test = "<IMG src=\"http://www.baidu.com/upload/2009_11/09112110144808.jpg\" ...
- ORACLE 11g 静默安装
整理下以前的文档,放到博客上面来以后能直接找到. 环境:oracle linux release 6.3 x86_84.oracle 11gR2 一.主机环境配置 1.1 gcc安装 在ISO文件的P ...
- 【http】post和get请求的区别
两种常用的HTTP请求方式:post和get get:从指定的资源进行请求.数据长度有限制(2048个字符)可被缓存.可被保留在浏览器历史记录中,安全性较差.发送敏感信息如密码时不适用. po ...
- log4j实时将数据写入到kafka,Demo和相关的配置详解
一:在项目中引入对应的JAR包,如下,注意对应的包与之前包的冲突 <dependencies> <dependency> <groupId>junit</gr ...