greenDao的使用与封装

  • 1. greenDao的使用步骤:

    第一步:  在项目的.gradle文件里面添加

    buildscript {
     	   repositories {
    	        mavenCentral()
    	        jcenter()
    	    }
    	    dependencies {
     	       classpath 'com.android.tools.build:gradle:2.3.0'
    	        classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
    	        // NOTE: Do not place your application dependencies here; they belong
     	       // in the individual module build.gradle files
    	    }
    	}

    第二步:在moddle的.gradle文件里面添加

  • 
    apply plugin: 'org.greenrobot.greendao'
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "com.example.administrator.myapplication"
            minSdkVersion 15
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    //    greendao{
    //        schemaVersion 2
    //        schemaVersion 2 //数据库版本号
    //        daoPackage 'com.dianchou.dcw.recorddb'// 设置DaoMaster、DaoSession、Dao 包名
    //        targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
    //    }
    
        greendao {
            schemaVersion 1
            daoPackage 'com.example.administrator.myapplication.recorddb'
            targetGenDir 'src/main/java'
        }
    }

    依赖里面添加:

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.jakewharton:butterknife:8.8.1'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:0.5'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
        implementation 'com.android.support:appcompat-v7:26.1.0'
     
        //数据库
        compile 'org.greenrobot:greendao:3.0.1'
        compile 'org.greenrobot:greendao-generator:3.0.0'
    }

     

第三步: 添加Bean类,用User举例子 , 一定要记得注解@Entity

@Entity
public class User {
  @Id(autoincrement = true)//设置自增长
    private Long id;
    @Index(unique = true)//设置唯一性
    private String perNo;//人员编号
    private String name;//人员姓名
    private String sex;//人员姓名
}

第四步: 编译项目,User实体类会自动编译,生成get、set方法并且会在com.example.john.greendaodemo.gen目录下生成三个文件;在我们Make Project后,实体内的变化如下所示:

@Entity
public class PersonInfor {
    @Id(autoincrement = true)//设置自增长
    private Long id;
    @Index(unique = true)//设置唯一性
    private String perNo;//人员编号
    private String name;//人员姓名
    private String sex;//人员姓名

    @Generated(hash = 1311768890)
    public PersonInfor(Long id, String perNo, String name, String sex) {
        this.id = id;
        this.perNo = perNo;
        this.name = name;
        this.sex = sex;
    }
    @Generated(hash = 1362534400)
    public PersonInfor() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getPerNo() {
        return this.perNo;
    }
    public void setPerNo(String perNo) {
        this.perNo = perNo;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return this.sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}
  • 2.封装数据库操作类

    一 .因为我们对数据库的操作无非就是增删改查四个操作,所以我们将他们简单封装一下。

  • public class DbController {
        /**
         * Helper
         */
        private DaoMaster.DevOpenHelper mHelper;//获取Helper对象
        /**
         * 数据库
         */
        private SQLiteDatabase db;
        /**
         * DaoMaster
         */
        private DaoMaster mDaoMaster;
        /**
         * DaoSession
         */
        private DaoSession mDaoSession;
        /**
         * 上下文
         */
        private Context context;
        /**
         * dao
         */
        private PersonInforDao personInforDao;
    
        private static DbController mDbController;
    
        /**
         * 获取单例
         */
        public static DbController getInstance(Context context){
            if(mDbController == null){
                synchronized (DbController.class){
                    if(mDbController == null){
                        mDbController = new DbController(context);
                    }
                }
            }
            return mDbController;
        }
        /**
         * 初始化
         * @param context
         */
        public DbController(Context context) {
            this.context = context;
            mHelper = new DaoMaster.DevOpenHelper(context,"person.db", null);
            mDaoMaster =new DaoMaster(getWritableDatabase());
            mDaoSession = mDaoMaster.newSession();
            personInforDao = mDaoSession.getPersonInforDao();
        }
        /**
         * 获取可读数据库
         */
        private SQLiteDatabase getReadableDatabase(){
            if(mHelper == null){
                mHelper = new DaoMaster.DevOpenHelper(context,"person.db",null);
            }
            SQLiteDatabase db =mHelper.getReadableDatabase();
            return db;
        }
    
        /**
         * 获取可写数据库
         * @return
         */
        private SQLiteDatabase getWritableDatabase(){
            if(mHelper == null){
                mHelper =new DaoMaster.DevOpenHelper(context,"person.db",null);
            }
            SQLiteDatabase db = mHelper.getWritableDatabase();
            return db;
        }
    
        /**
         * 会自动判定是插入还是替换
         * @param personInfor
         */
        public void insertOrReplace(PersonInfor personInfor){
            personInforDao.insertOrReplace(personInfor);
        }
        /**插入一条记录,表里面要没有与之相同的记录
         *
         * @param personInfor
         */
        public long insert(PersonInfor personInfor){
          return  personInforDao.insert(personInfor);
        }
    
        /**
         * 更新数据
         * @param personInfor
         */
        public void update(PersonInfor personInfor){
            PersonInfor mOldPersonInfor = personInforDao.queryBuilder().where(PersonInforDao.Properties.Id.eq(personInfor.getId())).build().unique();//拿到之前的记录
            if(mOldPersonInfor !=null){
                mOldPersonInfor.setName("张三");
                personInforDao.update(mOldPersonInfor);
            }
        }
        /**
         * 按条件查询数据
         */
        public List<PersonInfor> searchByWhere(String wherecluse){
            List<PersonInfor>personInfors = (List<PersonInfor>) personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).build().unique();
            return personInfors;
        }
        /**
         * 查询所有数据
         */
        public List<PersonInfor> searchAll(){
            List<PersonInfor>personInfors=personInforDao.queryBuilder().list();
            return personInfors;
        }
        /**
         * 删除数据
         */
        public void delete(String wherecluse){
            personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).buildDelete().executeDeleteWithoutDetachingEntities();
        }

    二. 看看我们的MainActivity

  • public class MainActivity extends AppCompatActivity {
    
        private Button Add,Delete,Update,Search;
        private DbController mDbController;
        private PersonInfor personInfor1,personInfor2,personInfor3,personInfor4;
        private long insertTipId;
        private TextView dataArea;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mDbController = DbController.getInstance(MainActivity.this);
            initView();
            Envent();
            similateData();
        }
    
        private void similateData() {
            personInfor1 = new PersonInfor(null,"001","王大宝","男");
            personInfor2 = new PersonInfor(null,"002","李晓丽","女");
            personInfor3 = new PersonInfor(null,"003","王麻麻","男");
            personInfor4 = new PersonInfor(null,"004","王大锤","女");
        }
    
        private void Envent() {
    
            Add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Add
                   mDbController.insertOrReplace(personInfor1);
    
                   mDbController.insertOrReplace(personInfor2);
    
                   mDbController.insertOrReplace(personInfor3);
    
                   mDbController.insertOrReplace(personInfor4);
    
                    showDataList();
                }
            });
            Delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Delete
                    mDbController.delete("王麻麻");
    
                    showDataList();
                }
            });
    
            Update.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Update
                    mDbController.update(personInfor1);
    
                    showDataList();
                }
            });
    
            Search.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Search
                    showDataList();
                }
            });
        }
    
        private void showDataList() {
            StringBuilder sb = new StringBuilder();
           List<PersonInfor>personInfors = mDbController.searchAll();
           for(PersonInfor personInfor:personInfors){
              // dataArea.setText("id:"+p);
               sb.append("id:").append(personInfor.getId())
                 .append("perNo:").append(personInfor.getPerNo())
                 .append("name:").append(personInfor.getName())
                 .append("sex:").append(personInfor.getSex())
                 .append("\n");
           }
           dataArea.setText(sb.toString());
        }
    
        private void initView() {
    
            Add = findViewById(R.id.Add);
    
            Delete = findViewById(R.id.Delete);
    
            Update = findViewById(R.id.Update);
    
            Search = findViewById(R.id.Search);
    
            dataArea= findViewById(R.id.tips);
    
        }
    }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值