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






















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值