安卓学习 Day24:ORMLite框架

本文介绍了ORM(Object-Relational Mapping)的概念,详细讲解了使用ORMLite框架在Android中实现类与数据库表的映射,并提供了一个完整的案例,包括创建实体类、数据库操作管理工具类的实现,以及主界面的布局和事件监听。通过这个案例,读者可以了解如何在Android应用中进行数据的增删查改操作。
摘要由CSDN通过智能技术生成

一、ORM概述

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

二、类与表的对应关系

  • 首先我们有这样一个person表,表有两个字段,两条记录。
    在这里插入图片描述
  • 表结构我们可以用一个类来表示,而类的成员变量则和表的字段对应。
    在这里插入图片描述
  • 而表内的数据则用根据表结构创建的类对象来表示。
    在这里插入图片描述
    总结:
  1. 类与表对应:成员变量与列对应
  2. 对象与行:将一个对象的成员变量存为一行

三、案例演示

1、创建安卓应用

在这里插入图片描述

2、导入ORMLite的依赖

  • 在build.gradle中加入implementation 'com.j256.ormlite:ormlite-android:5.1',然后点击【Sync Now】
    在这里插入图片描述

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

(1)创建Person类

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

(4)将Person类与person表映射

在这里插入图片描述

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

  • columnNam的值为表字段名,默认值为成员变量名,可以不写。
  • generatedId的值为 true/false 表示是否是自增值,默认值为 false。
    在这里插入图片描述

(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类

在这里插入图片描述

(2)继承OrmLiteSqliteOpenHelper

  • 重写两个方法onCreate()和onUpgrade()
    在这里插入图片描述
  • 定义一个构造方法
    在这里插入图片描述

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

在这里插入图片描述

(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、添加背景图片

在这里插入图片描述

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

<?xml version="1.0" encoding="utf-8"?>
<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)声明变量

在这里插入图片描述

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

在这里插入图片描述

(3)实例化MyHelper类

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

(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)运行程序,查看效果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值