ORMLite学习入门笔记
ORMLite学习入门笔记
使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大。所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLite(官网:http://ormlite.com/),以其小巧方便,在Android数据库维护上深受大家的喜爱。
但是ORMLite的文档有比较少,官方老外写的文档又长又乱,我等考不过托福雅思的我也就简单的看了看。把自己写了一个demo,记录一下使用的过程和步骤。
Jar 包的下载地址在:Orm jar包的下载地址
我们需要下载 core 和 android 两个jar,放在工程中就好
一、设置建立自己的与数据库表对应的pojo
/**
* @author zhoushengtao
* @since 2013-7-16 下午7:39:05
*/ package com.stchou.helloormlite; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
/**
* 数据库对应的pojo类,注意一下三点
* 1、填写表的名称 @DatabaseTable
* 2、填写表中持久化项的 @DatabaseField 还可使顺便设置其属性
* 3、保留一个无参的构造函数
*/
//表名称
@DatabaseTable(tableName = "user")
public class User
{
// 主键 id 自增长
@DatabaseField(generatedId = true)
private int id;
// 映射
@DatabaseField(canBeNull = false)
private String username;
// 不为空
@DatabaseField(canBeNull = false)
private String password; @DatabaseField(defaultValue = "")
private String nickname ; public User()
{
// ORMLite 需要一个无参构造
} /**
* @return the id
*/
public int getId()
{
return this.id;
} /**
* @param id the id to set
*/
public void setId(int id)
{
this.id = id;
} /**
* @return the username
*/
public String getUsername()
{
return this.username;
} /**
* @param username the username to set
*/
public void setUsername(String username)
{
this.username = username;
} /**
* @return the password
*/
public String getPassword()
{
return this.password;
} /**
* @param password the password to set
*/
public void setPassword(String password)
{
this.password = password;
} @Override
public String toString()
{
String text = ""; text += "\nid = " + id;
text += "\nusername = " + username;
text += "\npassword = " + password;
return text;
} }
@DatabaseField 可以注释一下成员
| 
 columnName  | 
 String  | 
 数据库表中对应的列名称,如果没有设置,系统将自动生成  | 
| 
 dataType  | 
 字段的数据类型。通常情况下,数据类型是从java类的成员变量获取的,并不需要进行特殊指出。它相当于是SQL的数据类型。  | 
|
| 
 defaultValue  | 
 String  | 
 当心插入一条数据时候的默认值,如果没有将为none  | 
| 
 width  | 
 Integer  | 
 字段的宽度,主要用于字符串字段。默认是0,意味着采用默认的数据类型和具体的数据库的默认情况。对于字符串以为在255个字符即使有些数据库并不支持。  | 
| 
 canBeNull  | 
 Boolean  | 
 默认值为true,如果设置为false,insert数据是必须保证该列项必须存在一个值。  | 
| 
 id  | 
 Boolean  | 
 不管这个字段是否是id,默认值都是false。作为数据库中的主键存在一个类中。id、generatedId和generatedIdSequence三者只能同时出现一个  | 
| 
 generatedId  | 
 Boolean  | 
 自增长id,默认值为false。调用Dao.create()时候会增加1。id、generatedId和generatedIdSequence三者只能同时出现一个。  | 
| 
 generatedIdSequence  | 
 String  | 
 序列编号的名字,这个值在生成的时候会被使用。和generatedId相似,但是你能够指定使用的序列名称。默认是没有的。一个class中只有一个成员变量可以设置这个值。这仅仅在数据库需要序列生成id时才需要它。如果你选择使用generatedId代替它,那么代码将自动增加序列名。  | 
| 
 foreign  | 
 Boolean  | 
 默认值为false,相当于数据库中的外键,链接其他类存储在数据库中。这个字段必须存在自己的原始类型,另一个类必须存在一个id字段(id、generatedid、generatedIdSequence中的一个)  | 
| 
 useGetSet  | 
 Boolean  | 
 申明这个字段可以使用Java类中的get、set映射到数据库表中的赋值和获取。默认值为false  | 
| 
 ….  | 
-------------------------------------------------------
第一步:
下载ormlite-android-4.41.jar和ormlite-core-4.41.jar两个jar包,放入工程的libs文件夹内,然后右键 builder path-->add path
第二步:对你要持久化的类进行注解(记住.提供一个默认无参构造)
- @DatabaseTable(tableName="student") tableName 表明
 - public class Student {
 - public static final String ID="student_id";
 - public static final String NAME="student_name";
 - public static final String LASTNAME="student_lastname";
 - public static final String RESOURCE="student_resource";
 - public static final String TEACHER_ID="tacher_id";
 - @DatabaseField(generatedId=true,useGetSet=true,columnName=ID)
 - private int id;
 - @DatabaseField(foreignColumnName=Teacher.ID,foreign=true,foreignAutoCreate=true)
 - private Teacher teacher_id;
 - @DatabaseField(useGetSet=true,columnName=NAME)
 - private String name;
 - @DatabaseField(useGetSet=true,columnName=LASTNAME)
 - private String lastName;
 - @DatabaseField(useGetSet=true,columnName=RESOURCE)
 - private double resource;
 - 一系列的set get 方法...
 
@DatabaseTable(tableName="student") tableName 表明
public class Student {
public static final String ID="student_id";
public static final String NAME="student_name";
public static final String LASTNAME="student_lastname";
public static final String RESOURCE="student_resource";
public static final String TEACHER_ID="tacher_id";
@DatabaseField(generatedId=true,useGetSet=true,columnName=ID)
private int id;
@DatabaseField(foreignColumnName=Teacher.ID,foreign=true,foreignAutoCreate=true)
private Teacher teacher_id;
@DatabaseField(useGetSet=true,columnName=NAME)
private String name;
@DatabaseField(useGetSet=true,columnName=LASTNAME)
private String lastName;
@DatabaseField(useGetSet=true,columnName=RESOURCE)
private double resource;
一系列的set get 方法...
过一会将详细的列出各种注解的意思,这里只需要知道 @DatabaseTable 指定类对应的表明,@DatabaseField 对应的字段名,
第二步:
创建一个database helper类,继承OrmLiteSqliteOpenHelper 实现 onCreate 和 onUpgrade ,这个类类似于 android 的SQLiteOpenHelper方法 ,大家应该知道这个类的作用了,创建删除数据库应该使用TableUtils工具类的方法.一会下面介绍
第二步:分两种情况,一个直接在Activity中使用OrmLite 创建的dao类
(1)这时候,你的Activity类应该实现OrmLiteBaseListActivity, OrmLiteBaseService或者 OrmLiteBaseTabActivity,然后在类中使用getHelper().getDao(Class clazz);创建你的DAO 对象,然后使用其中的方法对数据进行操作.
(2)有些人和我一样.不喜欢将DAO层和Activity层放在一起,喜欢讲操作数据库的类单独放在DAO包中,形成DAO层,貌似是web开发留下的..........................习惯
这时候,我们需要在自定义的DAO中使用 OrmLiteSqliteOpenHelper helper=OpenHelperManager.getHelper(context,BasicDAO.class);方法来得到helper对象,这个对象需要保持,根据文档上说在销毁对象的时候需要OpenHelperM anager.releaseHelper();使用这个方法来释放掉helper对象,然后使用helper对象的getDao(Student.class);方法得到DAO类,
然后我们就可以使用DAO类,完成各种各样的数据库 增删改操作.
例如:
- public class StudentDAO{
 - Dao<student integer=""> dao=null;
 - private Context context=null;
 - OrmLiteSqliteOpenHelper helper=null;
 - public StudentDAO(Context context) {
 - this.context=context;
 - // TODO Auto-generated constructor stub
 - helper=OpenHelperManager.getHelper(context,BasicDAO.class);
 - try {
 - dao=helper.getDao(Student.class);
 - } catch (SQLException e) {
 - // TODO Auto-generated catch block
 - e.printStackTrace();
 - }
 - }
 - @Override
 - <span style="white-space: pre;"> </span>protected void finalize() throws Throwable {
 - <span style="white-space: pre;"> </span>// TODO Auto-generated method stub
 - <span style="white-space: pre;"> </span>OpenHelperManager.release();//释放掉helper
 - <span style="white-space: pre;"> </span>super.finalize();
 - <span style="white-space: pre;"> </span>}
 - }
 - </student>
 
public class StudentDAO{
	Dao dao=null;
	private Context context=null;
	OrmLiteSqliteOpenHelper helper=null;
        public StudentDAO(Context context) {
		this.context=context;
		// TODO Auto-generated constructor stub
		helper=OpenHelperManager.getHelper(context,BasicDAO.class);
		try {
			dao=helper.getDao(Student.class);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
        @Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		OpenHelperManager.release();//释放掉helper
		super.finalize();
	}
}
接下来介绍..各种各样的注解
首先介绍 @DatabaseTable
参数:tableName指定表明,没有将使用类名作为表明
@DatabaseField
| cloumnName:指定字段名,不指定则变量名作为字段名 | canBeNull:是否可以为null | |
| dataType:指定字段的类型 | defaultValue:指定默认值 | width:指定长度 | 
| id:指定字段为id | generatedId:指定字段为自增长的id,不能id,generatedIdSequence通用 | foreign 指定这个字段的对象是一个外键,外键值是这个对象的id | 
| useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量 | throwIfNull,如果空值抛出异常 | persisted:指定是否持久化此变量,默认true | 
| unique:字段值唯一 | uniqueCombo整列的值唯一 | index:索引 | 
| uniqueIndex 唯一索引 | foreignAutoRefresh 外键值,自动刷新 | foreignAutoCreate 外键不存在时是否自动添加到外间表中 | 
| foreignColumnName外键字段指定的外键表中的哪个字段 | 
@ForeignCollectionField 表示这个表中的数据在其他表中是外键(其他表的某个字段使用@DatabaseField(foreignColumnName=一个表的id键名,foreign=true)
eager 表示该集合是在初始化这个对象的时候,是否讲对象取出还是在遍历的时候才取出,默认false遍历的时候才取出,size()方法也会引起遍历
这个注解注解的字段只能是ForeignCollection<T> or Collection<T> 对象
TableUtils
接下来介绍TableUtils完成对数据中的表进行创建,删除,清空表格,只要看一下它的静态方法.做过程序的应该都会
Dao<T,V>
包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型
主要方法:
create:插入一条数据
createIfNotExists:如果不存在则插入
createOrUpdate:如果指定id则更新
queryForId:更具id查找
update 查找出数据
refresh的解释:If you want to use other elds in the Account, you must call refresh on the accountDao class to get the Account object lled in.
delte 删除数据
queryBuilder() 创建一个查询生成器:进行复杂查询
deleteBuilder() 创建一个删除生成器,进程复杂条件删除
updateBuilder() 创建修条件生成器,进行复杂条件修改
条件查找器DeleteBuilder,QueryBuilder,UpdateBuilder
查找器是帮助拼接条件语句的.比如查找器中有 where()方法 and()方法 eq()方法 lt()方法 qt()方法 between方法这些方法很直观..很容易都明了什么意思
最后使用prepare()方法生成条件使用DAO.query || DAO.delete|| DAO.update 方法执行
可以使用查找生成器QueryBuilder 的 orderby limit offset 方法进行排序,分页,
ORMLite学习入门笔记的更多相关文章
- 每天成长一点---WEB前端学习入门笔记
		
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
 - 别人的spring学习入门笔记
		
http://elf8848.iteye.com/blog/875830 可以做入门参考,英语好可以阅读spring的spring-framework-reference 更多学习blog http ...
 - Away3D引擎学习入门笔记
		
(1). 准备工作,一些必须知道的东西 (创建时间:2014-06-05) A.必要的开发语言基础.至少要懂点ActionScript 3.0语法(ActionScript 3.0语法及API参考), ...
 - PyTorch深度学习入门笔记(一)PyTorch环境配置及安装
		
@ 目录 一.工具安装 1.1 Anaconda 安装 1.2 Pytorch安装 二.编辑器安装 2.1 Pycharm安装 2.2 Jupyter安装 OS: ubuntu 20.04(虚拟机) ...
 - .net Elasticsearch 学习入门笔记
		
一. es安装相关1.elasticsearch安装 运行http://localhost:9200/2.head插件3.bigdesk插件安装(安装细节百度:windows elasticsear ...
 - QT学习入门笔记
		
系统路径 path 添加dll路径,如D:\QT\5.4\mingw491_32. .pro 文件添加 QT += widgets,否则出现qapplication no such file or ...
 - DirectX学习入门笔记(一)
		
原文:https://blog.csdn.net/butcher986115/article/details/50595937 什么是DirectX? DirectX是游戏制作者的API(Appli ...
 - Kotlin学习入门笔记
		
参考资料 官网:https://kotlinlang.org/ 官方文档:https://kotlinlang.org/docs/reference/ Kotlin 源码:https://github ...
 - SpringBoot入门笔记(一)、HelloWorld
		
本文是一篇SprintBoot学习入门笔记 1.打开Eclipse,版本为Oxygen 4.7.0 2.新建项目NewProject->MavenProject->Next->Nex ...
 
随机推荐
- Qt小项目之串口助手控制LED
			
Qt小项目之串口助手控制LED 前言 最近刚学了一点Qt开发上位机,尝试着做个小软件练练手.查找了很多资料,做了一个简单的串口助手,可以实现串口基本发送和接收功能,支持中文显示,还可以控制STM32开 ...
 - 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-5
			
来个目录吧: 第一章-入门 第二章- Entity Framework Core Nuget包管理 第三章-创建.修改.删除.查询 第四章-排序.过滤.分页.分组 第五章-迁移,EF Core 的co ...
 - TomCat 再次发布我的程序
			
打包成.war的步骤就不说了,之后的配置和上一次的不一样. 在Tomcat的conf下的server.xml文件中,重新配置如下 <Service name="xfwweb" ...
 - 研究C语言的新型编译环境TCC
			
C语言综合研究1 搭建一个tcc环境 研究过程: 问题引出:为什么要使用tcc环境,甚至连图形界面都没有,为什么要使用这样的化境? 按照我们学习的本质来讲,可能是为了体验C语言底层的相关特性,但是在研 ...
 - 12.18 Daily Scrum
			
最近大家确实都很忙,所以所有功能的实现要等到下周. Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. ...
 - Linux内核分析作业第五周
			
系统调用的三个层次(下) 一.给MenuOS增加time和time-asm命令 1.克隆并自动编译 MenuOS rm menu -rf 强制删除原menu文件 git clone https://g ...
 - 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现
			
基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...
 - <<浪潮之巅>>阅读笔记二
			
好的文章总是慢慢吸引着你去阅读,这本书的作者是吴军博士,让我很钦佩的是他还是一个很著名的程序员.其实我感觉理科生在写作方面的能力是很欠缺的,我们经常做到了有观点,但是做不到和别人表达清楚你的观点想法, ...
 - Github链接及git学习心得总结
			
众所周知GitHub已经是当下非常流行的代码托管库了,全世界有无数的程序员把他们的代码放在GitHub里.那比起云盘之类的工具,用GitHub有什么好处呢:1. 以后在帖子里只需要扔一个链接,大家就能 ...
 - PAT 1023 组个最小数
			
https://pintia.cn/problem-sets/994805260223102976/problems/994805298269634560 给定数字0-9各若干个.你可以以任意顺序排列 ...