概述

     

ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。

官方网站:http://ormlite.com/

如果需要开发android,只需要下载core和android两个jar包:




ORMlite的使用


1,建立映射关系


Ormlite与数据库的映射关系式通过注释来说明的。

注释分为对于表的和对于单个列的:@DatabaseTable ,注释表的,
@DatabaseField 注释单个列的。

看例子很好很好懂:

解释一下上面的例子,如果想以类student来建立一张表。

· 首先注释:table,@DatabaseTable 如果默认为类名的话,后面不需要添加类名注释。

· 然后:确定需要的字段,在字段上面添加注释:@DatabaseField 如果对字段有特别的要求,那么添加以下相关的注释,例如id。

同理,school类为:

  1. @DatabaseTable(tableName = "school")
  2. public class School {
  3. @DatabaseField(generatedId=true)
  4. private int id;
  5. @DatabaseField(columnName = "name")
  6. private String name;
  7. @DatabaseField
  8. private String location;
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getLocation() {
  22. return location;
  23. }
  24. public void setLocation(String location) {
  25. this.location = location;
  26. }
  27. }

2,建立数据库和基本的工具

在android的开发中,google原版封装了一个SqliteOpenHelper,供开发者调用,在OrmLite中,对原版的工具进行了加强,提供一个继承自SqliteOpenHelper的OrmLiteSqliteOpenHelper工具。

像android一样,我们继承这个工具类。

  1. public class DBHelper extends OrmLiteSqliteOpenHelper{
  2. private final static int DATABASE_VERSION = 1;
  3. Dao<Student, Integer> mStudentDao;
  4. Dao<School, Integer> mSchoolDao;
  5. private static final String DB_NAME = "orm";
  6. private static DBHelper mDbHelper;
  7. private DBHelper(Context context) {
  8. super(context, DB_NAME, null, DATABASE_VERSION);
  9. }
  10. public static DBHelper getInstance(Context context) {
  11. if (mDbHelper == null) {
  12. mDbHelper = new DBHelper(context);
  13. }
  14. return mDbHelper;
  15. }
  16. @Override
  17. public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
  18. try {
  19. TableUtils.createTableIfNotExists(connectionSource, Student.class);
  20. TableUtils.createTableIfNotExists(connectionSource, School.class);
  21. } catch (SQLException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. @Override
  26. public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
  27. int arg3) {
  28. }
  29. public Dao<Student, Integer> getStudentDao() throws SQLException {
  30. if (mStudentDao == null) {
  31. mStudentDao = getDao(Student.class);
  32. }
  33. return mStudentDao;
  34. }
  35. public Dao<School, Integer> getSchoolDao() throws SQLException {
  36. if (mSchoolDao == null) {
  37. mSchoolDao = getDao(School.class);
  38. }
  39. return mSchoolDao;
  40. }
  41. }

如果写过android的SqliteOpenHelper对这个继承类的写法一定不会陌生。

我解释一下这个的写法:

· 构造函数:

必须调用父类的构造函数,能给它提供的参数有:来自android的context,数据库名称,和版本号。

· GetInstance方法:

这个只是为了方便,让DbHelper只保留一个对象的实例,即单例模型。

· OnCreate

实现父类的抽象方法,创建数据库。

· OnUpgrade

在构造方法中的version如果改变的话,调用这个方法,至于想做什么,这个你来定。常用于app 的版本更新。

· getStudentDao和 getSchoolDao

获取数据库的dao对象,这些dao对象用于后来的数据库操作。dao的声明时泛型了两个参数,第一个是dao操作的关联对象,第二个是标记数据表的ID。这个ID一般很少使用,除非对数据表的ID进行操作的时候。


3,测试

  1. public class MainActivity extends Activity {
  2. private static final String TAG = "MainActivity";
  3. DBHelper mDbHelper;
  4. Dao<Student, Integer> mStudentDao;
  5. Dao<School, Integer> mSchoolDao;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. mDbHelper = DBHelper.getInstance(this);
  10. try {
  11. mSchoolDao = mDbHelper.getSchoolDao();
  12. mStudentDao = mDbHelper.getStudentDao();
  13. } catch (SQLException e) {
  14. Log.e(TAG, "constructor exception", e);
  15. }
  16. testDao();
  17. }
  18. private void testDao() {
  19. Student student1 = new Student();
  20. student1.setName("miles");
  21. student1.setSchoolId(0);
  22. Student student2 = new Student();
  23. student2.setName("li");
  24. student2.setSchoolId(0);
  25. School school1 = new School();
  26. school1.setName("university");
  27. school1.setLocation("shanghai");
  28. School school2 = new School();
  29. school2.setName("middle school");
  30. school2.setLocation("hubei");
  31. try {
  32. mSchoolDao.create(school1);
  33. mSchoolDao.create(school2);
  34. mStudentDao.create(student1);
  35. mStudentDao.create(student2);
  36. //获取表中所有的student。
  37. List<Student> students=mStudentDao.queryForAll();
  38. Log.e(TAG, "before delete the student list:size is:"+students.size());
  39. for (int i = 0; i < students.size(); i++) {
  40. Log.e(TAG, students.get(i).getName());
  41. }
  42. mStudentDao.delete(student1);
  43. students=mStudentDao.queryForAll();
  44. Log.e(TAG, "after delete the student list:"+students.size());
  45. for (int i = 0; i < students.size(); i++) {
  46. Log.e(TAG, students.get(i).getName());
  47. }
  48. } catch (SQLException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }

在DDMS里面的 File Explore里面的data/data/项目包名/databases里面可以看到有一个db的文件。

可以看到log 里面打出来的

ormlite介绍一的更多相关文章

  1. Android 数据库框架OrmLite的使用(一)

    在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...

  2. 谈谈我的入门级实体框架Loogn.OrmLite

    每次看到有新的ORM的时候,我总会留意一下,因为自己也写过一个这样的框架,人总是有比较之心的.我可能会down下来跑一跑,也可能不会这么做,这个取决于跑起来的难易程度.我是很懒的,有XML配置或其他稍 ...

  3. GreenDao介绍

    GreenDao介绍 greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案 何为ORM? ORM(Object/Relation Mapping): 对象/关系 ...

  4. OrmLite数据库的使用方法

    第一步:导入架包     1.将orm的两个支持包放入project视图下的你的工程的lib目录里(这两个JAR包网上都有,GitHub上最新)     2.添加依赖:在file文件目录下的proje ...

  5. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  6. Android—Ormlite框架简单的操作数据库

    大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...

  7. ServiceStack.OrmLite 笔记2 -增

    ServiceStack.OrmLite 笔记2 这篇主要介绍 增加 db.Insert(new Employee { Id = 1, Name = "Employee 1" }) ...

  8. [ 转]Android快速开发–使用ORMLite操作数据库

    OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来 ...

  9. ormlite性能对比

    看了一下现在的android设备,性能都不差,就懒得直接用sqlite,直接上ORM框架把,上网搜了一圈,觉得androrm, ormlite 这两个不错,当然,还有点别的,这里就不多做介绍,竟然说明 ...

随机推荐

  1. 51Nod 1781 跑的比谁都快

    香港记者跑的比谁都快是众所周知的常识. 现在,香港记者站在一颗有 n 个点的树的根结点上(即1号点),编号为 i 的点拥有权值 a[i] ,数据保证每个点的编号都小于它任意孩子结点的别号. 我们假定这 ...

  2. 【SDOI2009】学校食堂

    Description 小F的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用 ...

  3. hdu5558 后缀数组

    Alice's Classified Message Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 131072/131072 K ...

  4. 10-8 uva1262密码

    题意:有两个图,每一列都存在的字母选作密码,就第k大的密码 思路: 找出各个位置上的密码, 假设: 第1个字母只能是{A,C,D,W}, 第2个字母只能是{B,O,P}, 第3个字母只能是{G,M,O ...

  5. [bzoj4873]寿司餐厅

    来自FallDream的博客,未经允许,请勿转载,谢谢. Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个代号ai和美味度di,i,不同种类的 ...

  6. bzoj 1217: [HNOI2003]消防局的设立

    Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了 ...

  7. bzoj 1974: [Sdoi2010]代码拍卖会

    Description 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代 码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPi g不想把代码库给所有想要的小猪,只想 ...

  8. 利用Express模拟web安全之---xss的攻与防

    一.什么是XSS? 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意 ...

  9. 利用Apach ab对nodejs进行并发负载的压力测试

    大家应该都有听过,nodejs性能优越,并发也很好之类的话,那我们用Apache ab对node这个空框架测试一下,然后再对一些网站测试一下,或或少一定的参考意义把. Apache ab测试工具是模拟 ...

  10. nginx的yum安装,基本参数使用,编译参数说明和Nginx基本配置,模块安装

    nginx的yum安装从nginx官网获取源 vim /etc/yum.repose.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx.or ...