-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
BasicBinder.java
131 lines (118 loc) · 3.83 KB
/
BasicBinder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.type.descriptor.sql;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.hibernate.internal.CoreLogging;
import org.hibernate.type.descriptor.JdbcTypeNameMapper;
import org.hibernate.type.descriptor.ValueBinder;
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.jboss.logging.Logger;
/**
* Convenience base implementation of {@link ValueBinder}
*
* @author Steve Ebersole
*/
public abstract class BasicBinder<J> implements ValueBinder<J> {
private static final Logger log = CoreLogging.logger( BasicBinder.class );
private static final String BIND_MSG_TEMPLATE = "binding parameter [%s] as [%s] - [%s]";
private static final String NULL_BIND_MSG_TEMPLATE = "binding parameter [%s] as [%s] - [null]";
private final JavaTypeDescriptor<J> javaDescriptor;
private final SqlTypeDescriptor sqlDescriptor;
public JavaTypeDescriptor<J> getJavaDescriptor() {
return javaDescriptor;
}
public SqlTypeDescriptor getSqlDescriptor() {
return sqlDescriptor;
}
public BasicBinder(JavaTypeDescriptor<J> javaDescriptor, SqlTypeDescriptor sqlDescriptor) {
this.javaDescriptor = javaDescriptor;
this.sqlDescriptor = sqlDescriptor;
}
@Override
public final void bind(PreparedStatement st, J value, int index, WrapperOptions options) throws SQLException {
if ( value == null ) {
if ( log.isTraceEnabled() ) {
log.trace(
String.format(
NULL_BIND_MSG_TEMPLATE,
index,
JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() )
)
);
}
st.setNull( index, sqlDescriptor.getSqlType() );
}
else {
if ( log.isTraceEnabled() ) {
log.trace(
String.format(
BIND_MSG_TEMPLATE,
index,
JdbcTypeNameMapper.getTypeName( sqlDescriptor.getSqlType() ),
getJavaDescriptor().extractLoggableRepresentation( value )
)
);
}
doBind( st, value, index, options );
}
}
@Override
public final void bind(CallableStatement st, J value, String name, WrapperOptions options) throws SQLException {
if ( value == null ) {
if ( log.isTraceEnabled() ) {
log.trace(
String.format(
NULL_BIND_MSG_TEMPLATE,
name,
JdbcTypeNameMapper.getTypeName( getSqlDescriptor().getSqlType() )
)
);
}
st.setNull( name, sqlDescriptor.getSqlType() );
}
else {
if ( log.isTraceEnabled() ) {
log.trace(
String.format(
BIND_MSG_TEMPLATE,
name,
JdbcTypeNameMapper.getTypeName( sqlDescriptor.getSqlType() ),
getJavaDescriptor().extractLoggableRepresentation( value )
)
);
}
doBind( st, value, name, options );
}
}
/**
* Perform the binding. Safe to assume that value is not null.
*
* @param st The prepared statement
* @param value The value to bind (not null).
* @param index The index at which to bind
* @param options The binding options
*
* @throws SQLException Indicates a problem binding to the prepared statement.
*/
protected abstract void doBind(PreparedStatement st, J value, int index, WrapperOptions options)
throws SQLException;
/**
* Perform the binding. Safe to assume that value is not null.
*
* @param st The CallableStatement
* @param value The value to bind (not null).
* @param name The name at which to bind
* @param options The binding options
*
* @throws SQLException Indicates a problem binding to the prepared statement.
*/
protected abstract void doBind(CallableStatement st, J value, String name, WrapperOptions options)
throws SQLException;
}