数据库使用普通的JDBC的连接的话,使用比较繁琐,需要写不必要的代码来处理异常,打开和关闭数据库连接等,但是使用Spring的JDBC框架的话,所有低层次细节从打开连接,准备和执行SQL语句,过程异常,处理事务,最后关闭连接等都会变得简单。
你所要做的只是定义连接参数,并指定要执行的SQL语句,并做必要的工作,在每次迭代时从数据库中获取数据。
Spring JDBC提供了一些方法和相应不同的类与数据库进行交互。我要采取经典和最流行的做法,利用JdbcTemplateclass框架。这是管理的所有数据库的通信和异常处理中心框架类。
JdbcTemplate 类
JdbcTemplate类执行SQL查询,更新语句和存储过程调用,在结果集和提取返回参数值进行迭代。它还捕捉JDBC的异常并将其转换为通用的,信息更丰富,除了在org.springframework.dao包中定义的层次结构。
JdbcTemplate类的实例是一次配置的线程。所以,你可以配置一个JdbcTemplate的一个实例,然后安全地注入这种共享引用到多个DAO。
使用JdbcTemplate类时,通常的做法是配置一个DataSource在Spring配置文件,然后依赖关系注入该共享数据源豆到DAO类,JdbcTemplate或者是在setter数据源创建。
配置数据源
让我们一起创造数据库test数据库表的 student 。假设使用MySQL数据库,如果使用其他数据库,那么可以相应地改变你的DDL和SQL查询。
CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
现在,我们需要提供一个数据源给JdbcTemplate类,因此它可以自行配置,以获得数据库访问。您可以配置数据源的XML文件中有一段代码,如下图所示:
<bean
id
=
"dataSource"
class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<property
name
=
"driverClassName"
value
=
"com.mysql.jdbc.Driver"
/>
<property
name
=
"url"
value
=
"jdbc:mysql://localhost:3306/TEST"
/>
<property
name
=
"username"
value
=
"root"
/>
<property
name
=
"password"
value
=
"password"
/>
</bean>
数据访问对象 (DAO)
DAO表示这是通常用于数据库交互的数据访问对象。 DAO的存在是为了提供读取和写入数据到数据库中,他们应该通过该应用程序的其余部分将访问它们的接口公开此功能的一种手段。
在Spring的数据访问对象(DAO)的支持使得它很容易与如JDBC,Hibernate,JPA和JDO以一致的方式进行数据访问技术。
执行SQL语句
让我们来看看如何使用SQL和的JdbcTemplate对象数据库中的表执行CRUD(创建,读取,更新和删除)操作。
查询一个整数:
String
SQL
=
"select count(*) from Student"
;
int
rowCount
=
jdbcTemplateObject
.
queryForInt
(
SQL
);
查询长整数:
String
SQL
=
"select count(*) from Student"
;
long
rowCount
=
jdbcTemplateObject
.
queryForLong
(
SQL
);
使用绑定变量的简单查询:
String
SQL
=
"select age from Student where id = ?"
;
int
age
=
jdbcTemplateObject
.
queryForInt
(
SQL
,
new
Object
[]{
10
});
在查询字符串:
String
SQL
=
"select name from Student where id = ?"
;
String
name
=
jdbcTemplateObject
.
queryForObject
(
SQL
,
new
Object
[]{
10
},
String
.
class
);
查询并返回一个对象:
String
SQL
=
"select * from Student where id = ?"
;
Student
student
=
jdbcTemplateObject
.
queryForObject
(
SQL
,
new
Object
[]{
10
},
new
StudentMapper
());
public
class
StudentMapper
implements
RowMapper
<
Student
>
{
public
Student
mapRow
(
ResultSet
rs
,
int
rowNum
)
throws
SQLException
{
Student
student
=
new
Student
();
student
.
setID
(
rs
.
getInt
(
"id"
));
student
.
setName
(
rs
.
getString
(
"name"
));
student
.
setAge
(
rs
.
getInt
(
"age"
));
return
student
;
}
}
查询并返回多个对象:
String
SQL
=
"select * from Student"
;
List
<
Student
>
students
=
jdbcTemplateObject
.
query
(
SQL
,
new
StudentMapper
());
public
class
StudentMapper
implements
RowMapper
<
Student
>
{
public
Student
mapRow
(
ResultSet
rs
,
int
rowNum
)
throws
SQLException
{
Student
student
=
new
Student
();
student
.
setID
(
rs
.
getInt
(
"id"
));
student
.
setName
(
rs
.
getString
(
"name"
));
student
.
setAge
(
rs
.
getInt
(
"age"
));
return
student
;
}
}
插入一行到表:
String
SQL
=
"insert into Student (name, age) values (?, ?)"
;
jdbcTemplateObject
.
update
(
SQL
,
new
Object
[]{
"Zara"
,
11
}
);
更新一行到表:
String
SQL
=
"update Student set name = ? where id = ?"
;
jdbcTemplateObject
.
update
(
SQL
,
new
Object
[]{
"Zara"
,
10
}
);
从表中删除行:
String
SQL
=
"delete Student where id = ?"
;
jdbcTemplateObject
.
update
(
SQL
,
new
Object
[]{
20
}
);
执行DDL语句
您可以使用execute(…)方法的JdbcTemplate来执行任何SQL语句或DDL语句。下面是一个示例使用CREATE语句创建一个表:
String SQL = "CREATE TABLE Student( " + "ID INT NOT NULL AUTO_INCREME
原文发布时间为:2018-10-28
本文来自云栖社区合作伙伴“Java杂记”,了解相关信息可以关注“Java杂记”。