generateConstructors 自动创建全参构造方法(同时会生成一个无参构造方法)(默认:true)
generateGettersSetters 自动生成 getters and setters 方法(默认:true)
@Entity(
schema = “myschema”,
active = true,
nameInDb = “AWESOME_USERS”,
indexes = {
@Index(value = “name DESC”, unique = true)
},
createInDb = true,
generateConstructors = false,
generateGettersSetters = true
)
public class User {
…
}
@Entity
public class UserList {
@Id(autoincrement = true)//主键自动增长
private Long id;
@Entity
public class User {
@Id
private Long id;
@Index(unique = true)
private String name;
}
@OrderBy(“date ASC”)
private List orders;
@Entity (nameInDb = “User”)
public class User {
@Property(nameInDb = “userName”)
private String userName;
}
@Entity
public class User {
@Id
private Long id;
@Unique
private String name;
}
注意事项
@Entity
public class CommentList {
@Id(autoincrement = true)
private Long id;
private int sendId =0;//发送方ID
private int receiveId;//接收方ID
//------ CommentListDao.java ------
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": “”;
db.execSQL("CREATE TABLE " + constraint + ““COMMENT_LIST” (” + //
“”_id" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
““SEND_ID” INTEGER NOT NULL ,” + // 1: sendId
““RECEIVE_ID” INTEGER NOT NULL ,” + // 2: receiveId
““SEND_TYPE” INTEGER NOT NULL ,” + // 3: sendType
@Entity
public class CommentList {
@Id(autoincrement = true)
private Long id;
private Integer sendId =0;//发送方ID
private Integer receiveId=0;//接收方ID
private Integer sendType=0;//发送方用户类型
// ------ CommentListDao.java ------
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": “”;
db.execSQL("CREATE TABLE " + constraint + ““COMMENT_LIST” (” + //
“”_id" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
““SEND_ID” INTEGER,” + // 1: sendId
““RECEIVE_ID” INTEGER,” + // 2: receiveId
““SEND_TYPE” INTEGER,” + // 3: sendType
““RECEIVE_TYPE” INTEGER,” + // 4: receiveType
@Property 建表字段命名
@Entity(nameInDb =“User”)
public class User implements Serializable {
@Transient
private static final long serialVersionUID = 1L;
@Id(autoincrement = true )
private Long id;
@Property(nameInDb = “name”)
private String name=“Tom”;
GreenDao 3.3.0版本 设置默认值
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": “”;
db.execSQL("CREATE TABLE " + constraint + ““USER” (” + //
“”_id" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
““NAME” TEXT,” + // 1: name
““AGE” INTEGER NOT NULL ,” + // 2: age
““SEX” TEXT,” + // 3: sex
““HEIGHT” INTEGER NOT NULL ,” + // 4: height
““WEIGHT” TEXT);”); // 5: weight
}
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String name=“Tom”;
private int age=0;
private String sex;
private int height;
private String weight;
@Transient 注解
@Entity
public class User implements Serializable {
@Transient
private static final long serialVersionUID = 1L;
@Id(autoincrement = true)
private Long id
实体类实现 Serializable 报错
DaoMaster DaoSession 数据操作和表管理
-
DaoMaster 建表注册管理表
-
DaoSession 对表进行增删改查
public class GreenDBManager implements IDBManager {
private static final String DB_NAME = “User.db”; //数据库名
private DaoSession mDaoSession;
//private UserTableManager mUserTableManager;
private TablesComponent mTablesComponent;
private DaoMaster daoMaster;
public GreenDBManager init(Application application, String dbName) {
Integer dbVersion = DaoMaster.SCHEMA_VERSION;
mApplication = application;
Class<? extends AbstractDao<?, ?>>[] classes = new Class[]{UserDao.class, UserListDao.class};
//DBUpdateOpenHelper对DaoMaster进行初始化,这样就可以实现数据库升级时的数据迁移
DBUpdateOpenHelper updateOpenHelper = new DBUpdateOpenHelper(application, dbName, mclasses);
daoMaster = new DaoMaster(updateOpenHelper.getWritableDatabase());
//9.0的数据库默认启用了wal,用低版本的sqlite工具是无法查看的,想要兼容可以禁用wal
updateOpenHelper.getWritableDatabase().disableWriteAheadLogging();//启用 enableWriteAheadLogging
mDaoSession = daoMaster.newSession();
//查看数据库更新版本时数据迁移的log
MigrationHelper.DEBUG = false;
//数据库增删改查时的log
QueryBuilder.LOG_SQL = false;
QueryBuilder.LOG_VALUES = false;
//清空缓存
mDaoSession.clear();
return this;
}
@Override
public DaoSession getDaoSession() {
if (mDaoSession==null){
mDaoSession=daoMaster.newSession();
}
return mDaoSession;
}
public class DBUpdateOpenHelper extends DaoMaster.OpenHelper {
Class<? extends AbstractDao<?, ?>>[] mDaoClasses;
public DBUpdateOpenHelper(Context context, String name, Class<? extends AbstractDao<?, ?>>… daoClasses) {
super(context, name);
mDaoClasses=daoClasses;
}
public DBUpdateOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, Class<? extends AbstractDao<?, ?>>… daoClasses) {
super(context, name, factory);
mDaoClasses=daoClasses;
}
@Override
public void onCreate(Database db) {
DaoMaster.createAllTables(db, false);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
//把需要管理的数据库表DAO作为最后一个参数传入到方法中
MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
@Override
public void onCreateAllTables(Database db, boolean ifNotExists) {
DaoMaster.createAllTables(db, ifNotExists);
}
@Override
public void onDropAllTables(Database db, boolean ifExists) {
DaoMaster.dropAllTables(db, ifExists);
}
}, mDaoClasses);
}
}
package com.zk.greendb.helper;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import android.util.Log;
import org.greenrobot.greendao.AbstractDao;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.database.StandardDatabase;
import org.greenrobot.greendao.internal.DaoConfig;
import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
-
用于数据库升级时数据迁移
-
from https://github.com/yuweiguocn/GreenDaoUpgradeHelper
-
please call {@link #migrate(SQLiteDatabase, Class[])} or {@link #migrate(Database, Class[])}
*/
public class MigrationHelper {
public static boolean DEBUG = false;
private static final String TAG= MigrationHelper.class.getSimpleName();
private static final String SQLITE_MASTER = “sqlite_master”;
private static final String SQLITE_TEMP_MASTER = “sqlite_temp_master”;
private static WeakReference weakListener;
public interface ReCreateAllTableListener{
void onCreateAllTables(Database db, boolean ifNotExists);
void onDropAllTables(Database db, boolean ifExists);
}
public static void migrate(SQLiteDatabase db, Class<? extends AbstractDao<?, ?>>… daoClasses) {
printLog("【The Old Database Version】" + db.getVersion());
Database database = new StandardDatabase(db);
migrate(database, daoClasses);
}
public static void migrate(SQLiteDatabase db, MigrationHelper.ReCreateAllTableListener listener, Class<? extends AbstractDao<?, ?>>… daoClasses) {
weakListener = new WeakReference<>(listener);
migrate(db, daoClasses);
}
public static void migrate(Database database, MigrationHelper.ReCreateAllTableListener listener, Class<? extends AbstractDao<?, ?>>… daoClasses) {
weakListener = new WeakReference<>(listener);
migrate(database, daoClasses);
}
public static void migrate(Database database, Class<? extends AbstractDao<?, ?>>… daoClasses) {
printLog("【Generate temp table】start");
generateTempTables(database, daoClasses);
printLog("【Generate temp table】complete");
MigrationHelper.ReCreateAllTableListener listener = weakListener.get();
if (listener != null) {
listener.onDropAllTables(database, true);
最后
总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。
这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!
想要面试顺通嘛,赶紧领取下面的面试资料为之后的面试做足准备叭!这里提前祝各位面试成功!
资料领取方式: Android架构设计
base, true);
最后
总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。
这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!
想要面试顺通嘛,赶紧领取下面的面试资料为之后的面试做足准备叭!这里提前祝各位面试成功!
资料领取方式: Android架构设计
[外链图片转存中…(img-gger6MNq-1644917210649)]
[外链图片转存中…(img-5UlJRf9S-1644917210650)]