GreenDao初体验
来源:互联网 发布:淘宝卖家可以不发货吗 编辑:程序博客网 时间:2024/06/06 16:33
GreenDao初体验进行时
- 添加java包,GreenDao需要三个jar包,此处用2.1版本示例
1. 首先添加代码生成所需要的jar,不过这个是java程序,需要写的添加在Module的build.gradle文件中
dependencies { ... compile 'de.greenrobot:greendao-generator:2.1.0'}
- 主工程中引入其他两个操作数据库的jar
dependencies { ... compile 'de.greenrobot:greendao-generator:2.1.0' compile 'de.greenrobot:greendao:2.1.0'}
- 准备工作完成,接下来对象创建以及关联了,接着在Module项目中创建一个java程序,代码如下:
public static void main(String[] args) throws Exception { // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。 // 两个参数分别代表:数据库版本号与自动生成代码的包路径。 Schema schema = new Schema(1, "com.database");// 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示:// Schema schema = new Schema(1, "me.itangqi.bean");// schema.setDefaultJavaPackageDao("me.itangqi.dao"); // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。 // schema2.enableActiveEntitiesByDefault(); // schema2.enableKeepSectionsByDefault(); // 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。 addAll(schema);// addConfig(schema);// addGroup(schema);// addDispose(schema);//// addDevice(schema);// addGroup_Device(schema); // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。 // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。 new DaoGenerator().generateAll(schema, "E:/wyw/studio/1219/testDemo/app/src/main/java-gen");
- 实体内容如下所示
private static void addAll(Schema schema) { /*存储对象 id nickName(名称) address(配置地址) wifi_id;*/ /**总配置表*/ Entity note = schema.addEntity("ConfigBean"); note.addLongProperty("configId").primaryKey(); note.addStringProperty("address"); note.addStringProperty("nickname"); note.addLongProperty("w_ID"); /**组表*/ Entity gnote = schema.addEntity("GroupBean"); gnote.addLongProperty("groupId").primaryKey(); gnote.addStringProperty("nickname"); /**音量部署dispose,该信息包含了具体的音响进度控制*/ Entity dnote = schema.addEntity("DisposeBean"); //配置部署id dnote.addLongProperty("disposeId").primaryKey(); //主音量 dnote.addIntProperty("ch1"); dnote.addIntProperty("ch2"); dnote.addIntProperty("master"); /**设备表,现在想一下,是设备一对多的管,也就是一个设备多个配置,但是一个配置只有一个设备,相当于设备是顾客,订单是配置*/ Entity sound = schema.addEntity("DeviceBean"); sound.addLongProperty("deviceId").primaryKey(); //设备名称 sound.addStringProperty("nickname"); //设备地址 sound.addStringProperty("address"); //-------------------------------------------------------------------------------------------- /** * 建立配置组关系【一对多关系】 */ /**通过组管理【也即最开始的配置】*/ Property property3 = gnote.addLongProperty("configId").getProperty();//组中添加管理id gnote.addToOne(note, property3);//一个组对应一个管理配置 note.addToMany(gnote, property3).setName("groups");//一个配置中添加一个组列表 /** * 建立组和配置的关系,一个组对应多个配置,通过配置也可查询组,组有上下级的配置 还有平级的配置[已舍弃,用第二种方法],此处指的是上下级【一对多关系】 */ /**通过组查找配置,一对多,一个组对应多个配置*/ Property property2 = dnote.addLongProperty("groupId").getProperty();//设备配置中添加组id dnote.addToOne(gnote, property2);//一个配置对应一个组信息 gnote.addToMany(dnote, property2).setName("disposes");//一个组中多个设备配置信息 /**建立设备与配置之间的关系*/ Property property = dnote.addLongProperty("deviceId").getProperty();//配置中添加设备id dnote.addToOne(sound, property);//一个配置中一个设备,相当于把设备写到配置中去,通过设备id,关联设备 sound.addToMany(dnote, property).setName("disposes");//一个设备中存在多个配置,通过设备id,查询多个配置 }
- 数据库关系如下所示
- 运行程序,在目录:E:/wyw/studio/1219/testDemo/app/src/main/java-gen 下面会生成我们的数据库程序,吧代码剪切到主项目中
- 接下来就是各种数据库操作了,首先在Application中写一些初始化代码,如下:
/** * Created by wangyawen on 2017/4/20 0020. */public class App extends Application { private static App mInstance; private static final String DB_NAME = "xx-dbs"; private static DaoMaster mDaoMaster; private static DaoSession mDaoSession; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); if (mInstance == null) mInstance = this; } public static DaoMaster getDaoMaster(Context context) { if (mDaoMaster == null) { DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null); SQLiteDatabase db = openHelper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); } return mDaoMaster; } ; public static DaoSession getDaoSession(Context context) { if (mDaoSession == null) { if (mDaoMaster == null) { getDaoMaster(context); } mDaoSession = mDaoMaster.newSession(); } return mDaoSession; }}
- 然后是数据库操作的帮助类
/** * Created by wangyawen on 2017/4/12 0012. * 数据库管理类 */public class Presenter { DaoSession daoSession; //总配置管理【包含设备】 ConfigBeanDao configDao; //设备调试管理 DisposeBeanDao disposeDao; //组配置 GroupDisposeDao groupDisposeDao; //组管理 GroupBeanDao groupDao; //设备管理 DeviceBeanDao deviceDao; private static Presenter instance; private static Context appContext; private Presenter() { } public static Presenter getInstance(Context context) { if (instance == null) { instance = new Presenter(); if (appContext == null) { appContext = context.getApplicationContext(); } instance.daoSession = App.getDaoSession(context); instance.configDao = instance.daoSession.getConfigBeanDao(); instance.disposeDao = instance.daoSession.getDisposeBeanDao(); instance.groupDao = instance.daoSession.getGroupBeanDao(); instance.deviceDao = instance.daoSession.getDeviceBeanDao(); instance.groupDisposeDao = instance.daoSession.getGroupDisposeDao(); } return instance; } //-------------总配置操作---------------------------------- /** * 增加一条配置信息 * * @param bean * @return * @throws Exception */ public long add(ConfigBean bean) throws Exception { return configDao.insertOrReplace(bean); } /** * 修改配置 * * @param note * @throws Exception */ public void update(ConfigBean note) throws Exception { configDao.update(note); } /** * 查询所有配置 * * @return * @throws Exception */ public List<ConfigBean> loadAll_cf() throws Exception { return configDao.loadAll(); } /** * 删除某一条配置 * * @param note * @throws Exception */ public void delete(ConfigBean note) throws Exception { configDao.delete(note); } //-------------------组操作----------------------------- /** * 添加一个新组 * * @param bean * @return * @throws Exception */ public long add(GroupBean bean) throws Exception { return groupDao.insertOrReplace(bean); } /** * 修改组信息 * * @param note * @throws Exception */ public void update(GroupBean note) throws Exception { groupDao.update(note); } /** * 删除组 * * @param note * @throws Exception */ public void delete(GroupBean note) throws Exception { groupDao.delete(note); } //-------------------------------配置【也即设备显示】操作----------------------------------------------------- /** * 增加配置,配置中包含设备 * * @param bean * @return * @throws Exception */ public long add(DisposeBean bean) throws Exception { return disposeDao.insertOrReplace(bean); } /** * 编辑配置【包含设备信息】 * * @param note * @throws Exception */ public void update(DisposeBean note) throws Exception { disposeDao.update(note); } /** * 删除配置 */ public void delete(DisposeBean note) throws Exception { disposeDao.delete(note); } //------------------关系操作---------------------------------------------- /** * 通过类别id,获取当前大配置 * * @return */ public ConfigBean getConfigInfoType(long configId) { return configDao.load(configId); } /** * 获取组 * * @param configId 配置id * @return */ public List<GroupBean> getGroupsByTypeId(long configId) { //清除缓存 daoSession.clear(); return getConfigInfoType(configId).getGroups(); } /** * 获取设备配置 * * @param configId 配置id * @return */ public List<DisposeBean> getDisposeByTypeId(long configId) throws Exception { daoSession.clear(); return getConfigInfoType(configId).getDisposes(); } /** * 获取组类别信息 */ public GroupBean getGroupInfoType(long groupId) { return groupDao.load(groupId); } /** * 获取设备配置 * * @param groupid 组id * @return */ public List<DisposeBean> getdisposeByTypeId(long groupid) { GroupBean bean = getGroupInfoType(groupid); /*清除缓存,重新进行查询*/ daoSession.clear(); return bean.getDisposes(); } /** * 获取配置类别信息 */ public DisposeBean getdisposeInfoType(long disposeId) { return disposeDao.load(disposeId); } /** * 查询设备【通过配置】 * * @param disposeId 配置id * @return */ public DeviceBean getDeviceById(long disposeId) { return disposeDao.load(disposeId).getDeviceBean(); } /** * 根据类别id获取设备 * * @param deviceId * @return */ public DeviceBean getdeviceInfoType(long deviceId) { return deviceDao.load(deviceId); }//---------------------设备增加------------------------- /** * 增加设备 * * @param bean * @return * @throws Exception */ public long add(DeviceBean bean) throws Exception { return deviceDao.insertOrReplace(bean); } /** * 通过地址查询设备 * * @param mac * @return * @throws Exception */ public DeviceBean getDevice(String mac) throws Exception { DeviceBean bean = deviceDao.queryBuilder().where(DeviceBeanDao.Properties.Address.eq(mac)).build().unique(); return bean; }
- [x] 从大配置中查询组做一下示例,代码是这样的
/** * 获取组 * * @param configId 配置id * @return */ public List<GroupBean> getGroupsByTypeId(long configId) { //清除缓存 daoSession.clear(); return getConfigInfoType(configId).getGroups(); }
- 发现可以直接通过ConfigBean对象进行获取,没有必要专门写一个查询语句去数据库表里查询,直接通过get方法就能够拿到,当然首先需要获取配置,不然会直接报这个异常,如下:
throw new DaoException("Entity is detached from DAO context");
/** * 通过类别id,获取当前大配置 * * @return */ public ConfigBean getConfigInfoType(long configId) { return configDao.load(configId); }
0 0
- greenDAO 使用初体验
- GreenDao初体验
- android个人笔记之greendao初体验
- GreenDao初体验——GreenDao与Android最新版本兼容性问题
- greenDao
- greenDAO
- greenDAO
- greenDAO
- GreenDao
- GreenDAO
- Greendao
- greenDAO
- GreenDao
- GreenDao
- GreenDao
- GreenDAO
- GreenDAO
- GreenDao
- 使用c3p0连接数据库的几种方式
- shell脚本for循环知识
- Android 5.X与Android4.X版本机器人动画的区别以及制作动画的方法
- Leetcode: 1. Two Sum [python]
- 初识Spring Boot
- GreenDao初体验
- servlet+ajax智能搜索框智能提示
- IOS使用UICollectionView完成列表功能
- 计蒜客 字符串长度
- Java正步走——学习Java之前的思考
- 行为型模式总结
- java基础总结12-面向对象8(Object类)
- 关于代码中中文字符的错误或者乱码的解决办法
- 组件方式开发 Web App全站-5-开发H5对象