0
点赞
收藏
分享

微信扫一扫

GreenDao 3,面试高频题目

盖码范 2022-02-15 阅读 170

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)]

举报

相关推荐

0 条评论