轻量级 SQLite 数据库操作框架:实体映射、CRUD、分页、聚合、事务一站式搞定
无需复杂配置,通过 SQLiteDbHelper + SQLiteDatabase 即可快速落地。
@Table / @Column / @Id / @Ignore 覆盖常见映射场景。
支持保存、更新、删除、聚合、分页、原生 SQL 等。
该框架发布在私有 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 时使用。
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");
}
}
});