GreenDao:3.2.0用法
第一步:在app的Build.gradle中添加如下配置:
apply plugin: 'org.greenrobot.greendao'
buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }greendao{schemaVersion 1daoPackage 'com.admom.mygreendaotest'targetGenDir 'src/main/java' }
//schemaVersion: 数据库schema版本,也可以理解为数据库版本号//daoPackage:设置DaoMaster、DaoSession、Dao包名//targetGenDir:设置DaoMaster、DaoSession、Dao目录//targetGenDirTest:设置生成单元测试目录//generateTests:设置自动生成单元测试用例
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations' })compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' compile 'org.greenrobot:greendao:3.2.0' }
在工程的Build.gradle中添加如下配置:
buildscript {repositories {jcenter()mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:2.2.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' } }
写实体类
@Entity
public class User { @Id(autoincrement = true) private Long id; private String name; private int age; private boolean isBoy;
点击Build后make project后GreenDao会自动帮你生成get/set方法如下:
@Entity public class User {@Id(autoincrement = true)private Long id; private String name; private int age; private boolean isBoy; @Generated(hash = 1724489812)public User(Long id, String name, int age, boolean isBoy) {this.id = id; this.name = name; this.age = age; this.isBoy = isBoy; }@Generated(hash = 586692638)public User() {}public Long getId() {return this.id; }public void setId(Long id) {this.id = id; }public String getName() {return this.name; }public void setName(String name) {this.name = name; }public int getAge() {return this.age; }public void setAge(int age) {this.age = age; }public boolean getIsBoy() {return this.isBoy; }public void setIsBoy(boolean isBoy) {this.isBoy = isBoy; }}
接下来就是封装
GreenDaoManager
这个自己的工具类调用方法:设置为单例模式,方便后续操作
public class GreenDaoManager {private DaoMaster mDaoMaster; private DaoSession mDaoSession; private static GreenDaoManager mInstance; //单例 private GreenDaoManager(){if (mInstance == null) {DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "user1-db", 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; } }
在Application中配置好:
public class MyApplication extends Application {private static Context mContext; @Override public void onCreate() {super.onCreate(); mContext = getApplicationContext(); //greenDao全局配置,只希望有一个数据库操作对象 GreenDaoManager.getInstance(); }public static Context getContext() {return mContext; } }
这时就可以在自己的代码中进行使用了,我将GreenDao一些常用方法置下:
public class MainActivity extends AppCompatActivity {//@Transient,该注解表示这个属性将不会作为数据表中的一个字段 //@NotNull表示该字段不可以为空,@Unique表示该字段唯一 @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // updatadata(); // insertdata(); // querydata(); //删除数据 // getUserDao().deleteByKey(2l);//long类型 // querydata(); // querydataBy(); getuserById(); }private void getuserById() {User user =getUserDao().load(1l); Log.i("tag", "结果:" + user.getId() + "," + user.getName() + "," + user.getAge() + "," + user.getIsBoy() + ";"); }private void insertdata() {//插入数据 User insertData = new User(null, "插入数据", 24, false); getUserDao().insert(insertData); }private void updatadata() {//更改数据 List<User> userss = getUserDao().loadAll(); User user = new User(userss.get(0).getId(), "更改后的数据用户", 22, true); getUserDao().update(user); }private void querydata() {//查询数据详细 List<User> users = getUserDao().loadAll(); Log.i("tag", "当前数量:" + users.size()); for (int i = 0; i < users.size(); i++) {Log.i("tag", "结果:" + users.get(i).getId() + "," + users.get(i).getName() + "," + users.get(i).getAge() + "," + users.get(i).getIsBoy() + ";"); }}private void querydataBy() {查询条件 Query<User> nQuery = getUserDao().queryBuilder() // .where(UserDao.Properties.Name.eq("user1"))//.where(UserDao.Properties.Id.notEq(999)) .orderAsc(UserDao.Properties.Age)//.limit(5)//orderDesc .build(); List<User> users = nQuery.list(); Log.i("tag", "当前数量:" + users.size()); for (int i = 0; i < users.size(); i++) {Log.i("tag", "结果:" + users.get(i).getId() + "," + users.get(i).getName() + "," + users.get(i).getAge() + "," + users.get(i).getIsBoy() + ";"); }// QueryBuilder qb = userDao.queryBuilder(); // qb.where(Properties.FirstName.eq("Joe"), // qb.or(Properties.YearOfBirth.gt(1970), // qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10)))); // List youngJoes = qb.list(); }/** * 根据查询条件,返回数据列表 * @param where 条件 * @param params 参数 * @return 数据列表 */ public List<User> queryN(String where, String... params){return getUserDao().queryRaw(where, params); }/** * 根据用户信息,插件或修改信息 * @param user 用户信息 * @return 插件或修改的用户id */ public long saveN(User user){return getUserDao().insertOrReplace(user); }/** * 批量插入或修改用户信息 * @param list 用户信息列表 */ public void saveNLists(final List<User> list){if(list == null || list.isEmpty()){return; }getUserDao().getSession().runInTx(new Runnable() {@Override public void run() {for(int i=0; i<list.size(); i++){User user = list.get(i); getUserDao().insertOrReplace(user); }}}); }/** * 删除所有数据 */ public void deleteAllNote(){getUserDao().deleteAll(); }/** * 根据用户类,删除信息 * @param user 用户信息类 */ public void deleteNote(User user){getUserDao().delete(user); }private UserDao getUserDao() {return GreenDaoManager.getInstance().getSession().getUserDao(); }}
一般的简单数据库升级,如下操作即可:
greendao{schemaVersion 5 daoPackage 'xxxxxxxxxx' targetGenDir 'src/main/java' }
2 修改实体类为自己需要的类型,重现编译项目运行即可。
下面为一些常用的注解使用方式:
@Entity
public
class
User {
@Id
(autoincrement =
true
)
private
Long id;
@Property
(nameInDb =
"USERNAME"
)
private
String name;
@NotNull
private
int
repos;
@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;
}
@Entity
public
class
Customer {
@Id
private
Long id;
}
@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 对于更复杂的关系,可以使用这个注解标明目标属性的源属性。
GreenDao:3.2.0用法相关推荐
- zbb20180930 java,nio,netty Netty5.0用法
Netty5.0用法 Maven坐标 <dependencies> <!-- https://mvnrepository.com/artifact/ ...
- do{}while(0)用法
do..while(0)的用法 真是的,我用C++还是太少了.这个宏以前明明见过的,但其存在的意义突然就想不起来了.刚才问了下axx大才又"知道"了一次.赶紧记下来. 这样的宏见过 ...
- 安卓GreenDao框架一些进阶用法整理(转)
大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...
- Python之max(num, key=lambda x:x[0])用法的详细解析
1.max(num, key=lambda x:x[0])语法介绍如下: key=lambda 元素: 元素[字段索引] print(max(C, key=lambda x: x[0])) x:x[] ...
- javascript:void(0);用法及常见问题解析
void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...
- Android Studio配置GreenDAO 3.2.0和使用方法
我相信,在平时的开发过程中,大家一定会或多或少地接触到SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写SQL语句与解析查询结果等.所以,适用于Android ORM框架也就孕育而生了 ...
- char data[0]用法总结
struct MyData { int nLen; char data[0]; }; 开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来. ...
- js中 javascript:void(0) 用法详解
javascript:void(0)表示不做任何动作.如: 复制代码代码如下: <a href="javascript:void(0);" οnclick="ale ...
- idea2019配置gradle详解_Constraint Layout 2.0 用法详解
Constraint Layout 是最受欢迎的 Jetpack 库之一,它的 2.0 正式版本也发布啦 (目前最新版本 2.1.0-alpha1)!也许您已熟悉了 Constraint Layout ...
最新文章
- 【Win7下Android native code的编译和调试】
- 2021中科院院士候选名单出炉:清华胡事民、南大周志华等人在列
- 跨链Cosmos(9)异构跨链交易流程
- Java阶段性测试--第二三大题参考代码
- 使用airdrop进行文件共享
- Memcached总结
- 工业级光纤收发器一般能正常使用多长时间?
- 如何做规划?分享2种思维和4个方法
- 程序员过端午的正确姿势,一般人看不懂
- 《Java程序员职场全攻略:从小工到专家》连载十:这条路大家都是怎么走的
- 元胞自动机概念与实例
- PTAM特征点法跟踪和建图 SLAM FAST Patch
- 出口商贸易融资工具:汇出汇款融资
- day09渗透简单测试流程以及PKI实验
- java判断字符串是否是中文_Java检查字符串是否包含中文字符
- 火车头采集html文档没内容,火车头采集器:编辑任务中常见问题
- 《软件工程实践》第五次作业-WordCount进阶需求 (结对第二次)
- 认识计算机综合题,第一章 认识计算机试题.doc
- 用vs20008生成MFC项目,测试wince
- Proteus C51仿真学习板0——KeilProteus
热门文章
- 基于汉明软译码和球型译码的通信链路误码率matlab仿真
- 【离散数学】第一章 笔记(完)
- java long 几个字节_java中long类型占多少字节
- shopee跨境电商是真的吗?2022年Shopee如何选品?
- Win10系统打开CAD2014卡住现象解决方案
- win7遭攻击了,出现cao.txt naicha.txt
- python 日语转罗马音工具 pykakasi模块使用
- 多媒体设计计算机音乐创作原创音乐,多媒体设计计算机音乐创作原创音乐[计算机辅助音乐创作教学,改善课堂教学效果].doc...
- 45.古代某工地需要搬运砖块,已知男人每人每次搬3块,女人每人每次搬2块,小孩两人每次抬一块,现有45人一次正好搬完全部砖块,请问男人、女人、小孩各几人?
- 【每日一题】——跳跃游戏