android中的xUtils中的数据库知识总结
来源:互联网 发布:软件ui界面设计素材 编辑:程序博客网 时间:2024/04/29 17:55
在项目中使用xutils创建数据库,经常遇到一些外键,内绑定查询等需求,也走过不少的弯路,今天在此总结一下!
1:使用外键@Foreign
1.1:一对多的外键方式:
在此使用用户实体User,地址Address实体,一般一个用户可能有多个地址,所以为一对多的对应关系,正常而言查找用户的同时,经常自动匹配的查询地址实体集合,那么以userId作为外键的标志,在Address实体中进行定义,同时在User实体中定义地址的集合List<Address>属性,用@Foreign进行标识!
Address实体
public class Address { @Id(column = "id") int id; @Column(column = "addressDetail") String addressDetail; @Column(column = "city") String city; @Column(column = "district") String district; String userId;//用户的id 作为关联User实体 }
User实体:
public class User { @Id(column = "id") int id; @Unique @Column(column = "userId") String userId; @Column(column = "userName") String userName; @Column(column = "password") String password; @Foreign(foreign = "userId", column = "userId") //foreign:Address实体中的userId; List<Address> addressList; //column:指的是本表中列名为userId,就是对应的实体中的userid属性!}
业务代码部分:
User user=new User(); //user.setId(102);//如果保存时用saveOrUpdate方法,那么此时id不用添加,xutils会默认分配 //否则会保存不上,除非使用save方法 user.setPassword("123"); user.setUserId("33333"); user.setUserName("zhangyang"); //循环产生用户" List<Address> addressList=new ArrayList<Address>(); for(int i=0;i<10;++i){ Address address=new Address(); address.setAddressDetail("新盛街道果园村马一组..."+i); address.setCity("扬州市"+i); address.setDistrict("邗江区"+i);// address.setId(124+i);//如果保存时用saveOrUpdate,那么此时id不用添加,xutils会默认分配 //否则会保存不上,除非shi使用save方法 address.setUserId(user.getUserId());// address.setUser(user); AddressDao.saveDaveAddrsss(address); addressList.add(address); } user.setAddressList(addressList); UserDao.saveUser(user); addressList=AddressDao.getAddressList(); Toast.makeText(context,"addressList size:"+addressList.size(), Toast.LENGTH_SHORT).show(); //进行打印信息 List<User> userList=UserDao.getUserList(); for(User user1:userList){ Toast.makeText(context,"userList size:"+userList.size(), Toast.LENGTH_SHORT).show(); if(user1.getAddressList()!=null){ Toast.makeText(context,"user addressList size:"+user1.getAddressList().size(),Toast.LENGTH_SHORT).show(); } }
注意点:
tip1: 不建议在Address实体中定义User实体代替String类型的userId,如果定义,在实际运行中不行!页面运行失败!所以用 字符串类型的userId那么就足够了!
tip2:在User实体中定义的List<Address>属性,用外键@Foreign注解就能够自动地查找与用户匹配的地址集合,此时addressList该实体属性并不以字段的形式存储到表中!
1.2:一对一的外键方式:
比如用户对应的身份证是唯一的,那么用户与身份证实体对应的关系是一对一的:在User实体中的增加一个identity实体的属性,以@Foreign进行修饰,其中的foreign=“identityId”属性标识Identity实体中的identityId属性,其中的column=“identityId”为标识User实体中的表中的列名为identityId属性!
User实体
public class User { @Id(column = "id") int id; @Unique @Column(column = "userId") String userId; @Column(column = "userName") String userName; @Column(column = "password") String password; @Foreign(foreign = "userId", column = "userId") List<Address> addressList; @Foreign(foreign = "identityId", column = "identityId") @Column(column = "identityId") Identity identity;//身份证实体}
Identity实体:
public class Identity { @Id int id;//表中的主键 int identityId;//身份证号码}
在测试中:@Foreigner注解修饰的外键存在多种情况:
1:在User实体中本身就有userId实体的属性,同时在@Foreigner(column="userId",foreigner="userId"),在User表中只有一个用户的"userId"列名,不会重新创建新的列名!
2:在User实体中没有identityId属性,同时在@Foreigner(column="identityId",foreigner="identityId"),在User表结构中有一身份标识"identityId"列表名,那么xUtils中会为我们自动的创建列表名"identityId",如果同时在User实体中的identity属性中增加列名的注解,那么xUtils也不会创建两个identityId的列表名!
1.3@finder的使用:
@finder标识在本表中有条件的查询,其中有targetColumn和valueColumn两个属性:其中"valueColumn"属性标识当前实体的列名,而"targetColumn"属性标识其从其他实体中查找的目标属性!
Node实体:
public class Node { String nodeName;//节点的名称 @Unique String nodeId;//节点的id String deptId;//前置部门的id boolean isDeptFlag;//是否是部门的提示 String localNodeId;//本地标识的id String localDeptId;//本地前置部门的标识 int sortNo;//排序的字段 @Finder(targetColumn = "localNodeId",valueColumn = "localDeptId") Node parent;//finder的作用是:查找父节点!}
1 0
- android中的xUtils中的数据库知识总结
- xUtils 知识总结
- android xUtils框架中的BitmapUtils 全面注释
- android中xutils中的httputils不起作用
- smarty中的知识总结
- ios中的知识总结
- 牛腩新闻发布系统中的数据库知识总结
- Mysql数据库中的输入命令各类知识总结
- XUtils中的dbUtils用法
- Android中的蓝牙知识
- android中的知识整理
- android中的小知识
- XUtils数据库模块在多线程中的打开与关闭问题
- 数据存储(二): xUtils在数据库中的应用
- Android SQLite数据库中的日期函数总结
- 关于数据库中的一些知识
- 浅谈数据库中的知识发现
- Android 日常碎片知识总结之布局中的小技巧
- 美丽的电影
- 事件委托例子1
- 详细分析Java中断机制
- MongoDB 数据自动同步到 ElasticSearch
- mybatis中的事务处理(commit)
- android中的xUtils中的数据库知识总结
- 百度网盘极速秒传是什么原理,怎么几个G的刷下就好了?原来是假的,并不是真的将本地文件上传上去了。
- 1. 解决问题的能力
- 41. First Missing Positive
- 为Debug和Release分别设置Web.config
- 使用java实现杨辉三角的输出
- 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
- 配置中心工程(一)
- sku 多维属性状态判断算法