步骤:
1. 创建数据表
2. DaoConfig 获取数据库的配置信息
3. 获取数据库实例: x.getDb(daoConfig);
4. 数据库的增删改查
在这里要强调的是,数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作。
@Table(name = "person")
public class person {
@Column(name = "id", isId = true, autoGen = true)
public int id;
@Column(name = "name")
public String name;// 姓名
@Column(name = "age")
public int age;// 年龄
@Column(name = "sex")
public String sex;// 性别
@Column(name = "salary")
public String salary;// 工资
@Override
public String toString() {
return "person [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + ", salary=" + salary + "]";
}
}
上表中包含了db相关Annotation:
@Check check约束
@Column 列名
@Finder 一对多、多对一、多对多关系(见sample的Parent、Child中的使用)
@Foreign 外键
@Id 主键,当为int类型时,默认自增。 非自增时,需要设置id的值
@NoAutoIncrement 不自增
@NotNull 不为空
@Table 表名
@Transient 不写入数据库表结构
@Unique 唯一约束
这个配置最好写在工具类中,方便调用:
private static DaoConfig daoConfig;
public static DaoConfig getDaoConfig(){
if(daoConfig==null){
daoConfig = new DbManager.DaoConfig()
.setAllowTransaction(true)//设置允许开启事务
.setDbName("test.db")//创建数据库的名称
// 不设置dbDir时, 默认存储在app的私有目录.
.setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了.
.setDbVersion(1)//数据库版本号
.setDbOpenListener(new DbManager.DbOpenListener() {
@Override
public void onDbOpened(DbManager db) {
// 开启WAL, 对写入加速提升巨大
db.getDatabase().enableWriteAheadLogging();
}
})
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
// TODO: ...
//db.addColumn(...);
// db.dropTable(...);
// ...
// or
// db.dropDb();
}
});
}
return daoConfig;
}
DaoConfig daoConfig = xUtils.getDaoConfig();
db = x.getDb(daoConfig);
通过DbManager这个类我们知道主要它做了以下几件事情:
try {
List<person> list = new ArrayList<person>();
for (int i = 0; i < 1; i++) {
person person = new person();
person.name = "wingli"+i;
person.age = 18;
person.salary = "1000元";
person.sex = "男";
list.add(person);
}
db.save(list);//保存实体类或实体类的List到数据库
// db.saveOrUpdate(list);//保存或更新实体类或实体类的List到数据库, 根据id对应的数据是否存在
// db.saveBindingId(list);保存实体类或实体类的List到数据库,如果该类型的id是自动生成的, 则保存完后会给id赋值
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//1
db.findById(person.class, 1);//通过主键的值来进行查找表里面的数据
//2
db.findFirst(person.class);//返回当前表里面的第一条数据
//3
List<person> findAll = db.findAll(person.class);//返回当前表里面的所有数据
//4
// db.findDbModelAll(new SqlInfo("select * from person where age > 25"));
DbModel model = db.findDbModelFirst(new SqlInfo("select * from person where age > 25"));
model.getString("age");//model相当于游标
//5
List<person> findAll2 = db.selector(person.class).expr("age >10").findAll();//主要是用来进行一些特定条件的查找
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//1
db.delete(person.class);//该方法是删除表中的全部数据
//2
db.deleteById(person.class, 12);//该方法主要是根据表的主键(id)进行单条记录的删除
//3
db.delete(person.class, WhereBuilder.b("age", ">","20"));//根据where语句的条件进行删除操作
//4
List<person> findAll = db.selector(person.class).expr("age > 20").findAll();
db.delete(findAll);//根据实体bean进行对表里面的一条或多条数据进行删除
} catch (DbException e) {
e.printStackTrace();
}
try {
List<Person> findAll = db.findAll(Person.class);
for (Person person : findAll) {
person.age = 1;
person.salary = "qqqqq";
}
db.update(findAll, "age");//可以使对象、集合
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
通常用在数据库升级
db.addColumn(Person.class, "count");