安卓端强大数据库ORM框架(XAndrDB)的使用及介绍XAndrDB一、新建数据库二、或者你这样新建数据库三、查询操作四、新增操作五、删除操作六、更新数据操作

前言

在我编写这个框架之前,我曾经深度反感对数据库操作的一系列重复无用功的前奏,只为向数据库输入一条SQL语句和把返回值封装成一个JavaBean对象。 自从我接触到了还在我在做一个菜鸟WEB开发人员时候,MyBatis是我接触到的最易入门上手使用的一个ORM框架,在安卓端开发时候, 我发现市面上竟然没有一个对安卓端数据库Sqlite一个很好地ORM框架,于是我拜读了mybatis源码,然后通过自己的理解, 自己编写一个安卓端的MyBatis

XAndrDB

安卓端开源数据库ORM操作框架。

使用说明:

在使用本框架之前首先 将本项目根目录下的本项目引入到你的项目中,然后。 在你的app的AndroidManifest.xml中配置:

    <application
    android:name="com.xcode.xandrdb.Session.SessionApplication"
    ……
    >

一、新建数据库

package com.xcode.xandrdb.mapper;
import com.xcode.xandrdb.annotation.Create;
    
public interface test
{
    @Create("CREATE TABLE 'ChatItem' ('content' TEXT NOT NULL,'fromuser' TEXT,'type' TEXT,'touser' TEXT,'time' TEXT,'id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)")
    public void createOnChat2();
}

二、或者你这样新建数据库

1.新建一个数据库表的类

import com.xcode.xandrdb.annotation.Table;

public class OnChat
{
    @Table.AUTOINCREMENT
    @Table.NOT_NULL
    @Table.PRIMARY_KEY
    private int id;
    private String User;
    private String lastmsg;
    private String time;
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getUser()
    {
        return User;
    }
    public void setUser(String user)
    {
        User = user;
    }
    public String getLastmsg()
    {
        return lastmsg;
    }
    public void setLastmsg(String lastmsg)
    {
        this.lastmsg = lastmsg;
    }
    public String getTime()
    {
        return time;
    }
    public void setTime(String time)
    {
        this.time = time;
    }
}

2.新建数据库

package com.xcode.xandrdb.mapper;
import com.xcode.xandrdb.annotation.Create;
    
public interface test
{
    @Create.Auto(OnChat.class)
    public void createOnChat();
}

这样的第二种建立方式很明显方便很多。

三、查询操作

优点就在于,你不用关心怎么把查询出来的数据封装成JavaBean对象,你只需要写好返回值类型。

package com.xcode.xandrdb.mapper;
    
import com.xcode.xandrdb.User;
import com.xcode.xandrdb.annotation.Create;
import com.xcode.xandrdb.annotation.Delete;
import com.xcode.xandrdb.annotation.Insert;
import com.xcode.xandrdb.annotation.Select;
import com.xcode.xandrdb.annotation.Update;
import com.xcode.xandrdb.annotation.name;
    
public interface test
{
    //查询操作
    @Select("SELECT * FROM xiaolei WHERE _id = #{id}")
    public User[] select(@Param("id")int id);
}

四、新增操作

package com.xcode.xandrdb.mapper;
    
import com.xcode.xandrdb.User;
import com.xcode.xandrdb.annotation.Create;
import com.xcode.xandrdb.annotation.Delete;
import com.xcode.xandrdb.annotation.Insert;
import com.xcode.xandrdb.annotation.Select;
import com.xcode.xandrdb.annotation.Update;
import com.xcode.xandrdb.annotation.name;
    
public interface test
{
    //插入的操作
    @Insert("INSERT INTO xiaolei ('sname', 'snumber') VALUES ('xiaolei', 'xiaolei')")
    public String insert();
}

五、删除操作

package com.xcode.xandrdb.mapper;
    
import com.xcode.xandrdb.User;
import com.xcode.xandrdb.annotation.Create;
import com.xcode.xandrdb.annotation.Delete;
import com.xcode.xandrdb.annotation.Insert;
import com.xcode.xandrdb.annotation.Select;
import com.xcode.xandrdb.annotation.Update;
import com.xcode.xandrdb.annotation.name;
    
public interface test
{
    //删除操作
    @Delete("delete from xiaolei where id = #{id}")
    public String delete(@Param("id")int id);
}

六、更新数据操作

package com.xcode.xandrdb.mapper;
    
import com.xcode.xandrdb.User;
import com.xcode.xandrdb.annotation.Create;
import com.xcode.xandrdb.annotation.Delete;
import com.xcode.xandrdb.annotation.Insert;
import com.xcode.xandrdb.annotation.Select;
import com.xcode.xandrdb.annotation.Update;
import com.xcode.xandrdb.annotation.name;
    
public interface test
{
    //更新操作
    @Update("UPDATE xiaolei SET sname='xiaolei2', snumber='xiaolei2' WHERE (_id=#{id})")
    public String update(@Param("id")int id);
}

这里只是定义了一系列的数据库操作action的Mapper。那我们看看怎么使用这些Mapper:

Session session = SessionFactory.getSession(new SessionConfig().setDBName("xiaolei"));
test t1 = session.getMapper(test.class);
User users[] = t1.select(1);
System.out.println(users);

支持数据缓存

有时候,我需要在两秒内对查询到的数据进行缓存,不需要每次要数据就去数据库中查询。那么这个特性可以帮助你。

public interface test
{
    //查询操作
    @Catch(500)
    @Select("SELECT * FROM xiaolei where sname=#{name}")
    public List<User> select(@Param("name")String name);
}

这个@Catch(500)注解 参数是你自己设置的缓存的时间。不写参数默认为 2 * 1000 ms。

支持事务

有时候我需要批量向数据库中插入大量的数据,可是大量数据的写入会导致整个APP卡顿。那么为了解决这个问题 你可以这样:

public interface test
{
    @Transation
    @Insert("INSERT INTO xiaolei ('sname', 'snumber') VALUES ('xiaolei', 'xiaolei')")
    public String insert();
}

当你需要进行大量数据的操作的时候,你可以使用 @Transation 注解来解决这个问题。

经测试 在模拟器中循环插入五十条数据,没有开启 Transation 的时候 耗时:220ms

开启了Transation的时候,耗时:7ms。并且内部使用Handler进行异步操作。绝对不会影响到APP的流畅性。

当然在你操作完成之后 别忘了调用 session.commit();。否则是不会生效的。

是的,所有的数据库操作都必须使用Session 对象,去操作。

然后使用Session 对象拿到mapper,内部通过动态代理操作返回你一个mapper对象,然后你操作你的mapper里面定义的方法就是在操作数据库了。

这是一个完全面向切面,使用 自定义注解+反射+动态代理 结合在一起发挥强大功能的数据库框架。

[GIT地址:http://git.oschina.net/xcode_xiao/XAndrDB]

更多新特性正在添加中...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大闲人柴毛毛

Mysql性能优化

 1. 优化SQL   1)通过show status了解各种sql的执行频率         show status like 'Com_%' ...

35811
来自专栏杂七杂八

Scrapy爬取伯乐在线

Scrapy爬取伯乐在线文章 准备工作: python环境,我是用Anaconda Scrapy环境,上一篇文章提到过 MySQL,我们准备将爬取的数据保存到M...

2829
来自专栏乐沙弥的世界

共享池的调整与优化(Shared pool Tuning)

--=======================================

732
来自专栏乐沙弥的世界

RMAN 提示符下执行SQL语句

       在手动恢复数据库时,有时候需要在SQL*Plus提示符以及操作系统提示符,RMAN提示符下来回切换显得有些繁琐。实际上RMAN为我们提供了命令行下...

913
来自专栏岑玉海

Hive Tunning(二)优化存储

接着上一章我们讲的hive的连接策略,现在我们讲一下hive的数据存储。 下面是hive支持的数据存储格式,有我们常见的文本,JSON,XML,这里我们主要...

3674
来自专栏Vamei实验室

被解放的姜戈02 庄园疑云

上一回说到,姜戈的江湖初体验:如何架设服务器,如何回复http请求,如何创建App。这一回,我们要走入糖果庄园。 数据库是一所大庄园,藏着各种宝贝。一个没有数据...

2005
来自专栏Linyb极客之路

Java面试中常问的数据库方面问题

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的

893
来自专栏逸鹏说道

SQL Server 使用全文索引进行页面搜索

概述 全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一...

3017
来自专栏逸鹏说道

SQL Server 使用全文索引进行页面搜索

全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类...

2745
来自专栏互联网杂技

SQL注入攻防入门详解

毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几...

39610

扫码关注云+社区