DbFlow

作者: 健身小可乐 | 来源:发表于2017-11-09 23:42 被阅读0次

    DbFlow的使用

    配置

    allprojects {
        repositories {
            google()
            jcenter()
            maven { url "https://jitpack.io" }
        }
    }
    
     annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:4.0.0-beta7"
        compile "com.github.Raizlabs.DBFlow:dbflow-core:4.0.0-beta7"
        compile "com.github.Raizlabs.DBFlow:dbflow:4.0.0-beta7"
    
    

    在自己的Application中配置

     @Override
        public void onCreate() {
            super.onCreate();
            FlowManager.init(this);
        }
    

    数据库的创建 版本号和名称

    @Database(name = MyDataBase.DATABASE_NAME,version = MyDataBase.DATABASE_VERSION)
    public class MyDataBase {
        public static final String DATABASE_NAME="MyDatabase";
        public static final int DATABASE_VERSION=1;
    }
    

    表的创建,至少有一个主键

    @Table(database = MyDataBase.class)
    public class User extends BaseModel{
    
        @Column      
        @PrimaryKey(autoincrement = true) //主键自增长
        long id;
    
        @Column
        String name;
    
        @Column
        String sex;
    
        @Column
        int age;
    
        @Column
        Date date;
    
    }
    

    1.对象直接操作记录 extends BaseModel or implement Model

    同一个对象的话 保存的是同一条记录,如下只会在数据库插入同一条记录

     User user = new User();
            user.age=90;
            user.save();  //调用save保存记录
            user.name="wang";
            user.date=new Date();    //同一个user对象的话是一条记录
            user.save();
    

    user.delete(); //删除本条对象所保存的记录
    user.update();//更新本条对象所保存的记录

    一般是先 user.save();//先保存 user.update();再更新
    如果没有 user.save();直接 user.update();的话是不会增加记录
    同理 先 user.save();之后 其他的update(),delete()方法才有意义. 但实际发现
    调用 user.save()之后 ,再次修改user 的属性 再次调用user.save()方法,发现操纵的其实是同一条记录 ,此时第二次的save()方法也就相当于了update();

    2.利用 ModelAdapter

    ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
    adapter.insert(user); //最好不要和adapter.save(user)一块使用,且连续调用两次insert(user)会保存两次记录,而连续save(user)两次的话只会插入一条记录
    user.name = "Not Andrew Grosner";
    adapter.update(user); 
    adapter.delete(user); 
    

    关于查询

    List < User > wang = SQLite.select().from(User.class).where(User_Table.name.is("wang")).queryList(); //查询的是整个表中符合条件的

    User wang = SQLite.select().from(User.class).where(User_Table.name.is("wang")).querySingle(); //查询的是第一个符合条件的

    删除的话 先查 再删

    List<User> wang = SQLite.select().from(User.class).where(User_Table.name.is("wang")).queryList();
            for (User usersing:wang) {
                usersing.delete();
                Log.e("msg:", usersing.toString());
            }
    

    在事务中

    同步
    FlowManager.getDatabase(MyDataBase.class).executeTransaction(new ITransaction() {
                @Override
                public void execute(DatabaseWrapper databaseWrapper) {
                    ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
                    final User user = new User("wang", "女", 11, new Date());
                    adapter.insert(user);
                    adapter.insert(user);
    
                }
            });
    
    

    异步

                @Override
                public void execute(DatabaseWrapper databaseWrapper) {
                    ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
                    final User user = new User("wang", "女", 11, new Date());
                    adapter.insert(user);
                    adapter.insert(user);
                    adapter.insert(user);
                    adapter.insert(user);
                    adapter.insert(user);
                }
            }).execute();
    

    或者

        Transaction transaction = FlowManager.getDatabase(MyDataBase.class).beginTransactionAsync(new ITransaction() {
                @Override
                public void execute(DatabaseWrapper databaseWrapper) {
                    ModelAdapter<User> adapter = FlowManager.getModelAdapter(User.class);
    
                }
            }).build();
    
            transaction.execute();
            transaction.cancel();
    

    相关文章

      网友评论

          本文标题:DbFlow

          本文链接:https://www.haomeiwen.com/subject/furvmxtx.html