文章目录

  • 一、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表,表有两个字段,两条记录。
  • 表结构我们可以用一个类来表示,而类的成员变量则和表的字段对应。
  • 而表内的数据则用根据表结构创建的类对象来表示。

    总结:
  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;}@Overridepublic 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);}@Overridepublic void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {try {// 根据类上的映射关系生成表TableUtils.createTable(connectionSource, Person.class);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic 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"><TextViewandroid: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" /><EditTextandroid: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" /><TextViewandroid: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" /><EditTextandroid: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" /><Buttonandroid: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" /><Buttonandroid: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; // 查询按钮@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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框架相关推荐

  1. 安卓学习日记——Vitamio框架

    Vitamio中文名称"维他蜜",是一款Android与IOS平台上的全能多媒体开发框架,全面支持硬件解码与GPU渲染.Vitamio能够流程播放720P甚至1080P高清MKV, ...

  2. 安卓学习笔记45:初探开源框架OrmLite

    文章目录 一.OrmLite框架 (一)OrmLite框架概述 (二)OrmLite框架官网 二.案例演示 - 操作教师表 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[OrmL ...

  3. 【安卓Framework学习】Wifi框架学习之热点评分机制

    系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...

  4. 【安卓Framework学习】Wifi框架学习之核心类

    系列文章目录 [安卓Framework学习]Wifi框架学习之开启与关闭流程 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开 ...

  5. 【安卓Framework学习】Wifi框架学习之wifi状态机

    系列文章目录 [安卓Framework学习]Wifi框架学习之核心类. [安卓Framework学习]Wifi框架学习之开启与关闭流程. [安卓Framework学习]Wifi框架学习之连接与断开流程 ...

  6. 【安卓Framework学习】Wifi框架学习之开启与关闭流程

    系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...

  7. 2020年安卓学习笔记目录

    文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...

  8. 安卓学习文档收集汇总

    安卓学习文档收集汇总 https://www.jianshu.com/p/86aed183ce6c?utm_campaign=maleskine&utm_content=note&ut ...

  9. Android 需要学习的UI框架

    Android需要了解学习的UI框架等 UI Awesome-MaterialDesign - MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局, ...

最新文章

  1. 参加UI设计培训如何高效学习
  2. 如何在本地运行查看github上的开源项目
  3. python中的轻量级定时任务调度库:schedule
  4. 【若依(ruoyi)】打开新的选项卡
  5. 第12讲:Ajax 的原理和解析
  6. debug pricing calculation rfc call
  7. [HAOI2016]字符合并(ing)
  8. 【NOIP2017】【Luogu3954】成绩(模拟)
  9. linux替换字符串 正则,Linux 字符串操作-裁剪和正则替换
  10. cad中直径符号不显示_你知道在CAD制图软件中如何输入公差/直径符号吗?CAD入门学习技巧!...
  11. 华为设备配置Easy IP 地址转换
  12. 前端表单神器form-create,复杂表单轻松搞定
  13. 【pycharm】英文输入法变成全角字符无法输入
  14. 网易云音乐评论墙php源码,网易云音乐热评墙那些令人感慨的句子,哪一句打动了你?...
  15. Design a Facebook NewsFeed
  16. 解决module ‘mediapipe.python.solutions.face_mesh‘ has no attribute ‘FACE_CONNECTIONS‘问题的办法
  17. 知云文献翻译打不开_推荐一款文献翻译软件,免费又高效的那种
  18. 小米路由器开启外网访问SSH和WEB管理界面
  19. VMware下CentOS7最小化安装及配置
  20. 长治计算机专业,长治计算机专业好就业吗?,计算机专业

热门文章

  1. 基于web的大学生心理健康咨询管理系统
  2. Warning: Cannot update during an existing state transition (such as within `render`)
  3. 【自动化测试】Postman工具,Tests中获取response返回值错误的问题,显示为[object Object]
  4. VUE的项目中怎样修改浏览器窗口的 LOGO
  5. 服务器amp状态是什么意思,「理解HTTP」之常见的状态码 amp;#8211; 魅族科技开发团队 amp;#8211; SegmentFault---HTML5中文学习网...
  6. Macbook Pro M1芯片Python开发环境配置
  7. python画管柱图_汽车电动控制调整转向管柱的制作方法
  8. oracle impdp优化,ORACLE IMPDP优化调整
  9. like能否使用索引?做个实验一探究竟
  10. 【Python】车道线拟合曲线的曲率半径计算公式及代码