Spring的数据库编程浅入浅出—不吹牛逼不装逼

前言

上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这部分可以先放放,先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为Spring的数据库编程,主要讲jdbcTemplate,让初学者直接上手。

数据库切入

数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,需要提醒的是jdbcTemplate在实际应用中并不常用,但我觉得对新手来说苍蝇再小也是肉,要想往前走,就得把这些小肉先吃了。

Spring JDBC配置

使用Spring JDBC操作数据库,需要对其进行配置,配置如下

<!--配置spring-jdbcTemplate-->

<!--配置数据源-->

<bean

id
=
"dataSource"

class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>

<!--MySQL数据库驱动-->

<property

name
=
"driverClassName"

value
=
"com.mysql.jdbc.Driver"
></property>

<!--连接数据库的URL-->

<property

name
=
"url"

value
=
"jdbc:mysql://localhost:3306/bbb?useUnicode=true&amp;characterEncoding=UTF-8"
></property>

<!--连接数据库的用户名-->

<property

name
=
"username"

value
=
"root"
></property>

<!--连接数据库的密码-->

<property

name
=
"password"

value
=
"root"
></property>

</bean>

<!--配置JDBC模板-->

<bean

id
=
"jdbcTemplate"

class
=
"org.springframework.jdbc.core.JdbcTemplate"
>

<property

name
=
"dataSource"

ref
=
"dataSource"
></property>

</bean>

配置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<T> query(String sql,RowMapper<T> rowMapper,Object args[])

该方法可以对数据表进行查询操作,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

<dependencies>

<dependency>

<groupId>
junit
</groupId>

<artifactId>
junit
</artifactId>

<version>
4.11
</version>

<scope>
test
</scope>

</dependency>

<dependency>

<groupId>
javax.servlet
</groupId>

<artifactId>
javax.servlet-api
</artifactId>

<version>
3.1.0
</version>

</dependency>

<dependency>

<groupId>
javax.servlet
</groupId>

<artifactId>
jstl
</artifactId>

<version>
1.2
</version>

</dependency>

<dependency>

<groupId>
mysql
</groupId>

<artifactId>
mysql-connector-java
</artifactId>

<version>
5.1.38
</version>

</dependency>

<!--spring核心依赖-->

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-core
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-beans
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-context
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-aop
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-jdbc
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-web
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-webmvc
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-expression
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<dependency>

<groupId>
org.springframework
</groupId>

<artifactId>
spring-tx
</artifactId>

<version>
5.1.5.RELEASE
</version>

</dependency>

<!--日志相关-->

<dependency>

<groupId>
commons-logging
</groupId>

<artifactId>
commons-logging
</artifactId>

<version>
1.2
</version>

</dependency>

</dependencies>

spring-config.xml

<?xml version=
"1.0"
 encoding=
"UTF-8"
?>

<beans

xmlns
=
"http://www.springframework.org/schema/beans"

xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"

xmlns:context
=
"http://www.springframework.org/schema/context"

xmlns:tx
=
"http://www.springframework.org/schema/tx"

xmlns:mvc
=
"http://www.springframework.org/schema/mvc"

xsi:schemaLocation
=
"http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans.xsd

      http://www.springframework.org/schema/context

      http://www.springframework.org/schema/context/spring-context.xsd

      http://www.springframework.org/schema/tx

      http://www.springframework.org/schema/tx/spring-tx.xsd

      http://www.springframework.org/schema/mvc

      http://www.springframework.org/schema/mvc/spring-mvc.xsd

       "
>

<!--配置注解要扫描的包-->

<context:component-scan

base-package
=
"com.my"
></context:component-scan>

<mvc:annotation-driven></mvc:annotation-driven>

<!--将指定类TestDaoImpl配置给Spring,让Spring创建其实例-->

<bean

id
=
"testDIDao"

class
=
"com.my.dao.impl.TestDaoImpl"
/>

<!--使用构造方法注入-->

<!--<bean id="testDIService" class="com.my.service.impl.TestServiceImpl" >-->

<!--&lt;!&ndash;将TestDIDao注入到TestDIServiceImpl类的属性testDao上&ndash;&gt;-->

<!--<constructor-arg index="0" ref="testDIDao"/>-->

<!--</bean>-->

<!--使用setter方法注入-->

<bean

id
=
"testDIService"

class
=
"com.my.service.impl.TestServiceImpl"
>

<!--调用TestDIServiceImpl类的setter方法,将TestDao注入到TestServiceImpl类的属性testDao上-->

<property

name
=
"testDao"

ref
=
"testDIDao"
></property>

</bean>

<!--配置spring-jdbcTemplate-->

<!--配置数据源-->

<bean

id
=
"dataSource"

class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>

<!--MySQL数据库驱动-->

<property

name
=
"driverClassName"

value
=
"com.mysql.jdbc.Driver"
></property>

<!--连接数据库的URL-->

<property

name
=
"url"

value
=
"jdbc:mysql://localhost:3306/bbb?useUnicode=true&amp;characterEncoding=UTF-8"
></property>

<!--连接数据库的用户名-->

<property

name
=
"username"

value
=
"root"
></property>

<!--连接数据库的密码-->

<property

name
=
"password"

value
=
"root"
></property>

</bean>

<!--配置JDBC模板-->

<bean

id
=
"jdbcTemplate"

class
=
"org.springframework.jdbc.core.JdbcTemplate"
>

<property

name
=
"dataSource"

ref
=
"dataSource"
></property>

</bean>

<!--配置事务-->

<bean

id
=
"txManager"

class
=
"org.springframework.jdbc.datasource.DataSourceTransactionManager"
>

<property

name
=
"dataSource"

ref
=
"dataSource"
></property>

</bean>

<!--注册事务注解驱动-->

<tx:annotation-driven

transaction-manager
=
"txManager"
></tx:annotation-driven>

</beans>

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的数据库编程浅入浅出—不吹牛逼不装逼

Spring的数据库编程浅入浅出—不吹牛逼不装逼

结束

对于Spring JbdcTemplate的讲解到此结束,对于新手来说没必要太复杂,能完成增删改查做个入门即可,等了解了再详细学习才有帮助,希望能对一些需要的朋友有用吧。

欲知下文如何,请看下回讲解。
Spring的数据库编程浅入浅出—不吹牛逼不装逼

猜你喜欢

转载自blog.51cto.com/14886659/2518580