当前位置:  软件>java软件

Android 的 ORM 框架 DBExecutor

    来源:    发布时间:2014-12-19

    本文导语:  DBExecutor主要的功能 使用了读写锁,支持多线程操作数据。 支持事务 支持ORM 缓存Sql,缓存表结构 这个类库主要用于android 数据库操作。 始终围绕着一个类对应一个表的概念。 只要创建一个实体类,就不用当心它怎么存储在...

DBExecutor主要的功能

  • 使用了读写锁,支持多线程操作数据。

  • 支持事务

  • 支持ORM

  • 缓存Sql,缓存表结构

这个类库主要用于android 数据库操作。 始终围绕着一个类对应一个表的概念。 只要创建一个实体类,就不用当心它怎么存储在数据库中,不用重新写增删改查的代码。基本的功能已经帮你实现好了。 增删改查数据只要一句搞定

boolean isSuccess = db.insert(person);
boolean isSuccess = db.updateById(person);
boolean isSuccess  = db.deleteById(Person.class,1);
List persons = db.findAll(Person.class);
  • ---library_DB02 是项目的源码。

  • ---DBLibrary_TestCase 是项目的测试用例,主要介绍该类库详细的用法

  • ---doc 是网页文档

  • ---db.jar 是该类库的jar包

  • ---doc.chm 是该类库的chm文档

  • ---设计框架.docx 是该类库的uml图生成的图片

  • ---设计框架.mdl 是该类库的uml图,描述整个类库的架构

如果有什么建议可以发我邮箱 告知。794629068@qq.com

最后非常感谢XUtils代码的作者wyouflf。 该代码是对开源项目XUtils的数据库模块进行重构,及性能优化。 因为他的框架设计的非常合理。很多都是在其基础上完善的。

1.定义一个简单对应表的实体类
@Table(name = "Person")
public class Person {
 @Id(autoIncrement = true)
 private int id;
 private String name;
 private int age;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

}

必须包含@Id,@Id声明的字段对应表里的id。autoIncrement = true 自增长。 @Table 声明表的名字。@Table可以不需要。如果没有@Table以包名+类名为表的名字

支持基本类型以及基本类型的封装类,java.sql.Date 定义的字段。如果要支持其他类型的字段请查看DBLibrary_TestCase中的TestColumnConverter.java

2.主要类

1.DBExecutor主要用于执行sql语句,一个数据库对应一个DBExecutor

获取默认数据库的执行者 DBExecutor executor = DBExecutor.getInstance(context); 获取指定的数据库的执行者 DBExecutor.getInstance(dbHelper)

主要的方法用 db.execute(sqls),db.executeQuery(sql)等 封装了简基本的增删改查操作,使用db.insert(person);可以保存一条记录。 执行sql的时候。不用考虑表是否创建。如果表不存在,会自动创建。

2.Sql用于DBExecutor 执行的Sql

与sql文本语句是有差别的。 区别在于Sql 里包含
sql.getTable();//操作的表
sql.getSqlText();//可以带有?占位符的sql语句
sql.getBindValues();//?占位符对应的值。

sql.setCheckTableExit(checkTableExit);//设置执行sql时检查表是否存在,默认为true如果 检查到表不存在自动创建,设置为false 不做检查 不要害怕复杂,我们可以通过SqlFactory 创建它Sql

3.SqlFactory主要用于创建Sql语句,可以创建复杂增删改查的sql语句。

// 查询语句
  Sql sql = SqlFactory.find(Person.class);
  sql = SqlFactory.find(Person.class).where("name", "=", "试着飞");
  sql = SqlFactory.find(Person.class).where("age", "=", "10").or("age", "=", 11);
  sql = SqlFactory.find(Person.class).where("age", "=", "10").orderBy("name", false);
  sql = SqlFactory.find(Person.class).where("age", "=", "10").orderBy("name", false).limit(1);
  sql = SqlFactory.find(Person.class).where("name", "like", "%飞");
  sql = SqlFactory.find(Person.class).where("name", "like", "_着_");
  sql = SqlFactory.find(Person.class).where("age", "in", new int[] { 10, 11, 12 });
  sql = SqlFactory.find(Person.class).where("name", "in", new String[] { "小明", "小红" });
  sql = SqlFactory.find(Person.class, "name", "age").where("name", "=", "试着飞");
  sql = SqlFactory.find(Person.class, "count(*) as num").where("age", "=", "11");
  sql = SqlFactory.find(Person.class, "max(age) as maxAge", "min(age) as minAge").where("sex", "=", "男");
  sql = SqlFactory.find(Person.class, new MaxFunction("age", "maxAge"), new MinFunction("age", "minAge")).where("sex", "=", "男");
  sql = SqlFactory.find(Person.class).where("name=? and age=?", new Object[] { "小明", 11 });

  // 删除语句
  sql = SqlFactory.deleteAll(Person.class);
  sql = SqlFactory.delete(Person.class).where("age", "=", 11);
  sql = SqlFactory.deleteById(Person.class, 11);
  sql = SqlFactory.deleteById(Person.class, new int[] { 11, 12 });

  // 更新语句
  sql = SqlFactory.update(Person.class, new String[] { "name", "age" }, new Object[] { "小明", "11" }).where("id", "=", 1);
  sql = SqlFactory.updateById(new Person(1, "小明", 11, "男"));
  sql = SqlFactory.updateById(new Person(1, "小明", 11, "男"), "name");

  // 如果存在 id为1的记录,就更新,否则 插入一条新记录
  sql = SqlFactory.updateOrInsertById(new Person(1, "小明", 11, "男"));

  // 插入语句
  sql = SqlFactory.insert(new Person(1, "小明", 11, "男"));

  // 自拼接sql语句
  sql = SqlFactory.makeSql(Person.class, "select * from Person where age = ?", new Object[] { 11 });

更多详细信息请查看项目文档里面的内容


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • Android 将 android view 的位置设为右下角的解决方法
  • Android 2D游戏引擎 Android Angle


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3