安卓学习 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表,表有两个字段,两条记录。
- 表结构我们可以用一个类来表示,而类的成员变量则和表的字段对应。
- 而表内的数据则用根据表结构创建的类
对象
来表示。
总结:
- 类与表对应:成员变量与列对应
- 对象与行:将一个对象的成员变量存为一行
三、案例演示
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框架相关推荐
- 安卓学习日记——Vitamio框架
Vitamio中文名称"维他蜜",是一款Android与IOS平台上的全能多媒体开发框架,全面支持硬件解码与GPU渲染.Vitamio能够流程播放720P甚至1080P高清MKV, ...
- 安卓学习笔记45:初探开源框架OrmLite
文章目录 一.OrmLite框架 (一)OrmLite框架概述 (二)OrmLite框架官网 二.案例演示 - 操作教师表 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[OrmL ...
- 【安卓Framework学习】Wifi框架学习之热点评分机制
系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...
- 【安卓Framework学习】Wifi框架学习之核心类
系列文章目录 [安卓Framework学习]Wifi框架学习之开启与关闭流程 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开 ...
- 【安卓Framework学习】Wifi框架学习之wifi状态机
系列文章目录 [安卓Framework学习]Wifi框架学习之核心类. [安卓Framework学习]Wifi框架学习之开启与关闭流程. [安卓Framework学习]Wifi框架学习之连接与断开流程 ...
- 【安卓Framework学习】Wifi框架学习之开启与关闭流程
系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...
- 2020年安卓学习笔记目录
文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...
- 安卓学习文档收集汇总
安卓学习文档收集汇总 https://www.jianshu.com/p/86aed183ce6c?utm_campaign=maleskine&utm_content=note&ut ...
- Android 需要学习的UI框架
Android需要了解学习的UI框架等 UI Awesome-MaterialDesign - MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局, ...
最新文章
- 参加UI设计培训如何高效学习
- 如何在本地运行查看github上的开源项目
- python中的轻量级定时任务调度库:schedule
- 【若依(ruoyi)】打开新的选项卡
- 第12讲:Ajax 的原理和解析
- debug pricing calculation rfc call
- [HAOI2016]字符合并(ing)
- 【NOIP2017】【Luogu3954】成绩(模拟)
- linux替换字符串 正则,Linux 字符串操作-裁剪和正则替换
- cad中直径符号不显示_你知道在CAD制图软件中如何输入公差/直径符号吗?CAD入门学习技巧!...
- 华为设备配置Easy IP 地址转换
- 前端表单神器form-create,复杂表单轻松搞定
- 【pycharm】英文输入法变成全角字符无法输入
- 网易云音乐评论墙php源码,网易云音乐热评墙那些令人感慨的句子,哪一句打动了你?...
- Design a Facebook NewsFeed
- 解决module ‘mediapipe.python.solutions.face_mesh‘ has no attribute ‘FACE_CONNECTIONS‘问题的办法
- 知云文献翻译打不开_推荐一款文献翻译软件,免费又高效的那种
- 小米路由器开启外网访问SSH和WEB管理界面
- VMware下CentOS7最小化安装及配置
- 长治计算机专业,长治计算机专业好就业吗?,计算机专业
热门文章
- 基于web的大学生心理健康咨询管理系统
- Warning: Cannot update during an existing state transition (such as within `render`)
- 【自动化测试】Postman工具,Tests中获取response返回值错误的问题,显示为[object Object]
- VUE的项目中怎样修改浏览器窗口的 LOGO
- 服务器amp状态是什么意思,「理解HTTP」之常见的状态码 amp;#8211; 魅族科技开发团队 amp;#8211; SegmentFault---HTML5中文学习网...
- Macbook Pro M1芯片Python开发环境配置
- python画管柱图_汽车电动控制调整转向管柱的制作方法
- oracle impdp优化,ORACLE IMPDP优化调整
- like能否使用索引?做个实验一探究竟
- 【Python】车道线拟合曲线的曲率半径计算公式及代码