XUtils db学习笔记(xutils 3.5.0)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jielundewode/article/details/72675599

目前只使用了db模块,将其他模块剔除,减小包的体积!已经修改好的包上传。下载地址,笔记基于该修改包!

1.定义vo

定义简单的一对多关系,Parent和Child。

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;

import java.util.Date;

@Table(name = "parent", onCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)")
public class Parent {

    @Column(name = "id", isId = true,autoGen = false)
    private int id;

    @Column(name = "name")
    public String name;

    @Column(name = "email")
    private String email;

    @Column(name = "isAdmin")
    private boolean isAdmin;

    @Column(name = "time")//可以直接保存date类型参数
    private Date time;

    @Column(name = "date")//可以直接保存date类型参数
    private java.sql.Date date;

    //setter/getter省略

    public List<Child> getChildren(DbManager db) throws DbException {
            return db.selector(Child.class).where("parentId", "=", this.id).findAll();
        }

}
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;

@Table(name = "child")
public class Child {

    @Column(name = "id", isId = true)
    private int id;

    @Column(name = "name")
    public String name;

    @Column(name = "email")
    private String email;

    @Column(name = "parentId"/*, property = "UNIQUE"//如果是一对一加上唯一约束*/)//此处保存parentId
    public long parentId;

    // 这个属性被忽略,不存入数据库
    public String willIgnore;

    @Column(name = "text")
    private String text;

   //setter/getter省略
}

2.初始化数据库设置

2.1 设置数据库

DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
            .setDbName("test.db")
            // 不设置dbDir时, 默认存储在app的私有目录.
            .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了.
            .setDbVersion(2)
            .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();
                }
            });

2.2 初始化一个数据库实例

DbManager db = DbManagerImpl.getInstance(daoConfig,getApplicationContext());

注意此处是我修改的去掉其他模块的写法,若使用原生的,用 x.getDb(daoConfig);
这个方法会缓存一个db实例,重复调用不会新建一个db实例。

3 保存实例

            Parent parent = new Parent();
            parent.name = "测试" + System.currentTimeMillis();
            parent.setAdmin(true);
            parent.setEmail("[email protected]");
            parent.setTime(new Date());
            parent.setDate(new java.sql.Date(new Date().getTime()));
            //db.save(parent);
            db.saveBindingId(parent);//保存对象关联数据库生成的id

也可以批量保存:

                parentList = new ArrayList<Parent>();
                for (int i = 0; i < 1000; i++) {
                    Parent parent = new Parent();
                    parent.setAdmin(true);
                    parent.setDate(new java.sql.Date(1234));
                    parent.setTime(new Date());
                    parent.setEmail(i + "[email protected]");
                    parentList.add(parent);
                }

                try {
                    db.save(parentList);
                } catch (DbException ex) {
                    ex.printStackTrace();
                }

注意不会级联保存,需要手动操作!

4 查改删

4.1 查询数据

查询所有数据:

List<Child> children = db.selector(Child.class).findAll();

按条件查找:

List<Parent> list = db.selector(Parent.class)
                    .where("id", "<", 54)
                    .and("time", ">", calendar.getTime())
                    .orderBy("id")
                    .limit(10)
                    .offset(10 * currPage)
                    .findAll();

4.2 更改数据

parent.name = "hahaha123";
parent.setEmail("[email protected]");
db.update(parent);
db.update(parent, "name", "email");
db.update(Parent.class,WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true),
        new KeyValue("name", "test_name"), new KeyValue("isAdmin", false));

delete类似,有4个方法重载,可以根据id删除或对象、条件删除,不在赘述!

猜你喜欢

转载自blog.csdn.net/jielundewode/article/details/72675599
今日推荐