文档章节

安卓端强大数据库ORM框架(XAndrDB)的使用及介绍

xiaolei123
 xiaolei123
发布于 2016/07/07 23:25
字数 1115
阅读 98
收藏 3

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

##前言 在我编写这个框架之前,我曾经深度反感对数据库操作的一系列重复无用功的前奏,只为向数据库输入一条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] ##更多新特性正在添加中...

© 著作权归作者所有

xiaolei123

xiaolei123

粉丝 41
博文 62
码字总数 39506
作品 3
深圳
私信 提问
Android 的 ORM 框架--XAndrDB

安卓上一个开源的ORM 数据库操作框架,安卓端的MyBatis. AndrDB 关于编写这个框架的初衷,为的就是能在安卓中使用对象一样操作数据库, 但是一想操作数据库SQLite使用起来这么麻烦。所以结合...

xiaolei123
2016/02/15
417
0
Android中如何使用ormlite实现持久化

Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦(主要是我对 sql语言不熟悉)。而Java Web开发中有很多orm框架,但是想直接放...

鉴客
2011/11/22
4.5K
3
ORM轻量级框架---ActiveAndroid

ORM即Object-Relational Mapping,对象关系映射。简单理解就是把我们Java的对象与数据库里面的记录进行映射,可以把实体对象持久化到数据库中,也能把查询到的记录映射成Java对象。ORM让我们...

Jack_1900
2014/07/29
2.2K
0
「Android」GreenDao

版本:greenDAO 3.2.2 官网:http://greenrobot.org/greendao/ GitHub:https://github.com/greenrobot/greenDAO 写在前面: 这个库极大的优化了我们使用SQLite数据库,但对SQLite数据库及其语...

为安然
2018/07/30
0
0
android快速开发框架afinal(数据库篇)

今天给大家介绍下#afinal#来操作android的数据库sqlite。 #afinal#是一个android的orm、ioc快速开发框架,里面包含了四大功能:空间的id绑定和事件绑定功能;网络图片的显示功能(里面包 含了...

方毅超
2014/04/28
163
0

没有更多内容

加载失败,请刷新页面

加载更多

mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
15分钟前
7
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
20分钟前
2
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
47分钟前
6
0
06.全局锁和表锁

根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是flush tables with read lock(FTW...

scgaopan
今天
7
0
图解安装CentOS8

最近正式发布了CentOS8!迫不及待地准备下载了CentOS8镜像,准备体验下,工作繁忙无暇理会。 今天抽空安装体验下~ 可从CentOS官网下载:https://centos.org/download/ 为了快速可以选择从国...

技术训练营
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部