ActiveAndroid是一种Active Record 风格的ORM框架,它可以极大的简化数据库的使用,使用面向对象的方式管理数据库,告别手写SQL历史。每一个数据库表都可以映射为一个类,开发者只需要使用类似save()或者delete()这样的函数即可。
一、添加依赖,把下面的代码添加到工程的build.gradle中:
repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
二,配置与初始化:
1,在清单文件中配置数据库名称和数据库版本号:
<meta-data android:name="AA_DB_NAME" android:value="user.db" />
<meta-data android:name="AA_DB_VERSION" android:value="2" />
<meta-data android:name="AA_MODELS" android:value="mgzxc.dbdemo.activeandroid.User"/>
通过mete-data来配置数据库名称和数据库版本号,其中AA_DB_NAME为数据库名称,AA_DB_VERSION为数据库版本号,默认为1,AA_MODELS为对应的模型。
自定义Application,需要让你的Application对象继承自com.activeandroid.app.Application而不android.app.Application。然后在清单文件的applicatin下通过name来引用,这样就完成了ActiveAndroid的初始化工作。
public class MyApp extends Application {
//为了兼容5.0以上的手机,需添加下面的代码
@Override
public void onCreate() {
super.onCreate();
Configuration.Builder builder = new Configuration.Builder(this);
//手动的添加模型类
builder.addModelClasses(User.class);
ActiveAndroid.initialize(builder.create());
}
}
然后在清单文件的applicatin下通过name来引用:
android:name=".MyApp"
创建Model类 (必须要加空构造函数且super()不然会有时报错)
/**
* Created by MG_ZXC on 2018/2/4.
* 1,必须继承Model,继承后就不用声明主键了
* 2,按照表名添加字段
* 3,添加注释
*/
@Table(name = "user")
public class User extends Model {
@Column
private String userName;
@Column
private int userId;
@Column
private int age;
@Column
private String addr;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public User() {
super();
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userId=" + userId +
", age=" + age +
", addr='" + addr + '\'' +
'}';
}
}
操作数据库的工具类
/**
* Created by MG_ZXC on 2018/2/4.
* 操作数据库的工具类
*/
public class DbManager {
//添加数据
public void insertUser(User user){
//操作数据库的对象就是实体类本身
user.save();
}
//删除数据
public void deleteUser(User user){
user.delete();
}
//更新数据
public void updateUser(User user){
user.setUserName("关羽");
user.setAddr("北京");
//在activeandroid中save既可以创建,也可以修改
user.save();
}
//查询所有的数据
public List<User> queryUser(){
List<User> execute = new Select()
.from(User.class) //model类
.execute();
return execute;
}
//条件查询
public List<User> query(String userName){
List<User> queryName = new Select()
.from(User.class)
.where("userName = ?", userName) //查询条件
.execute();
return queryName;
}
//条件删除
public void delete(String userName){
new Delete()
.from(User.class)
.where("userName = ?", userName)
.execute();
}
//条件更新
public void update(String userName){
Update update = new Update(User.class);
update.set("addr = ?","上海")
.where("userName=?",userName)
.execute();
}
}
使用:
增加:
User user = new User();
user.setAddr("信阳");
user.setAge(28);
user.setUserId(1);
user.setUserName("张飞");
dbManager.insertUser(user);
查询:
users = dbManager.query("张飞");
删除:
dbManager.delete("张飞");
更新:
dbManager.update("张飞");
数据库升级
上面的代码完全能够实现ActiveAndroid的功能了,但ActiveAndroid的数据库升级不像其他数据库升级那么简单,只需改变版本号就行了,下面介绍一下ActiveAndroid的版本升级的步骤:
1,先把数据库版本改为要升级到的版本,如改为2
2,在工程下新建assets/migrations,在该目录下增加一个修改过得版本号,比如我现在的版本号升级为2,则文件夹名为2.sql。
3,在2.sql文件夹下使用sql语句来编写版本升级新增的功能,如新增了一个字段:
ALTER TABLE user ADD COLUMN Count INTEGER;
OK,到这里ActiveAndroid的使用已经完成了。
通过GitHub上的ActiveAndroid在14年已经停止更新,而且本人在使用ActiveAndroid过程中发现,在高版本Android 中会报一些”莫名其妙”的Bug.