【Spring JDBC】PreparedStatementCreatorFactory使用流程
Spring JDBC
类名 | 作用 |
---|---|
PreparedStatementCreator | 表示一个准备好的 SQL 语句,它知道怎么设置参数 |
PreparedStatementCreatorFactory | 用来生成 PreparedStatementCreator 的工厂 |
-
PreparedStatementCreatorFactory
的好处- 形成模版,每次插入只用填充数据就行,有可复用性
-
使用流程
-
构造方法PreparedStatementCreatorFactory(String sql, int… types)
- 其中sql是带有问号占位符的数据库语句
types
是每个?
的 JDBC 类型,如Types.VARCHAR
、Types.TIMESTAMP
,用来告诉数据库如何处理这些参数。
-
如果你想获取插入后自动生成的主键
-
pscf.setReturnGeneratedKeys(true); // 让它返回主键 pscf.setGeneratedKeysColumnNames("id"); // 指定主键列名(可选)
-
-
使用工厂创建 PreparedStatementCreator
-
PreparedStatementCreator psc = pscf.newPreparedStatementCreator(Arrays.asList(order.getDeliveryName(),order.getDeliveryStreet(),...Timestamp.valueOf(order.getPlacedAt()) ));
-
//上面的创建一个准备执行 SQL 的对象,实际操作 preparedStatement.setString(1, order.getDeliveryName());//数字1表示给第一个问号传递值 preparedStatement.setString(2, order.getDeliveryStreet());//数字2表示给第二个问号传递值 ...
-
-
执行并获取主键(可选)
-
KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update(psc, keyHolder);//这句才是执行插入操作,之前的都是准备阶段,keyHolder的传入是为了获取现在主键到哪了//让 JdbcTemplate 在 执行完插入语句后,自动把主键的值“放到这个 keyHolder 里”, //我们后面再从 keyHolder 里取出这个值(用 getKey())。// 获取主键值 long orderId = keyHolder.getKey().longValue();
-
-
-
为什么要写明参数类型
- 防止SQL注入时,类型转换发生错误