OrmLite 5.3使用笔记

参考 + 整理
OrmLite 快速入门
OrmLite数据库使用
Ormlite基本使用


前言

在Android项目开发中,经常会使用到数据库,
OrmLite
它的英文全称是Object Relational Mapping
意思是对象关系映射;
简单来说,就是我们定义一个实体类,利用这个框架
它可以帮我们吧这个实体映射到我们的数据库中
数据中的字段就是我们定义实体的成员变量。


1.下载OrmLite Jar

OrmLite官网
Android需要下载两个Jar包:Core 列和 Android 列各下载一个Jar包.
在这里插入图片描述
将两个jar包,放到项目中的libs文件夹,并作为项目的Library.
在这里插入图片描述
在这里插入图片描述


  implementation files('libs/ormlite-android-5.3.jar')

  implementation files('libs/ormlite-core-5.3.jar')

2.创建Bean类

每一个Bean类,相当于都对应数据库中的一张表
在OrmLite中
不需要写sql语句
只需要在对应的字段上
添加需要的注解就够了

2.1介绍注解

@DatabaseTable
@DatabaseField
在这里插入图片描述
在这里插入图片描述


2.2Bean对象

@DatabaseTable(tableName = “t_account”),此处指创建了一个的t_account的表
@DatabaseField(columnName = “id”, generatedId = true)
generatedId = true 此处指创建了名为id的字段名且是自动生成的主键
@DatabaseField(columnName = “account”),此处指创建了名为account的字段名

@DatabaseTable(tableName = "t_account")
public class Account implements Serializable {

	@DatabaseField(columnName = "id", generatedId = true)
	private Integer id;

	@DatabaseField(columnName = "account")
	private String account;

	@DatabaseField(columnName = "password")
	private String password;

	/**
	 * 创建空的构造函数,否则报错
	 */
	public Account() {
	}


	public Account(String account, String password) {
		this.account = account;
		this.password = password;
	}


	@Override
	public String toString() {
		return "Account{" +
				"id=" + id +
				", Account='" + account + '\'' +
				", password='" + password + '\'' +
				'}';
	}

3.继承 OrmLiteSqliteOpenHelper

继承OrmLiteSqliteOpenHelper类,OrmLiteSqliteOpenHelper是SQLiteOpenHelper的子类.
我们需要自定义一个类继承自ORMlite给我们提供的OrmLiteSqliteOpenHelper,
创建一个构造方法,重写两个方法onCreate()和onUpgrade()
在onCreate()方法中使用TableUtils类中的createTable()方法初始化数据表
在onUpgrade()方法中我们可以先删除所有表,然后调用onCreate()方法中的代码重新创建表
我们需要对这个类进行单例,保证整个APP中只有一个SQLite Connection对象
代码如下↓

public class DetailDataOpenHelper extends OrmLiteSqliteOpenHelper {

	//创建DetailDataOpenHelper实例
	private static DetailDataOpenHelper instance;
	//数据库版本
	private static int DATA_BASE_VERSION = 1;
	//数据库名称
	private static String DATA_TABLE_NAME = "first.db";


	public DetailDataOpenHelper(Context context) {
		super(context, DATA_TABLE_NAME, null, DATA_BASE_VERSION);
	}

	public synchronized static DetailDataOpenHelper getInstance(Context mContext) {
		if(instance == null){
			instance = new DetailDataOpenHelper(mContext);
		}
		return instance;
	}

	@Override
	public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
		try {
			//Account.class对应的数据库表
			TableUtils.createTable(connectionSource, Account.class);
		} catch (SQLException throwable) {
			throwable.printStackTrace();
		}
	}

	@Override
	public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
		try {
			/**
			 * 当DATA_BASE_VERSION 被修改时候
             * 会执行此方法
			 * 删除原有的数据库,创建新的数据库
			 * 如果Po类中有新的字段,并且不升级数据库Version时,
			 * 将会报找不到数据库字段的错误
			 * **/
			TableUtils.dropTable(connectionSource, Account.class, true);
			TableUtils.createTable(connectionSource, Account.class);
		} catch (SQLException throwable) {
			throwable.printStackTrace();
		}
	}


}

4.操作

4.1 Create

	/**
	 * 插入一条数据 或者 集合
	 * 返回 插入的数量
	 * **/
	int create(T var1) throws SQLException;

	/**
	 * 如果不存在则插入
	 * **/
	T createIfNotExists(T var1) throws SQLException;

	/**
	 * 如果没有则创建
	 * 如果指定id则更新
	 * **/
	Dao.CreateOrUpdateStatus createOrUpdate(T var1) throws SQLException;

4.2 Select


	/**
	 * 根据Id查询
	 * @return YourPo
	 * **/
	T queryForId(ID var1) throws SQLException;

	/**
	 * 查找id By yourPo.id
	 * @param var1 yourPo
	 * @return yourPo
	 * 例子
	 * 	Account account = new Account();
	 * 	account.setId(1);
	 * 	instance.getmAccountDao().queryForSameId(account)
	 * 	Account{id=1, Account='User1', password='User1'}
	 * 	较为繁琐
	 * 	不如ById来的直接
	 * **/
	T queryForSameId(T var1) throws SQLException;

	/**
	 * 查询全部
	 * @return List<YourPo>
	 * **/
	List<T> queryForAll() throws SQLException;

	/**
	 * 条件查询根据你的po类来查询
	 *  例如
	 * 	Account ac = new Account();
	 * 	ac.setAccount("User1")
	 * 	instance.getmAccountDao().queryForMatching(user1)
     *  [Account{id=1, Account='User1', password='User1'}, Account{id=2, Account='User1', password='User1'}]
	 * 	查询 字段 Account 里有 User1 这个值的数据
	 * 	@return List<YourPo>
	 * **/
	List<T> queryForMatching(T var1) throws SQLException;


	/**
	 * 条件查询
	 * @param var1
	 * key = 字段名
	 * value = 条件
	 * 例子:
	 * 	Map<String ,Object> map = new HashMap<>();
	 * 	map.put("Account","User1");
	 * 	instance.getmAccountDao().queryForFieldValues(map)
	 * 	[Account{id=1, Account='User1', password='User1'}, Account{id=2, Account='User1', password='User1'}]
	 *
	 * **/
	List<T> queryForFieldValues(Map<String, Object> var1) throws SQLException;

4.3 Delete

	/**
	 * 根据实体类来删除
	 * @param var1
	 * @return 删除的数量
	 *
	 * **/
	int delete(T var1) throws SQLException;
	/**
	 * 根据id删除
	 * @param var1
	 * @return 删除的数量
	 *
	 * **/
	int deleteById(ID var1) throws SQLException;
	/**
	 * 根据集合实体类来删除
	 * @param var1
	 * @return 删除的数量
	 *
	 * **/
	int delete(Collection<T> var1) throws SQLException;

	/**
	 * 根据id集合来删除
	 * @param var1
	 * @return 删除的数量
	 *
	 * **/
	int deleteIds(Collection<ID> var1) throws SQLException;

4.4 Update

	/**
	 * 根据实体类来修改(不能修改id)
	 * @param var1
	 * @return 修改的成功的数量
	 *
	 * **/
	int update(T var1) throws SQLException;

	/**
	 * 根据实体类里的id,来修改id
	 * @param var1
	 * @return 修改的成功的数量
	 * 例子
	 * Account account1 = new Account();
	 * account1.setId(1);
	 * instance.getmAccountDao().updateId(account1,22);
	 * **/
	int updateId(T var1, ID var2) throws SQLException;

5.Dao

这里将Dao写成单例,对外公布获取该单例的方法。
每个表都会有一个单独的Dao用于操作,通过getDao方法,获得Dao

public class AccountDao{
	//全局单例
	private static AccountDao mSearchInstance;
	// ORMLite提供的DAO类对象,第一个泛型是要操作的数据表映射成的实体类;第二个泛型是这个实体类中ID的数据类型
	private Dao<Account, Integer> mAccountDao;

	public Dao<Account, Integer> getmAccountDao() {
		return mAccountDao;
	}

	private AccountDao(Context mContext){
		try {
			mAccountDao = DetailDataOpenHelper.getInstance(mContext).getDao(Account.class);
		} catch (SQLException throwable) {
			throwable.printStackTrace();
		}
	}

	public static AccountDao getInstance(Context mContext){
		if(mSearchInstance == null){
			mSearchInstance = new AccountDao(mContext);
		}
		return mSearchInstance;
	}

	/**
	 *
	 * 插入一个对象
	 *
	 * **/
	public void insertAccount(Account account){
		try {
			int i = mAccountDao.create(account);
			System.out.println(i);
		} catch (SQLException throwable) {
			throwable.printStackTrace();
		}
	}

	//查询全部
	public List<Account> findAccountAll() throws SQLException {
		return mAccountDao.queryForAll();
	}
	
}


6.调用

public class MainActivity extends AppCompatActivity {
	private String LAG = "OrmLite";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);


		AccountDao instance = AccountDao.getInstance(this);

//		插入单个
		instance.insertAccount(new Account("User1", "User1"));
		instance.insertAccount(new Account("User2", "User2"));

//      查询全部
		try {
			Log.i(LAG, instance.findAccountAll() + "");
		} catch (SQLException throwables) {
			throwables.printStackTrace();
		}
	}}

2021-01-27 13:19:11.200 16927-16927/com.example.ormliteactivity I/OrmLite:
[Account{id=1, Account='User1', password='User1'}, Account{id=2, Account='User2', password='User2'}]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值