android Sqlite Orm 实现方式
来源:互联网 发布:现货原油分析软件 编辑:程序博客网 时间:2024/05/22 03:08
前言
一直想对数据库的操作进行一个用法整理,翻开现在比较火的GreenDao,里面已经被封装的看不出来最基本CRUD语法了,当然不是说GreenDao不好,至少对初学者来说不太好,学习就应该依序渐进,知其然知其所以然才好。这篇参照某大神blog,加上自己理解整理而来,属于较早期的数据库操作模式。希望对初学者有好的帮助
添加了数据库可视化插件debug_db,方便查看。
1. 什么是ORM
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换[1] 。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”。简单的理解为对象和数据库表字段的简单映射关系
2. 下载 android ORMLite Jar
http://ormlite.com/releases/
在这两版的基础进行操作
3. 配置Bean类
使用不同注解来标示表属性,(字段名,字段类型,主键,外键 etc)
@DatabaseTable(tableName = "tb_article")public class Article{ @DatabaseField(generatedId = true) private int id; @DatabaseField private String title; @DatabaseField(canBeNull = true, foreign = true, columnName = "user_id", foreignAutoRefresh = true) private User user; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Article [id=" + id + ", title=" + title + ", user=" + user + "]"; }}
4. 编写DAO类
一般写法就是Dao 和 Bean 对应,dao是对具体表操作的封装,而Bean则是表的映射
package dragger2.nuoyuan.com.myapplication.db;import android.content.Context;import com.j256.ormlite.dao.Dao;import java.sql.SQLException;import java.util.List;import dragger2.nuoyuan.com.myapplication.bean.Student;public class StudentDao { private Context context; private Dao<Student, Integer> userDaoOpe; private DatabaseHelper helper; public StudentDao(Context context) { this.context = context; try { helper = DatabaseHelper.getHelper(context); userDaoOpe = helper.getDao(Student.class); } catch (SQLException e) { e.printStackTrace(); } } /** * 增加一个用户 * * @param student * @throws SQLException */ public void add(Student student) { try { userDaoOpe.create(student); } catch (SQLException e) { e.printStackTrace(); } } public Student get(int id) { try { return userDaoOpe.queryForId(id); } catch (SQLException e) { e.printStackTrace(); } return null; } public List<Student> queryAll() { try { return userDaoOpe.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return null; }}
对数据库操作需要用到Sqlite提供的底层Api SQLiteOpenHelper 的帮助,OrmLiteSqliteOpenHelper已经在SQLiteOpenHelper的基础上做了二次封装,我们直接继承OrmLiteSqliteOpenHelper类实现 onCreate(SQLiteDatabase database,ConnectionSource connectionSource)
和 onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) ,来进行数据库的操作以及数据库的升级操作
然后使用单例公布出一个创建实例的方法,getHelper用于获取我们的操作数据库的OpenHelper 实例。
5. 测试
由于测试使用Context环境,无法用AndroidStudo中单元测试来测,推荐在Eclipse中进行尝试测试,需要在Eclipse中配置测试环境
package dragger2.nuoyuan.com.myapplication;import com.j256.ormlite.dao.Dao;import java.sql.SQLException;import java.util.List;import dragger2.nuoyuan.com.myapplication.bean.Article;import dragger2.nuoyuan.com.myapplication.bean.Student;import dragger2.nuoyuan.com.myapplication.bean.User;import dragger2.nuoyuan.com.myapplication.db.ArticleDao;import dragger2.nuoyuan.com.myapplication.db.DatabaseHelper;import dragger2.nuoyuan.com.myapplication.db.StudentDao;import dragger2.nuoyuan.com.myapplication.db.UserDao;import dragger2.nuoyuan.com.myapplication.utils.L;public class TestUtils { public void testAddArticle() { User u = new User(); u.setName("000"); new UserDao(MyApp.context).add(u); Article article = new Article(); article.setTitle("hello world"); article.setUser(u); new ArticleDao(MyApp.context).add(article); } public void testGetArticleById() { Article article = new ArticleDao(MyApp.context).get(1); L.e(article.getUser() + " , " + article.getTitle()); } public void testGetArticleWithUser() { Article article = new ArticleDao(MyApp.context).getArticleWithUser(1); L.e(article.getUser() + " , " + article.getTitle()); } public void testListArticlesByUserId() { List<Article> articles = new ArticleDao(MyApp.context).listByUserId(1); L.e(articles.toString()); } public void testGetUserById() { User user = new UserDao(MyApp.context).get(1); L.e(user.getName()); if (user.getArticles() != null) for (Article article : user.getArticles()) { L.e(article.toString()); } } public void testAddStudent() throws SQLException { Dao dao = DatabaseHelper.getHelper(MyApp.context).getDao(Student.class); Student student = new Student(); student.setDao(dao); student.setName("杨卫超"); student.create(); } public String querystudentDao() throws SQLException { Student user = new StudentDao(MyApp.context).get(1); return user.toString(); }}
查看效果
注:ORMLite还提供了一些基类ORMLiteBaseActivity,ORMLiteBaseService之类的,便于数据库操作的,这里不做考虑,毕竟项目中很大可能自己也需要继承自己的BaseActvity之类的。
简单的使用到此,ORMLITE 对象映射到表分析
源码下载: http://pan.baidu.com/s/1geRTRBt
–
引用
Orm入门 http://blog.csdn.net/lmj623565791/article/details/39121377
- android Sqlite Orm 实现方式
- 反射实现Android Sqlite Orm
- android sqlite orm框架
- android sqlite 数据库 orm
- android sqlite的orm框架
- Android 轻量级sqlite orm 框架
- Android SQLite ORM的框架
- greenDAO – Android ORM for SQLite
- 一个简单的Android SQLite ORM框架
- greenDAO – Android ORM for SQLite
- android sqlite查询方式
- Android存储方式-SQlite
- 轻量级的利用Annotation方式实现Android SQLite的框架
- android 数据库对象化操作-ORM实现-用对象的方式操作数据库
- Android SQlite ORM 仿hibernate数据持久层工具
- android Sqlite操作之-- 自定义ORM关系实体映射类
- Android下Sqlite数据库ORM框架之GreenDao详解
- Android下Sqlite数据库ORM框架之GreenDao详解
- 详解Java GC的工作原理+Minor GC、FullGC
- 深入PHP面向对象、模式与实践——执行及描述任务(5)
- 一起做RGB-D SLAM(8) (关于调试与补充内容)
- 查询窗口信息刷新重载
- NodeJS-04 events事件模块
- android Sqlite Orm 实现方式
- UVa 232 Crossword Answers(枚举+输入输出)
- Struts2工作原理
- 微信小程序 选项卡demo
- 阅读理解FireFox浏览器插件开发文档(二)
- 第一次安装android studio时候弹出unable to access android sdk add-on list解决方法
- OSAL操作系统实验学习笔记08
- GSON解析JSON
- Oracle之select into var1