SQLiteDBTool 使用说明

轻量级 SQLite 数据库操作框架:实体映射、CRUD、分页、聚合、事务一站式搞定

轻量 易用

开箱即用

无需复杂配置,通过 SQLiteDbHelper + SQLiteDatabase 即可快速落地。

注解 映射

实体映射

@Table / @Column / @Id / @Ignore 覆盖常见映射场景。

CRUD 分页

完整操作

支持保存、更新、删除、聚合、分页、原生 SQL 等。

Maven 引入

该框架发布在私有 Maven 仓库,已在全局 settings.xml 中配置仓库地址,项目中直接添加依赖坐标即可:

<dependencies>
    <dependency>
        <groupId>net.lgpage</groupId>
        <artifactId>sqlitedb.tool</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

快速开始

1) 定义实体

@Table("users")
public class User {
    @Id
    private Long id;

    @Column("user_name")
    private String name;

    private Integer age;
    private String email;

    @Ignore
    private String tempData;

    public User() {}
    public User(String name, Integer age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
}

2) 创建数据库帮助类

public class AppDbHelper extends SQLiteDbHelper {
    public AppDbHelper(String dbPath, int version) {
        super(dbPath, version);
    }

    @Override
    public void onCreate(Connection connection) {
        createTable(User.class);
    }
}

3) 初始化与使用

SQLiteDbHelper dbHelper = new AppDbHelper("app.sqlite", 1);
SQLiteDatabase db = new SQLiteDatabase(dbHelper);

User user = new User("张三", 25, "zhangsan@example.com");
db.save(user);

特色好用的方法

高频查询入口(最常用)

List<User> all = db.getList(User.class);
List<User> list = db.getList(User.class, "WHERE age >= ?", 25);

User byId = db.loadObj(User.class, 1L);
User one = db.getObj(User.class, "WHERE email = ?", "zhangsan@example.com");

高效分页(高频查询)

PageList<User> page1 = db.getPageList(User.class, 1, 10);
PageList<User> page2 = db.getPageList(
    User.class,
    "WHERE age > ?",
    1,
    10,
    20
);

Map 结果集(高频查询)

Map<String, Object> userMap = db.doObjQuery(
    Map.class,
    "SELECT id, user_name, age FROM users WHERE user_name = ?",
    "张三"
);

List<Map<String, Object>> maps = db.doListQuery(
    Map.class,
    "SELECT id, user_name, age FROM users WHERE age >= ?",
    20
);

getList / getObj / loadObj 为核心入口,建议优先使用这些正式方法。

带 condition 的方法不会自动拼接 WHERE,condition 需自行包含 WHERE / ORDER BY 等片段。

新增与保存(常用)

User user = new User("李四", 30, "lisi@example.com");
db.save(user);

一步保存或更新(常用)

User user = new User("李四", 30, "lisi@example.com");
db.saveOrUpdate(user);

更新与修改(常用)

User user = db.loadObj(User.class, 1L);
user.setEmail("new@example.com");
db.update(user);

删除与批量删除(常用)

db.delete(user);
db.deleteById(User.class, 1L);
db.deleteWhere(User.class, "WHERE age < ?", 18);
db.batchDelete(User.class, 1L, 2L, 3L);

灵活字段更新

db.updateField(User.class, "age", 26, "id = ?", 1L);
db.updateFields(
    User.class,
    new String[]{"age", "email"},
    new Object[]{26, "new@example.com"},
    "id = ?",
    1L
);

表管理

db.createTable(User.class);
db.dropTable(User.class);
db.truncateTable(User.class);
boolean exists = db.tableExists("users");

聚合与事务

聚合

long total = db.count(User.class);
double avgAge = db.avg(User.class, "age");
Integer maxAge = db.max(User.class, "age", Integer.class);
Integer minAge = db.min(User.class, "age", Integer.class);

事务

String result = db.executeTransaction(() -> {
    db.save(new User("事务用户", 35, "tx@example.com"));
    return "事务执行成功";
});

手动事务控制

db.beginTransaction();
try {
    db.save(new User("C", 23, "c@example.com"));
    db.commit();
} catch (Exception e) {
    db.rollback();
} finally {
    db.endTransaction();
}

原生 SQL(低优先级)

仅在框架内置方法无法覆盖特殊 SQL 时使用。

List<User> users = db.doListQuery(
    User.class,
    "SELECT * FROM users WHERE age > ?",
    20
);

int updated = db.executeUpdate(
    "UPDATE users SET age = ? WHERE id = ?",
    26, 1L
);

迁移与注意事项

SQLiteDbHelper 支持版本升级迁移:

SQLiteDbHelper helper = new AppDbHelper("app.sqlite", 2)
    .addMigration(new Migration(1, 2) {
        @Override
        public void migrate(Connection connection) throws SQLException {
            try (Statement stmt = connection.createStatement()) {
                stmt.execute("ALTER TABLE users ADD COLUMN address TEXT");
            }
        }
    });