SugarOrm使用

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();






















發佈了40 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章