在spring中使用数据库
若要在spring中使用数据库,首先需要配置数据源。
1、使用数据源连接池,可以使用DBCP(Data Base Connection Pooling)
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="username">xx</property>
<property name="password">xx</property>
<property name="url">xx</property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
<property name="username">xx</property>
<property name="password">xx</property>
<property name="url">xx</property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
2、使用spring 自带的基于JDBC驱动的数据源。spring提供了两种数据源对象:
DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。
SingleConnectionDataSource:在每个连接请求时都会返回同一个连接。可看做只有一个连接。
这两个数据源的配置与BasicDataSource配置类似,唯一的区别是BasicDataSource提供连接池功能。
3、使用JDBC模板:使用SimpleJdbcTemplate访问数据
需要在spring上下文中配置SimpleJdbcTemplate Bean:如:
<bean id="simpleTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg ref="datasource"></constructor-arg>
</bean>
<constructor-arg ref="datasource"></constructor-arg>
</bean>
在Dao层使用模板访问数据时:
@Component("userDao")
public class UserDaoImpl implements UserDao {
private static final String INSERT_SQL = "insert into user(username,password) values(:username,:passwprd)";
private SimpleJdbcTemplate simpleTemplate;
public void addUser(Monkey monkey) {
Map<String,String> params = new HashMap<String,String>();
params.put("username", monkey.getName());
params.put("password", monkey.getPassword());
simpleTemplate.update(INSERT_SQL, params);
}
@Autowired
public void setSimpleTemplate(SimpleJdbcTemplate simpleTemplate) {
this.simpleTemplate = simpleTemplate;
}
}
public class UserDaoImpl implements UserDao {
private static final String INSERT_SQL = "insert into user(username,password) values(:username,:passwprd)";
private SimpleJdbcTemplate simpleTemplate;
public void addUser(Monkey monkey) {
Map<String,String> params = new HashMap<String,String>();
params.put("username", monkey.getName());
params.put("password", monkey.getPassword());
simpleTemplate.update(INSERT_SQL, params);
}
@Autowired
public void setSimpleTemplate(SimpleJdbcTemplate simpleTemplate) {
this.simpleTemplate = simpleTemplate;
}
}
4、使用spring的Dao 支持类:SimpleJdbcDaoSupport
@Component("userDao")
public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao {
private static final String INSERT_SQL = "insert into user(username,password) values(:username,:passwprd)";
@Autowired
public void setDatasource(DataSource datasource) {
this.setDatasource(datasource);
}
public void addUser(Monkey monkey) {
Map<String,String> params = new HashMap<String,String>();
params.put("username", monkey.getName());
params.put("password", monkey.getPassword());
this.getJdbcTemplate().update(INSERT_SQL, params);
}
}
public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao {
private static final String INSERT_SQL = "insert into user(username,password) values(:username,:passwprd)";
@Autowired
public void setDatasource(DataSource datasource) {
this.setDatasource(datasource);
}
public void addUser(Monkey monkey) {
Map<String,String> params = new HashMap<String,String>();
params.put("username", monkey.getName());
params.put("password", monkey.getPassword());
this.getJdbcTemplate().update(INSERT_SQL, params);
}
}
当UserDao中配置了Datasource,则会在SimpleJdbcDaoSupport中自动创建一个SimpleJdbcTemplate实例。
JdbcDaoSupport中的一个方法:
/**
* Set the JDBC DataSource to be used by this DAO.
*/
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}
* Set the JDBC DataSource to be used by this DAO.
*/
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}