http://www.mamicode.com/info-detail-1051862.html
ORM(Object-Relational Mapping)即對象關係映射模式,是Java開發中常用的技術。它的作用是在關係型數據庫和業務實體對象之間作一個映射,這樣,我們在具體的操作業務對象的時候,就不需要再去和複雜的SQL語句打交道,只需簡單的操作對象的屬性和方法。因爲Android開發也是用Java語言,所以Android平臺上涌現了一些Android的ORM框架,SugarORM優點:
不用寫複雜的sql語句,而用簡單的API即可完成創建和操縱數據可以在原有的Bean上僅僅添加小的修改而複用Bean
簡化而明瞭的數據庫設計和創建過程,同時提供表的一對多的支持
在AndroidManifest.xml中的Application元素中(與Activity標籤同級別)添加下列meta-data:
<applicationandroid:label="@string/app_name"android:icon="@drawable/icon"
android:name="com.orm.SugarApp">
創建的數據庫db的文件名,將在/data/data/應用包名/databases下創建對應的文件
<meta-dataandroid:name="DATABASE"android:value="sugar_example.db"/>
<meta-dataandroid:name="VERSION"android:value="2"/>數據庫版本號
<meta-dataandroid:name="QUERY_LOG"android:value="true"/>是否允許SugarORM記錄log
<meta-dataandroid:name="DOMAIN_PACKAGE_NAME"android:value="com.example.bean"/>
創建數據庫表對應的Bean所在的包的路徑,SugarORM是通過一個Bean文件來創建一個表的,比如你想在sugar_example.db中創建一個叫做Goods的表,
那麼你需要在上面你規定的com.example.bean中創建一個Goods.java的Bean文件,然後你編譯運行的時候,會自動在db中創建了這個空表
</application>
public class Goods extends SugarRecord implements Serializable {
/**
* 貨品編號
*/
@Column(name = "sku_ID", unique = true)
@Expose
private String skuId;
/**
* 商品編號
*/
@Expose
private String spuId;
/**
* 規格
*/
@Expose
@Ignore
private String specValue;
/**
* 貨品名稱
*/
@Expose
private String name;
/**
* 貨號
*/
@Expose
private String bn;
/**
* 成本價,進價
*/
@Expose
private BigDecimal cost;
/**
* 售價
*/
@Expose
private BigDecimal price;
public String getSkuId() {
return skuId;
}
public void setSkuId(String skuId) {
this.skuId = skuId;
}
public String getSpuId() {
return spuId;
}
public void setSpuId(String spuId) {
this.spuId = spuId;
}
public String getSpecValue() {
return specValue;
}
public void setSpecValue(String specValue) {
this.specValue = specValue;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBn() {
return bn;
}
public void setBn(String bn) {
this.bn = bn;
}
public BigDecimal getCost() {
return cost;
}
public void setCost(BigDecimal cost) {
this.cost = cost;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}
Sugar會自動的在db中創建Trade這個表,表中的字段和Trade.java中的屬性名對應,SugarORM通過save(),delete(),T.findbyid(),T.listAll()等API來簡化數據庫的增刪改查操作:
增加一條數據:
Goods good = new Goods();
good.setName("Coffee");
good.setCost(new BigDecimal(30));
good.setBn("123456");
good.save();
查詢一條數據:
Goods loadGood =Goods.findById(Goods.class,1);
查詢所有的表中的條目:
List<Goods> goods =Goods.listAll(Goods.class);
更新一條數據:
Goods good2 = Goods.findById(Goods.class, 1);
good2.setName("Rice");
good2.save();
刪除一條數據:
Goods good2 = Goods.findById(Goods.class, 1);
good2.delete();
刪除表中所有的條目:
Goods.deleteAll(Goods.class);
SugarORM的條件查詢操作
可以直接通過提供的find和findWithQuery進行查詢:
Goods.find(Goods.class, "name = ? and skuId = ?", "Coffee", "123");
如果你有其他的比如groupby、orderby、limit等操作,具體的find的接口格式爲:
find(Class<T> type, String whereClause, String[] whereArgs, String groupBy, String orderBy, String limit)
通過findWithQuery接口查詢:
List<Note> notes = Note.findWithQuery(Note.class, "Select * from Note where name = ?", "satya");
SugarORM同時提供了條件查詢的API,叫做Query Builder,目前還處於Beta版本:
Select.from(TestRecord.class)
.where(Condition.prop("test").eq("satya"),
Condition.prop("prop").eq(2)).list();
SugarORM的一對多使用
通常開發中,一個表中的某個字段對應了另一個表,這個在java類中體現的就是一對多的關聯的關係,這裏SugarORM也是支持的。比如Goods表中有一個Operator的字段,它說明了負責這個商品的人
public class Operator extends SugarRecord implements Serializable {
String userName;
String gender;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
在Goods.java中可以加上這個Operator的屬性,那麼Goods表即也會加上這樣的字段:
public class Goods extends SugarRecord implements Serializable {
private Operator operator;
public Operator getOperator() {
return operator;
}
public void setOperator(Operator operator) {
this.operator = operator;
}
}
下面是查詢的方式:
List<Goods> goods = Goods.find(Goods.class, "operator = ?", new String{operator.getName()});
或者
Goods good = Goods.findById(Goods.class, 1);
Operator o = good.getOperator();