xUtils DbUtils 關於實體類注解 匯總
RockyZhang 發布於 1年前,共有 0 條評論
先來官方demo
DbUtils db = DbUtils.create(this);
User user = new User(); //這里需要注意的是User對象必須有id屬性,或者有通過@ID注解的屬性
user.setEmail("wyouflf@qq.com");
user.setName("wyouflf");
db.save(user); // 使用saveBindingId保存實體時會為實體的id賦值
...
// 查找
Parent entity = db.findById(Parent.class, parent.getId());
List<Parent> list = db.findAll(Parent.class);//通過類型查找
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test"));
// IS NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));
// IS NOT NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null));
// WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffset
List<Parent> list = db.findAll(Selector.from(Parent.class)
.where("id" ,"<", 54)
.and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30))
.orderBy("id")
.limit(pageSize)
.offset(pageSize * pageIndex));
// op為"in"時,最后一個參數必須是數組或Iterable的實現類(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));
// op為"between"時,最后一個參數必須是數組或Iterable的實現類(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"}));
DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")只取出name列
List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name", "count(name)"));
...
List<DbModel> dbModels = db.findDbModelAll(sql); // 自定義sql查詢
db.execNonQuery(sql) // 執行自定義sql
...
注解總結
1 .主鍵
@Id // 如果主鍵沒有命名名為id或_id的時,需要為主鍵添加此注解 @NoAutoIncrement // int,long類型的id默認自增,不想使用自增時添加此注解 private int id;
2. 忽略字段
// Transient使這個列被忽略,不存入數據庫 @Transient public String willIgnore; /** ---------------------------------*/ public static String staticFieldWillIgnore; // 靜態字段也不會存入數據庫
3.表名
@Table(name = "parent", execAfterTableCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)") //name即表名, //execAfterTableCreated 自定義表創建之后要執行的sql。為parent表創建(name,email)索引 -->在表上創建一個唯一的索引。唯一的索引意味着兩個行不能擁有相同的索引值。
4.列名
@Column(column = "name") //為列名加上注解 可以針對命名不統一和防止混淆 public String name;
5.外鍵
延遲加載
@Finder(valueColumn = "id", targetColumn = "parentId") public FinderLazyLoader<Child> children; // 關聯對象多時建議使用這種方式,延遲加載效率較高。 @Foreign(column = "parentId", foreign = "id") public ForeignLazyLoader<Parent> parent;
非延遲加載
@Finder(valueColumn = "id",targetColumn = "parentId") public Child children; @Foreign(column = "parentId", foreign = "isVIP") public List<Parent> parent;
1對多
@Finder(valueColumn = "id", targetColumn = "parentId") private List<Child> children; @Foreign(column = "parentId", foreign = "id") public Parent parent;
代碼
Parent parent = new Parent();
parent.name = "測試" + System.currentTimeMillis();
parent.setAdmin(true);
parent.setEmail("wyouflf@gmail.com");
DbUtils db = DbUtils.create(this.getActivity());
db.configAllowTransaction(true);
db.configDebug(true);
Child child = new Child();
child.name = "child' name";
child.parent = parent;
db.saveBindingId(child);//保存對象關聯數據庫生成的id
6.其他
@NotNull //不能為空 @Check(value = "age>0") //age必須大於0 創建表時調用" @Unique //唯一 public int age;
