ORM, ormlite和sqlite

原创 2016年05月30日 17:08:34

背景知识

ORM

它的英文全称是Object Relational Mapping,意思是对象关系映射;如果接触过Java EE开发的,一定知道Java Web开发就有一个类似的数据库映射框架——Hibernate。简单来说,就是我们定义一个实体类,利用这个框架,它可以帮我们吧这个实体映射到我们的数据库中。

Hibernate

是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Java Bean

对于j2ee的初学者,javabean确实是一个让人容易困惑的概念。现在来说说我自己的理解。
javabean其实包含多个方面的含义。
1. 顾名思义,bean,保存数据的实体,通常与数据库中的表对应。也称为,pojo,entity,domain。比如Person,Apple等,只有private属性和public setxxxx和getxxx。具体实例就是对应表中的一行。那些hibernate,ibatis等orm框架,都支持它们和表的互相映射。
2. 这个就比较高大上,也比较抽象了。javabean被称为完成特定功能的组件。不是有高内聚低耦合的说法么?它就是这样一组java类集合。

Android 数据库框架ormlite

android上sqlite已经比较好用,但是如果需要在android上像J2EE那样开发的话那么sqlite还是显得比较复杂,这个时候你当然可以选择一些android平台上的ORM框架。
主要功能:
通过添加注解设置自己的类。
强大的抽象数据库访问对象(DAO)类。
通过灵活的QueryBuilder轻松构建各种查询。
支持MySQL、Postgres、Microsoft SQL Server、H2、Derby、HSQLDB、Sqllite且可以相对容易的扩展到其他数据库。
临时支持(Provisional support)DB2、Oracle、ODBC和Netezza。如果不支持你的数据库,联系作者。
处理“编译”重复查询任务的SQL语句。
通过对象类型的属性支持“外”对象,数据库中只存储外对象的id。
基本支持数据库事务。
自动生成创建、删除数据库表的SQL。
支持Spring配置。
支持不用注解配置表和字段。
支持Android SQLite数据库API的本地调用。

ORMlite的使用例子

ORMlite通过Java注解的方式来建立起与数据库的映射关系
如我们现在想要建立一个简单的数据库test.db并创建一张表person来记录一个人的名字,年龄,住址等等。

建立bean类

首先,建立我们的Bean类Person,并通过注解的方式与数据库联系起来

@DatabaseTable(tableName = "person")
public class Person {

    @DatabaseField(generatedId=true)
    private int id;
    @DatabaseField(columnName="name")
    private String name;
    @DatabaseField(columnName="age")
    private int age;
    @DatabaseField(columnName="address")
    private String address;
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the address
     */
    public String getAddress() {
        return address;
    }
    /**
     * @param address the address to set
     */
    public void setAddress(String address) {
        this.address = address;
    }

创建数据库

与Android中的数据库创建相似,使用OrmLite创建数据库需要我们创建一个SqlOpenHelper继承OrmLiteSqliteOpenHelper,在OrmLiteSqliteOpenHelper也有两个重要方法,分别是onCreate和onUpgrade,负责数据库创建以及升级时的操作

public class MySqlOpenHelper extends OrmLiteSqliteOpenHelper {

    private Dao<Person, Integer> mPersonDao;

    public MySqlOpenHelper(Context context) {
        super(context, "test", null, 1);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
        // TODO Auto-generated method stub
        try {
            //创建数据表
            TableUtils.createTableIfNotExists(arg1, Person.class);
        } catch (java.sql.SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
            int arg3) {
        // TODO Auto-generated method stub

    }

    public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException {
        if (mPersonDao == null) {
            mPersonDao = getDao(Person.class);
        }
        return mPersonDao;
    }

}

使用android自带的SQLiteOpenHelper

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class dbHelper extends SQLiteOpenHelper {

    private final static String DATABASE_NAME="sec_db";
    private final static int DATABASE_VERSION=1;
    private final static String TABLE_NAME="sec_pwd";
    public final static String FIELD_ID="_id"; 
    public final static String FIELD_TITLE="sec_Title";

    public dbHelper(Context context)
    {
        super(context, DATABASE_NAME,null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String sql="Create table "+TABLE_NAME+"("+FIELD_ID+" integer primary key autoincrement,"
        +FIELD_TITLE+" text );";
        db.execSQL(sql);                
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        String sql=" DROP TABLE IF EXISTS "+TABLE_NAME;
        db.execSQL(sql);
        onCreate(db);
    }

    public Cursor select()
    {
        SQLiteDatabase db=this.getReadableDatabase();
        Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null,  " _id desc");
        return cursor;
    }

    public long insert(String Title)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues cv=new ContentValues(); 
        cv.put(FIELD_TITLE, Title);
        long row=db.insert(TABLE_NAME, null, cv);
        return row;
    }

    public void delete(int id)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        String where=FIELD_ID+"=?";
        String[] whereValue={Integer.toString(id)};
        db.delete(TABLE_NAME, where, whereValue);
    }

    public void update(int id,String Title)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        String where=FIELD_ID+"=?";
        String[] whereValue={Integer.toString(id)};
        ContentValues cv=new ContentValues(); 
        cv.put(FIELD_TITLE, Title);
        db.update(TABLE_NAME, cv, where, whereValue);
    }    
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android开源orm框架ormlite

  • 2013年07月23日 14:15
  • 198KB
  • 下载

android使用orm框架ormlite在控制台打印log日志信息

在默认情况下,在android下默认只打印info级别的日志信息,所以在默认情况只能打印ormlite中创建数据库表的语句,而对于数据的插入和查询等sql语句是不会打印出来的。在ormlite中提供了...

android开发中类似hibernate的orm框架-ormlite

为框架挂了,这个问题调了一上午 /** * 一定要在close方法中这里把Dao指向null,不然会出现Most one of id,generatedId,generatedIdSequenc...
  • fxtxz2
  • fxtxz2
  • 2012年06月08日 20:23
  • 2885

Android ORM框架介绍之OrmLite注解与封装

Android ORM框架介绍之OrmLite注解与封装OrmLite库引入compile 'com.j256.ormlite:ormlite-android:5.0'OrmLite注解 @Datab...

Android ORM数据库之OrmLite使用框架及源码分析

一、简介  OrmLite是一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机率。  首先可以去它的官网看看www.ormlite.com,它的...

Android常用数据库ORM框架ORMlite和GreenDao比较

Android常用数据库ORM框架ORMlite和GreenDao比较,包含DEMO工程文件
  • tyyj90
  • tyyj90
  • 2016年01月03日 13:47
  • 3397

ANDROID轻量级ORM框架ORMLITE学习笔记(1)-初识

何为Orm? Object Relational Mapping,即对象关系映射. 作用就在于把业务逻辑与关系数据库相关联.对于初学者的我们来说,其实就是摆脱了访问数据库操作的细节,不用再去写复杂...

ormlite对象直接建Sqlite库demo

  • 2014年09月16日 09:53
  • 1.89MB
  • 下载

Android数据库进阶-从SQLite到ORMLite封装

项目代码: CameloeAnthony/Ant 博客原地址:Android数据库进阶-从SQLite到ORMLite封装 前言几乎每一个android项目中,都必不可少的会使用数据库的操...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORM, ormlite和sqlite
举报原因:
原因补充:

(最多只允许输入30个字)