前言
上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这部分可以先放放,先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为Spring的数据库编程,主要讲jdbcTemplate,让初学者直接上手。
数据库切入
数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,需要提醒的是jdbcTemplate在实际应用中并不常用,但我觉得对新手来说苍蝇再小也是肉,要想往前走,就得把这些小肉先吃了。
Spring JDBC配置
使用Spring JDBC操作数据库,需要对其进行配置,配置如下
配置JDBC模板时需要将dataSource注入到jdbcTemplate,而在数据访问层(Dao类)需要使用jdbcTemplate时也需要将jdbc Template注入到对应的Bean中,我在这演示用最简单的注解注入
@Repository
(
"userDao"
)
public
class
UserDaoImpl
implements
UserDao
{
@Autowired
//使用配置文件中的JDBC模板
private
JdbcTemplate
jdbcTemplate
;
}
Spring Jdbc Template的常用方法
在上面我们获取了JDBC模板,下面我来说如何使用它。首先需要了解JdbcTemplate常用的方法,该类的常用方法是update和query.
1、public int update(String sql,Object args[])
该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。
示例如下:
public
void
add() {
String
insertSql =
"insert into user values(null,?,?)"
;
Object
parem1[] = {
"成功"
,
"123456"
};
jdbcTemplate.update(insertSql,parem1);
System
.out.println(
"UserDao中的添加功能实现了"
);
}
2、public List
该方法可以对数据表进行查询操作,rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。
示例如下:
public
void
query() {
String
selectSql =
"select * from user"
;
RowMapper
<
User
> rowMapper =
new
BeanPropertyRowMapper
<
User
>(
User
.
class
);
List
<
User
> list = jdbcTemplate.query(selectSql,rowMapper,
null
);
System
.out.println(
"UserDao中的查询功能实现了"
);
}
案例辅助
Pom.xml
junit
junit
4.11
test
javax.servlet
javax.servlet-api
3.1.0
javax.servlet
jstl
1.2
mysql
mysql-connector-java
5.1.38
org.springframework
spring-core
5.1.5.RELEASE
org.springframework
spring-beans
5.1.5.RELEASE
org.springframework
spring-context
5.1.5.RELEASE
org.springframework
spring-aop
5.1.5.RELEASE
org.springframework
spring-jdbc
5.1.5.RELEASE
org.springframework
spring-web
5.1.5.RELEASE
org.springframework
spring-webmvc
5.1.5.RELEASE
org.springframework
spring-expression
5.1.5.RELEASE
org.springframework
spring-tx
5.1.5.RELEASE
commons-logging
commons-logging
1.2
spring-config.xml
User
package
com.my.pojo;
public
class
User
{
private
int
id;
private
String
username;
private
String
password;
public
User
() {
}
public
User
(
int
id,
String
username,
String
password) {
this
.id = id;
this
.username = username;
this
.password = password;
}
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id = id;
}
public
String
getUsername() {
return
username;
}
public
void
setUsername(
String
username) {
this
.username = username;
}
public
String
getPassword() {
return
password;
}
public
void
setPassword(
String
password) {
this
.password = password;
}
@Override
public
String
toString() {
return
"User{"
+
"id="
+ id +
", username='"
+ username +
'''
+
", password='"
+ password +
'''
+
'}'
;
}
}
UserDao
package
com.my.dao;
public
interface
UserDao
{
public
void
add();
public
void
delete
();
public
void
update();
public
void
query();
}
UserDaoImpl
package
com.my.dao.impl;
import
com.my.dao.
UserDao
;
import
com.my.pojo.
User
;
import
org.springframework.beans.factory.annotation.
Autowired
;
import
org.springframework.jdbc.core.
BeanPropertyRowMapper
;
import
org.springframework.jdbc.core.
JdbcTemplate
;
import
org.springframework.jdbc.core.
RowMapper
;
import
org.springframework.stereotype.
Repository
;
import
java.util.
List
;
@Repository
(
"userDao"
)
public
class
UserDaoImpl
implements
UserDao
{
@Autowired
//使用配置文件中的JDBC模板
private
JdbcTemplate
jdbcTemplate;
@Override
public
void
add() {
String
insertSql =
"insert into user values(null,?,?)"
;
for
(
int
i=
0
;i<
15
;i++){
Object
parem1[] = {
"成功"
,
"123456"
};
jdbcTemplate.update(insertSql,parem1);
}
System
.out.println(
"UserDao中的添加功能实现了"
);
}
@Override
public
void
delete
() {
String
deleteSql =
"delete from user where id=?"
;
Object
parem2[] = {
5
};
jdbcTemplate.update(deleteSql,parem2);
System
.out.println(
"UserDao中的删除功能实现了"
);
}
@Override
public
void
update() {
String
updateSql =
"update user set username=? , password=? where id =?"
;
Object
parem3[] = {
"修改"
,
"654321"
,
3
};
jdbcTemplate.update(updateSql,parem3);
System
.out.println(
"UserDao中的修改功能实现了"
);
}
@Override
public
void
query() {
String
selectSql =
"select * from user"
;
RowMapper
<
User
> rowMapper =
new
BeanPropertyRowMapper
<
User
>(
User
.
class
);
List
<
User
> list = jdbcTemplate.query(selectSql,rowMapper,
null
);
System
.out.println(
"UserDao中的查询功能实现了"
);
for
(
User
user : list){
System
.out.println(user);
}
}
}
测试Test3
package
com.my.test;
import
com.my.dao.
UserDao
;
import
org.springframework.beans.factory.annotation.
Autowired
;
import
org.springframework.context.
ApplicationContext
;
import
org.springframework.context.support.
ClassPathXmlApplicationContext
;
public
class
Test3
{
@Autowired
private
UserDao
userDao;
public
static
void
main(
String
[] args) {
ApplicationContext
appCon =
new
ClassPathXmlApplicationContext
(
"spring-config.xml"
);
//从容器中获取目标对象
UserDao
userDao = (
UserDao
) appCon.getBean(
"userDao"
);
//userDao.add();
userDao.
delete
();
userDao.update();
userDao.query();
}
}
测试结果
结束
对于Spring JbdcTemplate的讲解到此结束,对于新手来说没必要太复杂,能完成增删改查做个入门即可,等了解了再详细学习才有帮助,希望能对一些需要的朋友有用吧。