3.7 Modeling JDBC Operations as Java Objects
org.springframework.jdbc.object包含了大量让你以面向对象访问数据的类。
3.7.1 理解SqlQuery
SqlQuery是可重用,线程安全的的类去执行 SQL 查询,子类必须实现newRowMapper(…)方法,去提供一个RowMapper的实类。RowMapper可以从ResultSet去创建一个包含每行结果的对象。SqlQuery很少被直接用,因为子类MappingSqlQuery提供了更多更便利的实现。其他实现有
MappingSqlQueryWithParameters and UpdatableSqlQuery
3.7.2 使用MappingSqlQuery
实现方法
可以只使用pid进行查询
当面临多个参数和多个返回结构时,可以直接用execute方法
3.7.3. Using SqlUpdate
继承并使用update
3.7.4. Using StoredProcedure
3.8 常见问题
3.8.1 提供SQL参数的类型信息
通常Spring会检测SQL参数的类型,这就可以明确的去提供SQL类型,所以也很有必要让NULL值正确。
你可以以如下的几种方式指明SQL参数类型。
- JdbcTemplate的很多update和查询接口会附带一个额外的int数组。这个数组被用来指明参数类型。数组里全是java.sql.Tpyes里的常量
- 你可以使用SqlParamterValue类去包装类型信息。这么做的话,每一个参数都需要是一个SQL Type示例。你也可以提供一个可选的参数。
- 对于使用命名参数方法,你可以使用
SqlParameterSource。BeanPropertySqlParameterSource和MapSqlParameterSource。即提供一个source文件
3.8.2 处理BLOB和CLOB对象。
你可以存图像,或者其他二进制对象,这些对象被称作BLOBs(Binary Large OBject)和CLOBs(Character Large OBject)。Spring中你可以直接处理这些对象通过使用JdbcTemplate。也可以用SimpleJdbc。所有的这些方法都是用LobHandler的接口–用来管理真实的LOB对象。LobHandler提供对LobCreator类的访问方式,通过getLobCreator方法,是为了插入一个新的LOB对象。LobHandler和LobCreator提供以下几种对LOB 输入和输出 的方式。
- BLOB
- :byte[]: getBlobAsBytes and setBlobAsBytes
- : InputStream: getBlobAsBinaryStream and setBlobAsBinaryStream
- CLOB
- String: getClobAsString and setClobAsString
- InputStream: getClobAsAsciiStream and setClobAsAsciiStream
- Reader: getClobAsCharact
下面会示范如何创建和插入BLOB
3.8.3 对于in (X,X,X)模式的插入
select * from T_ACTOR where id in (1, 2, 3)
SQL是允许用in表达式的,参数列表
JDBC的prepared statements不能直接支持。
NamedParameterJdbcTemplate 和JdbcTemplate支持,通过java.util.List去传递。
3.8.4 处理复杂的类型和存储调用
使用SqlReturnType去做转化
一个普通的java类
3.9 内嵌数据库的使用
支持HSQL, H2, and Derby
3.9.1 为什么要有内嵌数据库
轻量与快
3.9.2 使用xml去创建内嵌数据库
3.9.3 使用code去创建内嵌数据库
也可以使用builder去创建一个bean
3.9.4 不同内嵌数据库的具体支持
https://docs.spring.io/spring/docs/5.2.x/spring-framework-reference/data-access.html#jdbc-parameter-handling