快速开始

简单示例

假设有一张 User 表,以及其对应的实体类 User

首先要配置数据库

AccessorFactoryBuilder builder = new AccessorFactoryBuilder();
DatabaseConfig config = new DatabaseConfig(url, user, pass).setMaxWait(3000).setTag(AccessorFactory.DEFAULT_TAG);
builder.addDatabse(config);
builder.build();
@Table("user")
public class User {
    @Id
    private long id;
    @Column("userName")
    private String userName;
    @Column
    private String password;
    @Column
    private int age;

    // setter and getter

}

手写 SQL,手动填充参数(灵活,编写复杂 SQL)

// 插入
String sql = "INSERT INTO user VALUES (?, ?, ?, ?)";
Object[] params = {KeyGenerateUtil.generateId(), "张三", "123456", 20};
// 更少的代码可以使用 A.update(sql, params);
int row = AccessorFactory.accessor().update(sql, params);

// 删除
String sql = "DELETE FROM user WHERE id = ?";
row = A.update(sql, id);

// 更新
String sql = "UPDATE user SET userName = ? WHERE id = ?";
Object[] params = {id};
row = A.createUpdate(sql)
  .bind(userName)
  .bindArray(params)
  .execute();

// 查询单条记录
String sql = "SELECT * FROM user WHERE id = ?";
Object[] params = {id};
// 该方法中的第三个参数,不一定是使用 @Table 注解的类,可以是任意 Java Bean
User user = A.query(sql, params).one(User.class);
// 你也可以将查询的结果封装到一个 Map 中
// ResultMap map = A.query(sql, params).oneMap();

// 查询多条记录
String sql = "SELECT * FROM user";
List<User> users = A.query(sql).list(User.class);

注解

// 也可以是抽象类
@Mapper
public interface UserMapper {

    @Update("INSERT INTO user VALUES (${user.id}, ${user.userName}, ${user.password}, ${user.age})")
    public void insert(@Bind("user") User user);

    @Select("SELECT * FROM user WHERE id = ${id}")
    public User select(@Bind("id") long userId);

}

// 使用
UserMapper mapper = A.getMapper(UserMapper.class);
mapper.insert(user);
mapper.select(id);

单表简单执行 (简便,单表操作)

// 插入
User user = new User();
user.setId(KeyGenerateUtil.generateId());
user.setUserName("张三");
user.setPassword("123");
user.setAge(20);
// 直接提供已经赋值的实体类,要求实体类使用 @Table 注解
SqlBox.insert(user);
SqlBox.insert("user")
    .column("id", id)
    .column("userName", userName)
    .column(age, age).execute();

// 更新
SqlBox.update("user")
    .set("userName", userName)
    .where().eq("id", id).execute();

// 删除
SqlBox.deleteById(User.class, "123");
SqlBox.delete("user")
    .where().eq("id", "123").execute();

// 查询
SqlBox.select(User.class)
    .where().eq("id", id)
    .query(User.class);
Sqlbox.select("userName", "age")
  .from("user")
  .where().eq("id", id)
  .query(User.class);

分页查询

Pager<User> users = A.page(sql, params, page, limit, User.class);
// 你也可以不提供 limit 参数,使用默认的 limit (10),也可以在 GlobalConfig 中或配置文件进行配置
Pager<User> users = A.page(sql, params, page,  User.class);

// Pager 中的参数说明
//     total 总记录数量
//     page 当前页码
//     limit 每页记录数
//     pages 总页数

注:QueryFlow 的所有有关数据库的操作,都不会主动关闭数据库连接,需要在手动关闭数据库连接。也可以在全局配置中配置没执行一个操作立即关闭数据库连接 GlobalConfig.closeAfterExecuted(true)

批量操作

BatchStatement batch = A.createBatch()
int[] rows = batch.add(sql)// 添加要执行的SQL
  .add(sql)
  .execute();
// 批量执行需要预编译的 SQL
PreparedBatchStatement pbs = A.prepareBatch("sql");
// 添加参数,最后使用 add 方法,将参数集合添加到 PreparedStatement
pbs.bind("a").bind("b").add();
// 为了方便操作,也可以使用下面的方法直接添加参数
pbs.add(Object... params);
// 或者
pbs.add(List<Object> params);

存储过程调用

// 只有输入参数
A.call("call test(?,?)", "A", "B");
// 或者
List<Object> params = new ArrayList<>();
params.add("A");
params.add("B");
A.call("call test(?,?)", params);

// 包含输出参数
OutParameters outParameters = A.createCall()
  .bind("A")// 输入参数
  .registerOutParameter("sum", DataType.INTEGER)// 注册输出参数
  execute();
// 获取注册的输出参数的值
int sum = outParameters.getInteger("sum");

results matching ""

    No results matching ""