This article is generated by AI translation.
Argument Options
Argument options fall into three categories:
- General Options: common option effects and usage.
- Stored Procedure Options: options related to stored procedures.
- Cursor Options: extensions for cursor arguments and how to use them.
General Options
javaType, typeHandler, and jdbcType are the most common options and cover most needs.
| Name | Type | Description |
|---|---|---|
| javaType | Class | 可选 Java type of the argument. |
| jdbcType | Integer | 可选 JDBC type of the argument; can be a java.sql.JDBCType enum name or numeric code. |
| typeHandler | TypeHandler | 可选 Type handler to use, overriding the default TypeHandler choice. |
select * from users where name = #{name,javaType=java.lang.Integer}
javaTypecan be any Java type supported by the TypeHandlerRegistry.
select * from users where name = #{name,jdbcType=varchar}
jdbcTypecan be any JDBC type supported by the TypeHandlerRegistry.
javaType and jdbcType can be combined to determine a specific TypeHandler.
select * from users where name =
#{name,typeHandler=net.hasor.dbvisitor.types.handler.string.StringTypeHandler}
typeHandler explicitly selects the TypeHandler. dbVisitor ships with many built-in TypeHandler.
select *
from users
where name = #{name,
javaType= net.demos.UserDTO,
typeHandler=net.hasor.dbvisitor.types.handler.json.JsonUseForFastjson2TypeHandler}
- By setting
javaTypeandtypeHandler, JSON fields can be auto-serialized/deserialized.
Stored Procedure Options
Use the mode option to adapt different stored-procedure argument types.
- When
modeisIN, it passes a value to the procedure (same usage as general options). - When
modeisOUTorINOUT, you can additionally use the options below.
| Name | Type | Description |
|---|---|---|
| mode | SqlMode | 可选 Direction of the argument; defaults to IN. Needed for stored-procedure OUT arguments. |
| jdbcType | Integer | 可选 JDBC type; can be a java.sql.JDBCType enum name or numeric code. |
| name | String | 可选 Name of the OUT argument in the result set. When mode is INOUT, can differentiate in/out names. |
| typeName | String | 可选 Type name for the OUT argument; see CallableStatement.registerOutParameter. |
| scale | Integer | 可选 Scale for the OUT argument; see CallableStatement.registerOutParameter. |
{call test_procedure(#{arg, mode=in})} -- shorthand: {call test_procedure(#{arg})}
{call test_procedure(#{arg, mode=out, jdbcType=varchar})}
{call test_procedure(#{arg, mode=inout, jdbcType=varchar})}
{call test_procedure(#{arg, mode=out, jdbcType=varchar, typeName=varchar2})}
{call test_procedure(#{arg, mode=out, jdbcType=varchar, scale=3})}
When both typeName and scale are present, typeName takes precedence. Priority of common OUT option combos:
jdbcType+typeName(highest)jdbcType+scalejdbcTypealone (lowest)- See
CallableStatement.registerOutParameterfor details.
{call test_procedure(#{arg,
mode=out,
jdbcType=varchar,
typeHandler=net.hasor.dataql.sqlproc.types.handler.StringAsMonthDayTypeHandler})
}
{call test_procedure(#{arg, name=outArg, mode=out, jdbcType=varchar})}
Cursor Options
Cursor arguments are usually result sets exposed via stored-procedure OUT arguments. You can handle cursor data with rowMapper, rowHandler, or extractor.
| Name | Type | Description |
|---|---|---|
| mode | SqlMode | 必选 Must be set to CURSOR when using cursor arguments. |
| name | String | 可选 Name of the cursor argument in the result set. |
| javaType | Class | 可 选 Map the cursor result set to a Java type; see Object Mapping. |
| rowMapper | RowMapper | 可选 Same as above; see RowMapper. |
| rowHandler | RowCallbackHandler | 可选 Same as above; see RowCallbackHandler. |
| extractor | ResultSetExtractor | 可选 Same as above; see ResultSetExtractor. |
create or replace procedure proc_out_cursor(
userName in varchar2,
tableCursor out sys_refcursor)
as
begin
open tableCursor for select * from my_users where c_name = userName;
end;
{call proc_out_cursor(#{name},#{res,
mode=cursor,
javaType=net.demos.dto.UserDTO})}
{call proc_out_cursor(#{name},#{res,
mode=cursor,
rowMapper=net.demos.mapper.UserRowMapper})}
{call proc_out_cursor(#{name},#{res,
mode=cursor,
rowHandler=net.demos.handler.UserRowHandler})}
Because of RowCallbackHandler characteristics, processing cursor data with it does not produce a result set. See RowCallbackHandler.
When javaType, rowMapper, rowHandler, and extractor appear together (or partially), only one takes effect.
- Priority: javaType > rowMapper > rowHandler > extractor.