01 / 05
先把连接交给 Action
Action 是 SqlMan 的入口。对初学者而言,显式传入 Connection 最清晰:连接的获取与关闭仍由你的应用负责。
第一个查询可运行结构
try (Connection conn = dataSource.getConnection()) {
String sql = "SELECT id, name FROM shop_address WHERE stat = ?";
List<Map<String, Object>> rows =
new Action(conn, sql).query(1).list();
}
不要把
Connection 藏在全局变量里。SqlMan 也支持线程连接,但在第一段代码里显式传入连接更容易理解和管理。02 / 05
让 ? 绑定数据,而非拼接 SQL
把值交给 query(...)。SqlMan 会按顺序把它们交给 JDBC 的 PreparedStatement。
动手绑定两个参数点击“执行”查看映射
SQL:id = ? AND stat = ?
new Action(conn, "SELECT * FROM shop_address WHERE id = ? AND stat = ?")
.query(7, 1).one();
.query(7, 1).one();
安全规则:值用
?;表名、列名、排序方向等 SQL 结构无法作为 JDBC 参数绑定,必须由应用代码控制,不能直接信任请求输入。03 / 05
选择你要的结果形状
同一条查询,可按“单个值 / 一行 Map / 一个 Bean / 多行列表”读取。选择最符合调用方需求的 API。
小测验选择正确的结果 API
| 目标 | 调用 |
|---|---|
| 一个标量 | oneValue(Long.class) |
| 一行 Map | one() |
| 一个 JavaBean | one(Address.class) |
| 多行 | list() 或 list(Address.class) |
04 / 05
写入:create、update 与 delete
在同一个 Action 上选择操作类型。写入结果会告诉你是否成功以及影响行数;插入时还能读取数据库生成的主键。
组装一条插入调用按正确顺序点击
// 点击上方 ① → ② → ③
execute(true, Long.class) 表示由数据库生成主键,并要求把返回值转换为 Long。更新后可通过 UpdateResult#getEffectedRows() 取得影响行数。05 / 05
实体模式:从 Map 或 Bean 生成写入 SQL
当字段较多时,可以把 Map 或 JavaBean 与表名交给 Action。SqlMan 会生成 INSERT/UPDATE 所需 SQL 和参数;Bean 可借助 @Table、@Id、@Column 提供映射信息。
识别操作意图来自项目 H2 单测的调用方式
Map<String, Object> address = Map.of(
"name", "Alice", "phone", "110");
new Action(conn, address, "shop_address")
.create().execute(true, Integer.class);