开发 JackKnife框架已经好几个月了,一直在忙项目的事,空余时间才有时间去维护 JackKnife框架,现在jackKnife框架已经慢慢强大了,最近公司做的物联网项目,我也在用自己的JackKnife框架,目前我们公司的物联网全款我的JackKnife-orm框架保存数据。
JackKnife框架官网:http://www.jackwhliu.cn/jackknife/
github传送门:https://github.com/JackWHLiu/jackknife
ORM的概念
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
下面介绍下JackKnife-orm的基本使用
如果要依赖jackknife的库,需要对号入座的加上以下两个配置。
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
dependencies { compile 'com.github.JackWHLiu:jackknife:1.0.0' }
首先初始化:在activity中onCreate()方法中加入以下代码
OrmConfig config = new OrmConfig.Builder() .database("ormdemo")//数据库名称 .version(1)//数据库版本号,默认1,只能升不能降 .tables(new Class[] {User.class})//要初始化的表 .build(); Orm.init(this, config);
说明:在这里博主强烈建议把这段代码放入application中去,避免以后每次使用都需要初始化
其次必须建立一个Object类 例如:
@Table("user") public class User implements OrmTable { @PrimaryKey(AssignType.AUTO_INCREMENT) @Column("_id") private int id; @Unique @NotNull @Column("name") private String name; @NotNull @Column("age") private int age; public User() {//必须保留public的无参构造函数 } public User(String name, int age) { this.name = name; this.age = age; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }相信有点sqlLite基础的朋友应该可以大概猜出上面这个类里面一些标签的意思
@Table("user")表名
@PrimaryKey(AssignType.AUTO_INCREMENT)主键,会自动增长
@Unique @NotNull @Column("name")唯一不为空的字段 字段名为name .......
大家可以去github关注我的项目,或者下载DEMO可以了解的更详细
最后就是简单的调用了,这里插入了几条简单的数据。
OrmDao<User> dao = DaoFactory.getDao(User.class); dao.insert(new User("Celica", 16)); List<User> users = new ArrayList<>(); users.add(new User("Alm", 17)); users.add(new User("Mycen", 54)); dao.insert(users); // dao.delete(WhereBuilder.create().addWhereEqualTo("age", 54));//删除Mycen User user = dao.selectOne(); textview_orm_user.setText(user.toString()); for (User u:dao.select(QueryBuilder.create().limit(1,2))) {//limit传一个参数表示个数,传两个参数表示截取 Logger.error(u.toString()); }其实Jackknife还有很多功能,基本的增删改出等数据库常规操作都能完成,至于性能方面大家不用担心,比起OrmLite和GreenDao也不妨多让,主要是博主的框架比他们的要小巧,这对APP体积减少很有帮助
好了几天的JackKnife-ORM框架就介绍到这里,希望大家能去github多多关注,多给星,支持下博主
最后再来一波推广,github传送门:https://github.com/JackWHLiu/jackknife