implementation ‘android.arch.persistence.room:runtime:1.0.0‘ annotationProcessor ‘android.arch.persistence.room:compiler:1.0.0‘
package zhangphil.demo; import android.arch.persistence.room.ColumnInfo; import android.arch.persistence.room.Entity; import android.arch.persistence.room.PrimaryKey; /** * Created by Phil on 2017/11/22. */ @Entity(tableName = "user_table") public class User { @PrimaryKey(autoGenerate = true) public int id; @ColumnInfo(name = "userName") public String name; @ColumnInfo(name = "userAge") public int age; @ColumnInfo(name = "updateTime") public long updateTime; }
@PrimaryKey标注该字段是表中的主键,可根据该主键进行数据库的基本增删改查等等这些操作。当设置autoGenerate = true后,该主键将自增长。@ColumnInfo注解后面跟着的name,标明定义的Java变量将作为表中的一列。比如User中的
@ColumnInfo(name = "userName") public String name;那么数据库中表的一列userName中存储的数据就是name。
package zhangphil.demo; import android.arch.persistence.room.Dao; import android.arch.persistence.room.Delete; import android.arch.persistence.room.Insert; import android.arch.persistence.room.OnConflictStrategy; import android.arch.persistence.room.Query; import android.arch.persistence.room.Update; import java.util.List; /** * Created by Phil on 2017/11/22. */ @Dao public interface UserDao { /** * 查询 * * @return */ @Query("SELECT * FROM user_table") public List<User> getAllUsers(); /** * 添加 * * @param users */ @Insert(onConflict = OnConflictStrategy.REPLACE) public void insertUser(User... users); /** * 更新 * * @param users */ @Update public void updateUser(User... users); /** * 删除 * * @param users */ @Delete public void deleteUser(User... users); }
/** * 查询 * * @return */ @Query("SELECT * FROM user_table") public List<User> getAllUsers();该SQL语句将从我之前建立的数据块表“user_table”中,查询出所有的内容,然后返回一个集合。其他关于数据库的操作如增加(@Insert),删除(@Delete),修改(更新,@Update),均以注解标明。这些基本操作可以按照User中定义的@PrimaryKey主键操作。
package zhangphil.demo; import android.arch.persistence.room.Database; import android.arch.persistence.room.RoomDatabase; /** * Created by Phil on 2017/11/22. */ @Database(entities = {User.class}, version = 1) public abstract class UserDatabase extends RoomDatabase { public abstract UserDao getUserDao(); }UserDatabase最重要的功能是提供给开发者各种Dao。开发者获得Dao后,就可以像操作基本Java对象实例一样操作Android Room数据中数据。
(五)在MainActivity.java中测试我写的Android Room。注意涉及到数据库操作,要放到后台线程中运行。MainActivity.java:
package zhangphil.demo; import android.arch.persistence.room.Room; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.util.List; public class MainActivity extends AppCompatActivity { private String TAG = "输出"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new Thread(new Runnable() { @Override public void run() { databaseOperation(); } }).start(); } private void databaseOperation() { UserDatabase mUserDatabase = Room.databaseBuilder(getApplicationContext(), UserDatabase.class, "users").build(); UserDao mUserDao = mUserDatabase.getUserDao(); //写数据库 Log.d(TAG, "开始写入数据..."); writeDatabase(mUserDao, "张三", 18); writeDatabase(mUserDao, "李四", 19); Log.d(TAG, "写入数据库完毕."); //读数据库 Log.d(TAG, "第1次读数据库"); readDatabase(mUserDao); //更新数据库 updateUser(mUserDao); //读数据库 Log.d(TAG, "第2次读数据库"); readDatabase(mUserDao); //删除数据,根据主键id deleteUser(mUserDao, 1); //读数据库 Log.d(TAG, "第3次读数据库"); readDatabase(mUserDao); Log.d(TAG, "========================"); Log.d(TAG, "本轮数据库操作事务全部结束"); Log.d(TAG, "========================"); } private void readDatabase(UserDao dao) { Log.d(TAG, "读数据库..."); List<User> users = dao.getAllUsers(); for (User u : users) { Log.d(TAG, u.id + "," + u.name + "," + u.age + "," + u.updateTime); } Log.d(TAG, "读数据库完毕."); } private void writeDatabase(UserDao dao, String name, int age) { User user = new User(); user.name = name; user.age = age; user.updateTime = System.currentTimeMillis(); dao.insertUser(user); } private void updateUser(UserDao dao) { Log.d(TAG, "更新数据库..."); User u = new User(); u.id = 2; u.name = "赵五"; u.age = 20; u.updateTime = System.currentTimeMillis(); dao.updateUser(u); Log.d(TAG, "更新数据库完毕."); } private void deleteUser(UserDao dao, int id) { Log.d(TAG, "删除数据库..."); User u = new User(); u.id = id; dao.deleteUser(u); Log.d(TAG, "删除数据库完毕."); } }
11-23 10:49:22.631 19616-19641/zhangphil.demo D/输出: 开始写入数据... 11-23 10:49:22.688 19616-19641/zhangphil.demo D/输出: 写入数据库完毕. 11-23 10:49:22.688 19616-19641/zhangphil.demo D/输出: 第1次读数据库 11-23 10:49:22.688 19616-19641/zhangphil.demo D/输出: 读数据库... 11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 1,张三,18,1511405362631 11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 2,李四,19,1511405362674 11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 读数据库完毕. 11-23 10:49:22.689 19616-19641/zhangphil.demo D/输出: 更新数据库... 11-23 10:49:22.692 19616-19641/zhangphil.demo D/输出: 更新数据库完毕. 11-23 10:49:22.692 19616-19641/zhangphil.demo D/输出: 第2次读数据库 11-23 10:49:22.692 19616-19641/zhangphil.demo D/输出: 读数据库... 11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 1,张三,18,1511405362631 11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 2,赵五,20,1511405362689 11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 读数据库完毕. 11-23 10:49:22.693 19616-19641/zhangphil.demo D/输出: 删除数据库... 11-23 10:49:22.696 19616-19641/zhangphil.demo D/输出: 删除数据库完毕. 11-23 10:49:22.696 19616-19641/zhangphil.demo D/输出: 第3次读数据库 11-23 10:49:22.696 19616-19641/zhangphil.demo D/输出: 读数据库... 11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: 2,赵五,20,1511405362689 11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: 读数据库完毕. 11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: ======================== 11-23 10:49:22.698 19616-19641/zhangphil.demo D/输出: 本轮数据库操作事务全部结束 11-23 10:49:22.699 19616-19641/zhangphil.demo D/输出: ========================
Android官方ORM数据库Room技术解决方案简介(一)
原文:http://blog.csdn.net/zhangphil/article/details/78611632