数据库框架(ORM)

时间:2024-03-13 15:20:54

1. Ormlite是什么?

  • Android原生操作数据库的方式是这样的:

    • 首先定义一个类继承SQLiteOpenHelper,重写onCreate和onUpdate

    • 后续对数据库的增删改查以及创建和销毁都需要操作相对比较底层的sql语句,难以记忆又容易出错

    • 而且操作sql语句代码量多,sql语句的逻辑比较繁琐

  • 而Java是面向对象的语言,有没有一种方式可以让我们不去关心sql语句的编写,直接面向对象;我们操作对象就间接操作了数据库。那么orm数据库框架就是帮助我们完成这个事,并且能够将javabean和数据库的表映射起来,javabean的字段就是表的字段。这就是为什么叫o(对象)r(关系)m(映射)的原因。

  • Ormlite就是一个orm数据库框架之一。

2. 为什么选择Ormlite?

Andorid平台的orm数据库框架有很多:比如greenDao,DBFlow,Relm等,甚至xutil,afinal;每个orm框架各有优缺点,而Ormlite使用起来非常容易上手,效率也还不错,所以我们选择它作为学习的对象。试想想,如果一个类库光配置就需要搞一天,你还会有心情用它么?

 

3,添加jar包

数据库框架(ORM)

4,简单使用

【1】创建DBHelper类,继承OrmLiteSqliteOpenHelper类,重写onCreate和onUpgrade

public class DBHelper extends OrmLiteSqliteOpenHelper {

    public static String db_name = "ormlite.db";

    private DBHelper(Context context) {

        super(context, db_name, null, 1);

    }



    @Override

    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {

        //需要创建表了

        try {

            //将会根据Stu去创建一个表

            TableUtils.createTable(connectionSource,Stu.class);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }





    @Override

    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {

        //需要drop表了

        try {

            TableUtils.dropTable(connectionSource,Stu.class,true);

        } catch (SQLException e) {

            e.printStackTrace();

        }





    }

}
  • 私有化构造,提供对应的访问对象。

 

【2】创建javabean 

  • 创建表自定义表名

@DatabaseTable(tableName = "t_stu")//自定义表的名称

public class Stu {}
  • 定义这个列是自增长的id

   

 @DatabaseField(generatedId = true)//定义这个列是自增长的id

    public int id;
  • 字段可以配置外部关联键

数据库框架(ORM)

  • Stu 的JavaBean 

@DatabaseTable(tableName = "t_stu")//自定义表的名称

public class Stu {



    //必须创建空参构造,否则会报错 

    public Stu(){}





    public Stu(String name, int age) {

        this.name = name;

        this.age = age;

    }





    @DatabaseField(generatedId = true)//定义这个列是自增长的id

    public int id;





    @DatabaseField

    public String name;





    @DatabaseField

    public int age;





    @Override

    public String toString() {

        return "Stu{" +

                "id=" + id +

                ", name='" + name + '\'' +

                ", age=" + age +

                '}';

    }

}

 

【3】增删改查

  • 获取DBHelper对象

 

   //马上要使用Ormlite进行增删改查了

        DBHelper dbHelper = DBHelper.with(this);

        try {

            //获取操作stu表的数据库访问对象

            Dao<Stu,Integer> stuDao = dbHelper.getDao(Stu.class);





//            createStu(stuDao);

//              updateStu(stuDao);

            deleteStu(stuDao);

              queryStu(stuDao);





        } catch (SQLException e) {

            e.printStackTrace();

        }

    }
  • 增加

/**

* 创建学生

* @param stuDao

*/

private void createStu(Dao<Stu, Integer> stuDao) throws SQLException {

    Stu stu = new Stu("刘德华", 18);

    stuDao.create(stu);

    Log.e("tag","保存成功!");

}
  • 删除

/**

* 删除学生

* @param stuDao

*/

private void deleteStu(Dao<Stu, Integer> stuDao) throws SQLException {

    int i = stuDao.deleteById(1);

}
  • 修改

/**

* 更新学生

* @param stuDao

*/

private void updateStu(Dao<Stu, Integer> stuDao) throws SQLException {

    Stu stu = stuDao.queryForId(1);

    stu.name = "黎明";

    stu.age = 50;

    stuDao.update(stu);

}
  • 查询

/**

* 查询学生

* @param stuDao

*/

private void queryStu(Dao<Stu, Integer> stuDao) throws SQLException {

    List<Stu> stus = stuDao.queryForAll();

    Log.e("tag","查询到了"+stus.size()+"条数据!");

    if(stus!=null && !stus.isEmpty()){

        for (Stu stu : stus) {

            Log.e("tag",stu.toString());

        }

    }

}