GreenDao3.2.0简单使用

GreenDao操作数据库性能非常好。
我们简单介绍GreenDao3.2.0使用(估计GreenDao以后版本更新,使用规则不会改变),跟之前相比,简单很多。

第一步

对Android Studio 中的工程目录下的build.gradle文件和模块目录下的build.gradle文件进行设置
先设置工程下的build.gradle文件
这里写图片描述

再设置模块下的build.gradle文件
这里写图片描述

这里写图片描述

第二步

创建实体类

@Entity
public class User {
    @Id(autoincrement = true)
    private long id;
    private String name;
    private String sex;
    private int age;
    private int salary;
    }

同步一下工程,之前在build.gradle文件中配置的内容会自动生成一些类供我们使用
见图片所示:
这里写图片描述

第三步

创建GreenDaoManager,提供单例用于操作数据库

public class GreenDaoManager {
    private DaoMaster mDaoMaster;

    private DaoSession mDaoSession;
    private static GreenDaoManager mInstance;//单例
    private GreenDaoManager() {
        if (mInstance == null) {
            //此处openhelper为自动生成开发所使用,发布版本需自定义,重写SQLiteOpenHelper即可
            DaoMaster.DevOpenHelper devOpenHelper = new
                    DaoMaster.DevOpenHelper(MyApp.getContext(), "app_database", null);
            mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
            mDaoSession = mDaoMaster.newSession();
        }
    }

    public static GreenDaoManager getInstance() {
        if (mInstance == null) {
            synchronized (GreenDaoManager.class) {//保证异步处理安全操作
                if (mInstance == null) {
                    mInstance = new GreenDaoManager();
                }
            }
        }
        return mInstance;
    }
    public DaoMaster getMaster() {
        return mDaoMaster;
    }
    public DaoSession getSession() {
        return mDaoSession;
    }
    public DaoSession getNewSession() {
        mDaoSession = mDaoMaster.newSession();
        return mDaoSession;
    }
}

第四步

使用GreenDao进行增删改查

public class MainActivity extends AppCompatActivity {
    //操作数据库对象
    private UserDao mUserDao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //使用GreenDaoManager进行赋值
        mUserDao = getUserDao();
    }

    private UserDao getUserDao(){
        return GreenDaoManager.getInstance().getSession().getUserDao();
    }

    public void greenDao(View view) {
        User user = null;
        switch (view.getId()){
            case R.id.insert:
                for (int i = 1; i < 10; i++) {
                    user = new User();
                    user.setId(i);
                    user.setAge(12+i*i*5);
                    user.setName("狗蛋");
                    user.setSalary(10000);
                    user.setSex("男");
                    long insert = mUserDao.insert(user);
                    Log.d("flag", "----------------->greenDao: insert: " + insert);
                }
                break;
            case R.id.delete:
                //删除特定位置数据
                mUserDao.deleteByKey(1l);
                break;
            case R.id.update:
                //查询id是1位置的数据
                user = mUserDao.load(1l);
                //对其进行修改
                user.setName("苏小小");
                mUserDao.update(user);
                String name = mUserDao.load(1l).getName();
                Log.d("flag", "----------------->greenDao: update name " +name);
                break;
            case R.id.query:
                QueryBuilder<User> builder = mUserDao.queryBuilder();
                Query<User> query = builder
                        .where(UserDao.Properties.Name.eq("狗蛋"),UserDao.Properties.Age.between(10,100))
                        .build();
                List<User> list = query.list();
                Log.d("flag", "----------------->greenDao: size " +list.size());
                break;
            default:
                Toast.makeText(this, "请问你想对我做什么?", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

GreenDao注解

@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;

    @Property(nameInDb = "USERNAME")
    private String name;

    @NotNull
    private int age;

    @Transient
    private int tempUsageCount;

    ...
}

@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean

@Id 标明主键,括号里可以指定是否自增

@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)

@NotNull 非空

@Transient 标识这个字段是自定义的不会创建到数据库表里

@Unique 添加唯一约束

关系注解:(慢慢理解)

@Entity
public class Order {
    @Id private Long id;

    private long customerId;

    @ToOne(joinProperty = "customerId")
    private Customer customer;
}

@ToOne 是将自己的一个属性与另一个表建立关联

@Entity
public class User {
    @Id private Long id;

    @ToMany(referencedJoinProperty = "ownerId")
    private List<Site> ownedSites;
}

@Entity
public class Site {
    @Id private Long id;
    private long ownerId;
}
// ----------------------------
@Entity
public class User {
    @Id private Long id;
    @Unique private String authorTag;

    @ToMany(joinProperties = {
            @JoinProperty(name = "authorTag", referencedName = "ownerTag")
    })
    private List<Site> ownedSites;
}

@Entity
public class Site {
    @Id private Long id;
    @NotNull private String ownerTag;
}

// ----------------------------

@ToMany的属性referencedJoinProperty,类似于外键约束。

@JoinProperty 对于更复杂的关系,可以使用这个注解标明目标属性的源属性。

猜你喜欢

转载自blog.csdn.net/Soft_Po/article/details/53910623
今日推荐