ormlite介绍一

简介: 概述            ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。官方网站:http://ormlite.com/ 如果需要开发android,只需要下载core和android两个jar包: ORMlite的使用 1,建立映射关系 Or

概述

     
     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.   
  4.     @DatabaseField(generatedId=true)  
  5.     private int id;  
  6.   
  7.     @DatabaseField(columnName = "name")  
  8.     private String name;  
  9.   
  10.     @DatabaseField  
  11.     private String location;  
  12.   
  13.     public int getId() {  
  14.         return id;  
  15.     }  
  16.       
  17.     public void setId(int id) {  
  18.         this.id = id;  
  19.     }  
  20.       
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.   
  25.     public void setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.       
  29.     public String getLocation() {  
  30.         return location;  
  31.     }  
  32.       
  33.     public void setLocation(String location) {  
  34.         this.location = location;  
  35.     }  
  36. }  


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

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

 

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


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


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

我解释一下这个的写法:

· 构造函数:

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

· GetInstance方法:

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

· OnCreate

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

· OnUpgrade

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

· getStudentDao和 getSchoolDao

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



3,测试

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

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




可以看到log 里面打出来的


 

目录
相关文章
|
机器学习/深度学习 算法 Python
LightGBM中的特征选择与重要性评估
LightGBM中的特征选择与重要性评估【2月更文挑战第1天】
2685 0
|
监控 数据挖掘 OLAP
深入解析:AnalyticDB中的高级查询优化与性能调优
【10月更文挑战第22天】 AnalyticDB(ADB)是阿里云推出的一款实时OLAP数据库服务,它能够处理大规模的数据分析任务,提供亚秒级的查询响应时间。对于已经熟悉AnalyticDB基本操作的用户来说,如何通过查询优化和性能调优来提高数据处理效率,是进一步提升系统性能的关键。本文将从个人的角度出发,结合实际经验,深入探讨AnalyticDB中的高级查询优化与性能调优技巧。
659 4
|
运维 DataWorks 监控
DataWorks产品使用合集之在 DataWorks 中,配置并管理实时同步任务的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
256 0
|
算法 数据可视化 Java
JAVA规则引擎工具有哪些?
本文对比分析了六种Java规则引擎:Drools、IBM ODM (JRules)、Easy Rules、JBPM、OpenL Tablets以及Apache Camel结合规则组件的应用。Drools是一款功能全面的业务规则管理系统,支持DRL文件定义规则、高效的规则匹配算法、复杂的规则流及决策表,并易于与Java应用集成。IBM ODM (原JRules)提供了强大的规则管理功能,包括Web界面和Eclipse插件定义管理规则、直观的决策表和决策树、REST和Java API集成选项及优化的性能。
2442 3
|
机器学习/深度学习 PyTorch 算法框架/工具
数据平衡与采样:使用 DataLoader 解决类别不平衡问题
【8月更文第29天】在机器学习项目中,类别不平衡问题非常常见,特别是在二分类或多分类任务中。当数据集中某个类别的样本远少于其他类别时,模型可能会偏向于预测样本数较多的类别,导致少数类别的预测性能较差。为了解决这个问题,可以采用不同的策略来平衡数据集,包括过采样(oversampling)、欠采样(undersampling)以及合成样本生成等方法。本文将介绍如何利用 PyTorch 的 `DataLoader` 来处理类别不平衡问题,并给出具体的代码示例。
2948 2
|
关系型数据库 API 数据库
SqlAlchemy 2.0 中文文档(二十三)(4)
SqlAlchemy 2.0 中文文档(二十三)
283 0
|
关系型数据库 MySQL 大数据
【大数据系列之MySQL】(二十一):Navicat读取本地csv文件到MySQL数据库中
【大数据系列之MySQL】(二十一):Navicat读取本地csv文件到MySQL数据库中
864 0
【大数据系列之MySQL】(二十一):Navicat读取本地csv文件到MySQL数据库中
|
SQL 存储 消息中间件
一个线上SQL死锁异常分析:深入了解事务和锁
引发死锁的原因是什么?如何避免?本文详细介绍了和死锁有关的知识点,通过深入分析MySQL事务和锁的机制,结合案例背景,找到了问题的所在,并梳理了解决方案,详解其原理。希望对同学们有所启发。
一个线上SQL死锁异常分析:深入了解事务和锁
|
机器学习/深度学习 新零售 自然语言处理
史上最全!阿里智能人机交互的核心技术解析
过去20多年,互联网及移动互联网将人类带到了一个全新的时代,如果用一个词来总结和概括这个时代的话,“连接”这个词再合适不过了。这个时代主要建立了四种连接:第一,人和商品的连接;第二,人和人的连接;第三,人和信息的连接;第四,人和设备的连接。
9821 0
|
2天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1439 1

热门文章

最新文章