第一步:首先定义数据源datasource,这个数据源必须要实现java.sql.DataSource的接口
这个可以自定义实现(比较繁琐),也可以使用各种开源的数据源,比如dbcp, c3p0, druid等等。
同时,准备好所使用的数据源的配置文件 .properties
url=jdbc:mysql://localhost:3306/kagami
driverClassName=com.mysql.jdbc.Driver
username=root
password=123456
#filters=stat
maxActive=20
initialSize=1
maxWait=60000
minIdle=10
#maxIdle:15
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 'x'
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
#poolPreparedStatements:true
maxOpenPreparedStatements=20
#\u5BF9\u4E8E\u957F\u65F6\u95F4\u4E0D\u4F7F\u7528\u7684\u8FDE\u63A5\u5F3A\u5236\u5173\u95ED
removeAbandoned=true
#\u8D85\u8FC730\u5206\u949F\u5F00\u59CB\u5173\u95ED\u7A7A\u95F2\u8FDE\u63A5
removeAbandonedTimeout=1800
#\u5C06\u5F53\u524D\u5173\u95ED\u52A8\u4F5C\u8BB0\u5F55\u5230\u65E5\u5FD7
logAbandoned=true
第二步:在spring_mvc.xml中加载配置文件,配置数据源,往JdbcTemplate注入数据源。
<!-- 加载配置文件 -->
<util:properties id="jdbc" location="classpath:jdbc.properties"></util:properties>
<!-- 配置数据源,这里用的是一个开源的数据源 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="#{jdbc.url}" />
<property name="username" value="#{jdbc.username}" />
<property name="password" value="#{jdbc.password}" />
<property name="driverClassName" value="#{jdbc.driverClassName}" />
<property name="maxActive" value="#{jdbc.maxActive}" />
<property name="initialSize" value="#{jdbc.initialSize}" />
<property name="maxWait" value="#{jdbc.maxWait}" />
<property name="minIdle" value="#{jdbc.minIdle}" />
<property name="timeBetweenEvictionRunsMillis" value="#{jdbc.timeBetweenEvictionRunsMillis}" />
<property name="minEvictableIdleTimeMillis" value="#{jdbc.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="#{jdbc.validationQuery}" />
<property name="testWhileIdle" value="#{jdbc.testWhileIdle}" />
<property name="testOnBorrow" value="#{jdbc.testOnBorrow}" />
<property name="testOnReturn" value="#{jdbc.testOnReturn}" />
<property name="maxOpenPreparedStatements"
value="#{jdbc.maxOpenPreparedStatements}" />
<property name="removeAbandoned" value="#{jdbc.removeAbandoned}" /> <!-- 打开removeAbandoned功能 -->
<property name="removeAbandonedTimeout" value="#{jdbc.removeAbandonedTimeout}" /> <!-- 1800秒,也就是30分钟 -->
<property name="logAbandoned" value="#{jdbc.logAbandoned}" /> <!-- 关闭abanded连接时输出错误日志 -->
</bean>
<!-- 往JdbcTemplate注入数据源 -->
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
第三步:使用JdbcTemplate类访问数据库,调用该类的方法实现增删改查,用到的注解是JdbcTemplate类使用@Resource注入。
此外,query方法查询的时候,除了需要传入的SQL,还需要实现RowMapper这个接口
在插入数据的时候,如果不需要返回插入行ID,直接用update(sql, params);
需要返回ID的,需要用update(PreparedStatementCreator, generatedKeyHolder)
@Repository
public class MySpringJdbc{
@Resource
private JdbcTemplate jdbcTemplate;
public List<User>queryAll(){
String sql="select * from user";
List<User>users=jdbcTemplate.query(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user=new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setPhone(rs.getString("phone"));
return user;
}
});
return users;
}
}