网站建设公司销售前景,上海百度推广优化排名,网站内链建设,松江企业网站建设人生何须万种愁#xff0c;千里云烟一笑收 一#xff0c;定义
Room也是一个ORM框架#xff0c;它在SQLite上提供了一个抽象层#xff0c;屏蔽了部分底层的细节#xff0c;使用对象对数据库进行操作#xff0c;进行CRUD就像对象调用方法一样的简单。 二#xff0c;角色介…人生何须万种愁千里云烟一笑收 一定义
Room也是一个ORM框架它在SQLite上提供了一个抽象层屏蔽了部分底层的细节使用对象对数据库进行操作进行CRUD就像对象调用方法一样的简单。 二角色介绍
谷歌官方给出了一张图片可以更加直观的了解Room的组成部分 从上图可以看出Room主要由三部分组成
1Room Database 数据库底层连接的主要接入点创建数据库就靠它了
2Data Access Objects DAO在DAO中会有一系列对数据库进行CRUD的方法声明
3Entity 实体类是对象与数据表的对应表现设计实体类并最后转化为对应的数据表
可以这么理解我们通过实体类的中Getter和Setter方法对数据进行变更操作然后Room Database使用DAO中的方法对表中的数据进行对应的操作。从而屏蔽了繁琐的数据库原生操作。当然这其中使用了注解进行功能的标注。
三基本使用
1在app的build.gradle里面添加依赖
def room_version 2.2.6
implementation androidx.room:room-runtime:$room_version
annotationProcessor androidx.room:room-compiler:$room_version // use kapt for Kotlin
// optional - RxJava support for Room
implementation androidx.room:room-rxjava2:$room_version
// optional - Guava support for Room, including Optional and ListenableFuture
implementation androidx.room:room-guava:$room_version
// Test helpers
testImplementation androidx.room:room-testing:$room_version
2创建表Entity
Entity
public class YuanZhen {PrimaryKey(autoGenerate true)private int id;ColumnInfo(name name)private String name;ColumnInfo(name age)private int age;ColumnInfo(name address)private String address;Ignoreprivate String sex;public YuanZhen(String name, int age, String address) {this.name name;this.age age;this.address address;}public void setId(int id) {this.id id;}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;}public void setAddress(String address) {this.address address;}public int getId() {return id;}public String getName() {return name;}public int getAge() {return age;}public String getAddress() {return address;}Overridepublic String toString() {return YuanZhen{ id id , name name \ , age age , address address \ , sex sex \ };}
}
上面其中几个注解的含义
①Entity 表示数据库中的表
②PrimaryKey 表示主键autoGenerate 表示自增
③ColumnInfo 表示字段name 表示字段名称
④Ignore 表示一个属性不加入生成表的字段只是临时使用 3创建Dao:
Dao
public interface YuanZhenDao {Insertvoid insert(YuanZhen... yuanzhens);Deletevoid delete(YuanZhen yuanZhen);Updatevoid update(YuanZhen yuanZhen);Query(select * from YuanZhen)ListYuanZhen getAll();
}
这里面包含了增上改查。
其中几个注解的含义
①Dao 表示访问 DB 的方法需要声明为接口或抽象类编译阶段将生成 _Impl 实现类此处则将生成 YuanZhenDao_Impl.java 文件
②,Insert、Delete、Update 、 Query 分别表示数据库的增删改查方法 4创建Room Database 数据库
Database(entities {YuanZhen.class},version 1,exportSchema false)
public abstract class MyDatabase extends RoomDatabase {public abstract YuanZhenDao yuanZhenDao();}
其中几个注解的含义
①Database表示数据库的定义
②entities 表示数据库中包含的表
③version表示数据库版本号
5使用
public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Thread(new Runnable() {Overridepublic void run() {MyDatabase myDatabase Room.databaseBuilder(getApplicationContext(),MyDatabase.class,YuanZhenDb).build();YuanZhenDao yuanZhenDao myDatabase.yuanZhenDao();yuanZhenDao.insert(new YuanZhen(yz,20,淄博市));yuanZhenDao.insert(new YuanZhen(yz1,22,淄博市));ListYuanZhen all yuanZhenDao.getAll();System.out.println(输出all.toString());}}).start();}
}
输出结果
I/System.out: 输出[YuanZhen{id1, nameyz, age20, address淄博市, sexnull}, YuanZhen{id2, nameyz1, age22, address淄博市, sexnull}, YuanZhen{id3, nameyz, age20, address淄博市, sexnull}
这就是基本使用。
四条件查询
如果我们想查询某一条数据的话需要在dao里面增加条件查询
Dao
public interface YuanZhenDao {Insertvoid insert(YuanZhen... yuanzhens);Deletevoid delete(YuanZhen yuanZhen);Updatevoid update(YuanZhen yuanZhen);Query(select * from YuanZhen)ListYuanZhen getAll();Query(select * from YuanZhen where name like :name)YuanZhen getByName(String name);Query(select * from YuanZhen where age in(:ages))ListYuanZhen getByAges(int[] ages);
}
使用
public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Thread(new Runnable() {Overridepublic void run() {MyDatabase myDatabase Room.databaseBuilder(getApplicationContext(),MyDatabase.class,YuanZhenDb).build();YuanZhenDao yuanZhenDao myDatabase.yuanZhenDao();yuanZhenDao.insert(new YuanZhen(yz,20,淄博市));yuanZhenDao.insert(new YuanZhen(yz1,22,淄博市));YuanZhen yz yuanZhenDao.getByName(yz);System.out.println(输出ByNameyz.toString());int[] ages {20,22};ListYuanZhen byAges yuanZhenDao.getByAges(ages);System.out.println(输出ByAgesbyAges.toString());}}).start();}
}
输出
I/System.out: 输出ByNameYuanZhen{id1, nameyz, age20, address淄博市, sexnull} I/System.out: 输出ByAges[YuanZhen{id1, nameyz, age20, address淄博市, sexnull}, YuanZhen{id2, nameyz1, age22, address淄博市, sexnull}
如果只想查姓名和地址那么可以新建一个类
public class YuanZhenNew {ColumnInfo(name name)public String name;ColumnInfo(name address)public String address;public void setName(String name) {this.name name;}public void setAddress(String address) {this.address address;}public String getName() {return name;}public String getAddress() {return address;}public YuanZhenNew(String name, String address) {this.name name;this.address address;}Overridepublic String toString() {return YuanZhenNew{ name name \ , address address \ };}
}
在dao中查询
Dao
public interface YuanZhenDao {Insertvoid insert(YuanZhen... yuanzhens);Deletevoid delete(YuanZhen yuanZhen);Updatevoid update(YuanZhen yuanZhen);Query(select * from YuanZhen)ListYuanZhen getAll();Query(select * from YuanZhen where name like :name)YuanZhen getByName(String name);Query(select * from YuanZhen where age in(:ages))ListYuanZhen getByAges(int[] ages);Query(select name,address from YuanZhen )public ListYuanZhenNew getNew();
}使用
public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Thread(new Runnable() {Overridepublic void run() {MyDatabase myDatabase Room.databaseBuilder(getApplicationContext(),MyDatabase.class,YuanZhenDb).build();YuanZhenDao yuanZhenDao myDatabase.yuanZhenDao();yuanZhenDao.insert(new YuanZhen(yz,20,淄博市));yuanZhenDao.insert(new YuanZhen(yz1,22,淄博市));ListYuanZhenNew aNew yuanZhenDao.getNew();System.out.println(输出aNewaNew.toString());}}).start();}
}
输出
I/System.out: 输出aNew[YuanZhenNew{nameyz, address淄博市}, YuanZhenNew{nameyz1, address淄博市}]
更多高级用法参考文章Android--Jetpack--数据库Room详解二-CSDN博客