JdbcTemplate 来封装数据库jdbc操作细节
来源:互联网 发布:java方向算法书籍推荐 编辑:程序博客网 时间:2024/05/29 07:43
提供了JdbcTemplate 来封装数据库jdbc操作细节:
包括: 数据库连接[打开/关闭] ,异常转义 ,SQL执行 ,查询结果的转换
使用模板方式封装 jdbc数据库操作-固定流程的动作,提供丰富callback回调接口功能,方便用户自定义加工细节,更好模块化jdbc操作,简化传统的JDBC操作的复杂和繁琐过程。
1) 使用JdbcTemplate 更新(insert /update /delete)
1
int
k = jdbcTemplate.update(
"UPDATE tblname SET prop1=?,prop2=?..."
,
new
Object[]{...});
1
jdbcTemplate.update(
"INSERT INTO tblname VALUES(?,?,..)"
,
new
Object[]{...},
2
new
int
[]{Types.VARCHAR,Types.NUMERIC});
01
jdbcTemplate.update(
"INSERT INTO tblname VALUES(?,?,..)"
,
02
new
PreparedStatementSetter(){
03
public
void
setValues(PreparedStatement ps)
throws
SQLException{
04
ps.setLong(
1
, user.getId(
1
));
05
ps.setString(
2
, user.getName(
2
));
06
ps.setDate(
3
,
new
java.sql.Date(
new
Date().getTime());
07
ps.setTimestamp(
4
,
new
Timestamp(
new
Date().getTime());
08
}
09
}
10
);
2) 使用JdbcTemplate 查询 (select)
1
final
User user =
new
User();
2
jdbcTemplate.query(
"SELECT id,name,.. FROM tblname WHERE id=1"
,
3
new
RowCallbackHandler(){
4
public
void
processRow(ResultSet rs)
throws
SQLException{
5
user.setId(rs.getLong(
1
));
6
user.setName(rs.getString(
2
));
7
}
8
}
9
);
01
List uGroup = jdbcTemplate.query(
"SELECT id,name,.. FROM tblname WHERE igroup=1"
,
02
new
RowMapper(){
03
public
Object mapRow(ResultSet rs,
int
no)
throws
SQLException{
04
User user =
new
User();
05
user.setId(rs.getLong(
1
));
06
user.setName(rs.getString(
2
));
07
return
user ;
08
}
09
}
10
};
3)使用JdbcTemplate 便捷方法
1
List uNames = jdbcTemplate.queryForList(
"SELECT name FROM tblname WHERE id>?"
,
2
new
Integer []{
5
}, String.
class
);
1
List<Map> uMapList = (List<Map>) jdbcTemplate.queryForList(
"SELECT id, name FROM tblname WHERE id>?"
,
2
new
Integer []{
5
});
3
for
(Map<String,Object> uMap :uMapList){
4
Integer id = uMap.get(
"id"
);
5
String name = uMap.get(
"name"
);
6
};
1
String user = jdbcTemplate.queryForObject(
"SELECT name FROM tblname WHERE id=?"
,
2
new
Integer []{
5
}, String.
class
);
1
int
uNum = jdbcTemplate.queryForInt(
"SELECT count(*) FROM tblname WHERE id>?"
,
2
new
Integer []{
5
});
4)使用jdbc 操作类
a)扩展 MappingSqlQuery类
01
class
JdbcQueryObject
extends
MappingSqlQuery {
// extends SqlQuery
02
public
JdbcQueryObject (DataSource ds,String sql){
03
this
.setDataSource( ds );
04
this
.setSql( sql );
05
this
.declareParameter(
new
Sqlparameter(
"propName"
,
06
Types.VARCHAR);
// propName 提示作用
07
this
.compile();
08
}
09
public
Object mapRow(ResultSet rs,
int
p)
throws
SQLException{
10
// ...
11
}
12
}
13
JdbcQueryObject queryObj =
new
JdbcQueryObject( ds,
14
"SELECT .. FROM tblName WHERE param=?"
);
15
List list = queryObj.execute(
new
Object[]{...});
b)使用 SqlFunction 类 查询单条结果
1
SqlFunction queryFun =
new
SqlFunction( ds,
2
"select count(*) from tblName where ..."
,
new
int
[]{Types.CHAR,...} );
3
queryFun.compile();
4
queryFun.run(
new
Object[]{p1,p2,..});
c)使用 SqlUpdate 类 更新
1
SqlUpdate updateFunc =
new
SqlUpdate(ds ,
"INSERT tblName ..."
);
2
updateFunc.declareParameter(
new
SqlParameter(
"prop"
,Types.CHAR) );
3
updateFunc.compile();
4
updateFunc.update(
new
String[]{s1,s1});
5)支持jdbc 事务
spring的事务管理有两种方式:编程式事务、声明式事务
这里谈一下 基于数据库单一资源的编程式事务:
spring用实现TransactionDefinition接口的类定义事务的属性:传播行为;隔离级别;超时值;只读标志
默认实现为:DefaultTransactionDefinition类
01
PlatformTransactionManager tm =
02
new
DataSourceTransactionManager(
03
jdbcTemplate.getDataSource() );
04
TransactionStatus status =
null
;
05
try
{
06
//null 默认事务属性配置DefaultTransactionDefinition
07
status = tm.getTransaction(
null
);
08
for
(
final
String wd: words){
09
try
{
10
jdbcTemplate.update( insertWordSql,
11
new
PreparedStatementSetter(){
12
13
public
void
setValues(PreparedStatement pstate)
14
throws
SQLException {
15
pstate.setString(
1
, wd) ;
16
pstate.setTimestamp(
2
,
17
new
Timestamp(
new
Date().getTime() ));
18
}
19
}
20
);
21
22
}
catch
(DataAccessException e) {
23
e.printStackTrace();
24
//tm.rollback(status);
25
}
26
}
// end for
27
}
finally
{
28
tm.commit(status);
29
}
提供了JdbcTemplate 来封装数据库jdbc操作细节:
包括: 数据库连接[打开/关闭] ,异常转义 ,SQL执行 ,查询结果的转换
使用模板方式封装 jdbc数据库操作-固定流程的动作,提供丰富callback回调接口功能,方便用户自定义加工细节,更好模块化jdbc操作,简化传统的JDBC操作的复杂和繁琐过程。
1) 使用JdbcTemplate 更新(insert /update /delete)
1
int
k = jdbcTemplate.update(
"UPDATE tblname SET prop1=?,prop2=?..."
,
new
Object[]{...});
1
jdbcTemplate.update(
"INSERT INTO tblname VALUES(?,?,..)"
,
new
Object[]{...},
2
new
int
[]{Types.VARCHAR,Types.NUMERIC});
01
jdbcTemplate.update(
"INSERT INTO tblname VALUES(?,?,..)"
,
02
new
PreparedStatementSetter(){
03
public
void
setValues(PreparedStatement ps)
throws
SQLException{
04
ps.setLong(
1
, user.getId(
1
));
05
ps.setString(
2
, user.getName(
2
));
06
ps.setDate(
3
,
new
java.sql.Date(
new
Date().getTime());
07
ps.setTimestamp(
4
,
new
Timestamp(
new
Date().getTime());
08
}
09
}
10
);
2) 使用JdbcTemplate 查询 (select)
1
final
User user =
new
User();
2
jdbcTemplate.query(
"SELECT id,name,.. FROM tblname WHERE id=1"
,
3
new
RowCallbackHandler(){
4
public
void
processRow(ResultSet rs)
throws
SQLException{
5
user.setId(rs.getLong(
1
));
6
user.setName(rs.getString(
2
));
7
}
8
}
9
);
01
List uGroup = jdbcTemplate.query(
"SELECT id,name,.. FROM tblname WHERE igroup=1"
,
02
new
RowMapper(){
03
public
Object mapRow(ResultSet rs,
int
no)
throws
SQLException{
04
User user =
new
User();
05
user.setId(rs.getLong(
1
));
06
user.setName(rs.getString(
2
));
07
return
user ;
08
}
09
}
10
};
3)使用JdbcTemplate 便捷方法
1
List uNames = jdbcTemplate.queryForList(
"SELECT name FROM tblname WHERE id>?"
,
2
new
Integer []{
5
}, String.
class
);
1
List<Map> uMapList = (List<Map>) jdbcTemplate.queryForList(
"SELECT id, name FROM tblname WHERE id>?"
,
2
new
Integer []{
5
});
3
for
(Map<String,Object> uMap :uMapList){
4
Integer id = uMap.get(
"id"
);
5
String name = uMap.get(
"name"
);
6
};
1
String user = jdbcTemplate.queryForObject(
"SELECT name FROM tblname WHERE id=?"
,
2
new
Integer []{
5
}, String.
class
);
1
int
uNum = jdbcTemplate.queryForInt(
"SELECT count(*) FROM tblname WHERE id>?"
,
2
new
Integer []{
5
});
4)使用jdbc 操作类
a)扩展 MappingSqlQuery类
01
class
JdbcQueryObject
extends
MappingSqlQuery {
// extends SqlQuery
02
public
JdbcQueryObject (DataSource ds,String sql){
03
this
.setDataSource( ds );
04
this
.setSql( sql );
05
this
.declareParameter(
new
Sqlparameter(
"propName"
,
06
Types.VARCHAR);
// propName 提示作用
07
this
.compile();
08
}
09
public
Object mapRow(ResultSet rs,
int
p)
throws
SQLException{
10
// ...
11
}
12
}
13
JdbcQueryObject queryObj =
new
JdbcQueryObject( ds,
14
"SELECT .. FROM tblName WHERE param=?"
);
15
List list = queryObj.execute(
new
Object[]{...});
b)使用 SqlFunction 类 查询单条结果
1
SqlFunction queryFun =
new
SqlFunction( ds,
2
"select count(*) from tblName where ..."
,
new
int
[]{Types.CHAR,...} );
3
queryFun.compile();
4
queryFun.run(
new
Object[]{p1,p2,..});
c)使用 SqlUpdate 类 更新
1
SqlUpdate updateFunc =
new
SqlUpdate(ds ,
"INSERT tblName ..."
);
2
updateFunc.declareParameter(
new
SqlParameter(
"prop"
,Types.CHAR) );
3
updateFunc.compile();
4
updateFunc.update(
new
String[]{s1,s1});
5)支持jdbc 事务
spring的事务管理有两种方式:编程式事务、声明式事务
这里谈一下 基于数据库单一资源的编程式事务:
spring用实现TransactionDefinition接口的类定义事务的属性:传播行为;隔离级别;超时值;只读标志
默认实现为:DefaultTransactionDefinition类
01
PlatformTransactionManager tm =
02
new
DataSourceTransactionManager(
03
jdbcTemplate.getDataSource() );
04
TransactionStatus status =
null
;
05
try
{
06
//null 默认事务属性配置DefaultTransactionDefinition
07
status = tm.getTransaction(
null
);
08
for
(
final
String wd: words){
09
try
{
10
jdbcTemplate.update( insertWordSql,
11
new
PreparedStatementSetter(){
12
13
public
void
setValues(PreparedStatement pstate)
14
throws
SQLException {
15
pstate.setString(
1
, wd) ;
16
pstate.setTimestamp(
2
,
17
new
Timestamp(
new
Date().getTime() ));
18
}
19
}
20
);
21
22
}
catch
(DataAccessException e) {
23
e.printStackTrace();
24
//tm.rollback(status);
25
}
26
}
// end for
27
}
finally
{
28
tm.commit(status);
29
}
- JdbcTemplate 来封装数据库jdbc操作细节
- jdbc数据库操作封装
- JDBC数据库操作封装(PreparedStatement)
- Spring中配置JdbcTemplate的三种方式要使用Jdbctemplate 对象来完成jdbc 操作。
- JDBC之使用Spring提供的JdbcTemplate进行数据库操作
- 利用Spring jdbcTemplate 来进行数据库的操作
- 【示例】Spring中通过JdbcTemplate来实现数据库的操作
- jdbc,jdbcTemplate获取数据库类型
- jdbc,jdbcTemplate获取数据库类型
- jdbc,jdbcTemplate获取数据库类型
- jdbc,jdbcTemplate获取数据库类型
- spring4 -- JdbcTemplate数据库操作
- jdbcTemplate操作数据库
- Spring框架学习【JdbcTemplate封装Jdbc】
- spring技术内幕11-JdbcTemplate封装Jdbc
- 使用Spring提供的三个JDBC模板类(JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate)操作数据库
- Spring使用JdbcTemplate操作数据库
- Spring使用JdbcTemplate操作数据库
- iOS开发基础控件--UILabel
- 今日面试杂谈
- JAVA反射机制
- java提取每个汉字的首字母
- mysql sql语句大全
- JdbcTemplate 来封装数据库jdbc操作细节
- OpenCL快速入门教程
- 如何在Java中分配超过-Xmx限制的内存
- Merge Sorted Array
- css定位z-index问题
- 一个高效的分布式计算系统:Spark
- 两个很有用的windows调试函数
- 产品包装测试方法
- 1065. A+B and C (64bit) (20)