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