安卓学习 Day24:ORMLite框架

文章目录

  • 一、ORM概述
  • 二、类与表的对应关系
  • 三、案例演示
    • 1、创建安卓应用
    • 2、导入ORMLite的依赖
    • 3、创建与person表对应的实体类 - Person
      • (1)创建Person类
      • (2)定义与表字段对应的成员变量
      • (3)定义构造方法和toString()方法
      • (4)将Person类与person表映射
      • (5)将成员变量与表的列对应
      • (6)源代码
    • 4、数据库操作管理工具类 - MyHelper
      • (1)创建MyHelper类
      • (2)继承`OrmLiteSqliteOpenHelper`
      • (3)定义创建数据库时调用的方法
      • (4)源代码
    • 5、添加背景图片
    • 6、主布局资源文件 - activity_main.xml
    • 7、主界面类 - MainActivity
      • (1)声明变量
      • (2)通过资源标识符获取控件实例
      • (3)实例化MyHelper类
      • (4)注册插入按钮单击事件监听器
      • (5)注册查询按钮单击事件监听器
      • (6)主界面类源代码
      • (7)运行程序,查看效果

一、ORM概述

  • 对象关系映射(Object Relational Mapping,简称ORM)是通过描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式
  • 常用ORM框架:ORMLite、SugarORM、GreenDAO、Active Android、Realm。

二、类与表的对应关系

  • 首先我们有这样一个person表,表有两个字段,两条记录。
    安卓学习 Day24:ORMLite框架_第1张图片
  • 表结构我们可以用一个类来表示,而类的成员变量则和表的字段对应。
    安卓学习 Day24:ORMLite框架_第2张图片
  • 而表内的数据则用根据表结构创建的类对象来表示。
    安卓学习 Day24:ORMLite框架_第3张图片
    总结:
  1. 类与表对应:成员变量与列对应
  2. 对象与行:将一个对象的成员变量存为一行

三、案例演示

1、创建安卓应用

安卓学习 Day24:ORMLite框架_第4张图片

2、导入ORMLite的依赖

  • 在build.gradle中加入implementation 'com.j256.ormlite:ormlite-android:5.1',然后点击【Sync Now】
    安卓学习 Day24:ORMLite框架_第5张图片

3、创建与person表对应的实体类 - Person

(1)创建Person类

安卓学习 Day24:ORMLite框架_第6张图片

(2)定义与表字段对应的成员变量

安卓学习 Day24:ORMLite框架_第7张图片

(3)定义构造方法和toString()方法

安卓学习 Day24:ORMLite框架_第8张图片

(4)将Person类与person表映射

安卓学习 Day24:ORMLite框架_第9张图片

(5)将成员变量与表的列对应

  • columnNam的值为表字段名,默认值为成员变量名,可以不写。
  • generatedId的值为 true/false 表示是否是自增值,默认值为 false。
    安卓学习 Day24:ORMLite框架_第10张图片

(6)源代码

package net.zs.testormlite;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
//将Person类与person表映射
@DatabaseTable(tableName = "person")
public class Person {
    // 将成员变量与表的列对应
    @DatabaseField(columnName = "id", generatedId = true)
    public Integer id;
    @DatabaseField(columnName = "name")
    public String name;
    @DatabaseField(columnName = "age")
    public Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4、数据库操作管理工具类 - MyHelper

(1)创建MyHelper类

安卓学习 Day24:ORMLite框架_第11张图片

(2)继承OrmLiteSqliteOpenHelper

  • 重写两个方法onCreate()和onUpgrade()
    安卓学习 Day24:ORMLite框架_第12张图片
  • 定义一个构造方法
    安卓学习 Day24:ORMLite框架_第13张图片

(3)定义创建数据库时调用的方法

安卓学习 Day24:ORMLite框架_第14张图片

(4)源代码

package net.zs.testormlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

import java.sql.SQLException;

public class MyHelper extends OrmLiteSqliteOpenHelper {

    public MyHelper(Context context) {
        super(context, "Person.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        try {
            // 根据类上的映射关系生成表
            TableUtils.createTable(connectionSource, Person.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {

    }
}

5、添加背景图片

安卓学习 Day24:ORMLite框架_第15张图片

6、主布局资源文件 - activity_main.xml


<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="68dp"
        android:layout_marginTop="120dp"
        android:text="姓名:"
        android:textSize="25sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/edtName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="72dp"
        android:ems="10"
        android:hint="name"
        android:inputType="textPersonName"
        app:layout_constraintBaseline_toBaselineOf="@+id/tvName"
        app:layout_constraintStart_toStartOf="@+id/tvName" />

    <TextView
        android:id="@+id/tvAge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="68dp"
        android:layout_marginTop="220dp"
        android:text="年龄:"
        android:textSize="25sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/edtAge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="72dp"
        android:ems="10"
        android:hint="age"
        android:inputType="textPersonName"
        app:layout_constraintBaseline_toBaselineOf="@+id/tvAge"
        app:layout_constraintStart_toStartOf="@+id/tvAge" />

    <Button
        android:id="@+id/btnInsert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="7dp"
        android:text="插入"
        app:layout_constraintBaseline_toBaselineOf="@+id/btnQuery"
        app:layout_constraintEnd_toStartOf="@+id/btnQuery"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/btnQuery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:layout_marginEnd="9dp"
        android:text="查询"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btnInsert"
        app:layout_constraintTop_toBottomOf="@+id/edtAge" />

androidx.constraintlayout.widget.ConstraintLayout>

7、主界面类 - MainActivity

(1)声明变量

安卓学习 Day24:ORMLite框架_第16张图片

(2)通过资源标识符获取控件实例

安卓学习 Day24:ORMLite框架_第17张图片

(3)实例化MyHelper类

安卓学习 Day24:ORMLite框架_第18张图片

(4)注册插入按钮单击事件监听器

安卓学习 Day24:ORMLite框架_第19张图片

(5)注册查询按钮单击事件监听器

安卓学习 Day24:ORMLite框架_第20张图片

(6)主界面类源代码

package net.zs.testormlite;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.j256.ormlite.dao.Dao;

import java.sql.SQLException;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private EditText name; // 用户输入的姓名
    private EditText age; // 用户输入的年龄
    private Button insert; // 插入按钮
    private Button query; // 查询按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        name = findViewById(R.id.edtName);
        age = findViewById(R.id.edtAge);
        insert = findViewById(R.id.btnInsert);
        query = findViewById(R.id.btnQuery);

        // 初始化
        MyHelper myHelper = new MyHelper(MainActivity.this);

        /**
         * 插入按钮事件监听
         */
        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    // 获得一个具有增删改查方法的对象,叫做Dao对象
                    Dao<Person, Integer> dao = myHelper.getDao(Person.class);

                    // 创建Person类对象,传入用户输入的数据
                    Person person = new Person();
                    person.setName(name.getText().toString());

                    // 插入数据
                    dao.create(person);
                    Toast.makeText(MainActivity.this, "插入成功!", Toast.LENGTH_SHORT).show();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
        });

        /**
         * 查询按钮事件监听
         */
        query.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获得一个具有增删改查方法的对象,叫做Dao对象
                try {
                    Dao<Person, Integer> dao = myHelper.getDao(Person.class);
                    List<Person> persons = dao.queryForAll();
                    Toast.makeText(MainActivity.this, "查询结果" + persons, Toast.LENGTH_SHORT).show();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

(7)运行程序,查看效果

安卓学习 Day24:ORMLite框架_第21张图片

你可能感兴趣的:(安卓编程基础,android,学习,java,android,studio)