Spring中使用纯JDBC连接数据库的配置
2017-12-15 14:37
591 查看
最近学习了如何配置在spring中使用单纯的jdbc连接数据库(不用hibernate等持久层框架),记录了一下几个关键的地方,备自己和有需之人查阅。
首先,在spring 的applicationContext配置文件中,需要配置数据源:
Xml代码
<bean id=“propertyConfigurer”
class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
<property name=“locations”>
<list>
<value>classpath*:jdbc.properties</value>
</list>
</property>
</bean>
<!– dbcp pool config –>
<bean id=“dataSource”
class=“org.apache.commons.dbcp.BasicDataSource”
destroy-method=“close”>
<property name=“maxIdle” value=“{jdbc.maxIdle}"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxActive"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.maxActive}”></property>
<property name=“maxWait” value=“{jdbc.maxWait}"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minIdle"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.minIdle}”></property>
<property name=“driverClassName”
value=“{jdbc.driverClassName}"</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"url"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.url}”></property>
<property name=“username” value=“{jdbc.username}"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"password"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.password}”></property>
</bean>
我想上面的东西不用解释了吧,用的是dbcp的连接池。
然后,spring提供了一个JDBC的DaoSupport可供我们使用,就像集成hibernate时提供的hibernate的DaoSupport一样。这里叫JdbcDaoSupport。假设我们有个叫我们像如下的方式使用:
Java代码
public class ImplBaseDao extends JdbcDaoSupport implements BaseDao { public List get(String ID) { return null; } }
因为完全是一个Demo,所以BaseDao这个接口里面只有一个名为get的方法。
Java代码
public interface BaseDao { public List get(String ID); }
然后,具体的业务dao都可以继承自ImplBaseDao
Java代码
public class PassengerInfoDao extends ImplBaseDao {
public List<PassengerInfo> list = new ArrayList<PassengerInfo>();
@SuppressWarnings(“unchecked”)
public List<PassengerInfo> getPassengerInfo(String id) {
String sql = ”select * from passengerinfo where id=”+id;
return (List<PassengerInfo>) this.getJdbcTemplate().query(sql,
new PassengerInfoMapper());
}
}
我惊叹spring的地方在于,对于Java代码
this.getJdbcTemplate().query(sql,new PassengerInfoMapper());
Java代码
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.travelsky.web.pojo.PassengerInfo;
public class PassengerInfoMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index) throws SQLException {
PassengerInfo passengerInfo = new PassengerInfo();
passengerInfo.setId(rs.getInt(”id”));
passengerInfo.setPaName(rs.getString(”paName”));
return passengerInfo;
}
}
可以看见,通过这样的方式,实现了bean与rs的一个转换,虽然很原始,但是这样做比我们完全靠自己去写还是要方便很多。
好了,说说spring集成jdbc的事务和配置和对dao的托管。
在applicationContext中
Xml代码
<!– 事务管理 –>
<bean id=“transactionManager”
class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=“dataSource”>
<ref bean=“dataSource” />
</property>
</bean>
<bean id=“transactionInterceptor”
class=“org.springframework.transaction.interceptor.TransactionInterceptor”>
<property name=“transactionManager” ref=“transactionManager” />
<property name=“transactionAttributes”>
<props>
<!– 定义规则 –>
<prop key=“*”>PROPAGATION_REQUIRED,-Exception</prop>
<prop key=“get*”>PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id=“transactionProxyCreator”
class=“org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
<property name=“beanNames”>
<value>*Service</value>
</property>
<property name=“interceptorNames”>
<list>
<value>transactionInterceptor</value>
<!–
此处增加新的Interceptor
–>
</list>
</property>
</bean>
<bean
class=“org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor”>
<property name=“transactionInterceptor”
ref=“transactionInterceptor” />
</bean>
以上是对事务的配置,大同小异,不明白的可以参照相关spring事务配置说明的文档。
接下来是对dao service action等我们常见类型bean的托管。
其实很简单了,不写大家都会。
Xml代码
<!– project实例配置 start –>
<bean id=“baseDao” class=“com.travelsky.web.core.dao.ImplBaseDao”>
<property name=“dataSource”>
<ref bean=“dataSource” />
</property>
</bean>
<bean id=“JdbcTemplate” class=“org.springframework.jdbc.core.JdbcTemplate”>
<property name=“dataSource”>
<ref bean=“dataSource”/>
</property>
</bean>
<!– 将所有的dao按顺序配置在这个地方 –>
<bean id=“passengerInfoDao”
class=“com.travelsky.web.dao.PassengerInfoDao”>
<property name=“dataSource”>
<ref bean=“dataSource”/>
</property>
<!– 给其直接配置dataSource或者配置jdbcTemplate都可以实现与数据源的引用–>
<!–
<property name=“jdbcTemplate”>
<ref bean=“JdbcTemplate”/>
</property>
–>
</bean>
<!– 将所有的service按顺序配置在这个地方 –>
<bean id=“passengerInfoService”
class=“com.travelsky.web.service.PassengerInfoService”>
<property name=“passengerInfoDao”>
<ref bean=“passengerInfoDao” />
</property>
</bean>
<!– 将所有的action配置在这个地方 –>
<bean name=“/painfo”
class=“com.travelsky.web.web.PassengerInfoAction”>
<property name=“passengerInfoService”>
<ref bean=“passengerInfoService” />
</property>
</bean>
<!– project实例配置 end –>
好了,写到这里,该结束了。
book
首先,在spring 的applicationContext配置文件中,需要配置数据源:
Xml代码
<bean id=“propertyConfigurer”
class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
<property name=“locations”>
<list>
<value>classpath*:jdbc.properties</value>
</list>
</property>
</bean>
<!– dbcp pool config –>
<bean id=“dataSource”
class=“org.apache.commons.dbcp.BasicDataSource”
destroy-method=“close”>
<property name=“maxIdle” value=“{jdbc.maxIdle}"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"maxActive"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.maxActive}”></property>
<property name=“maxWait” value=“{jdbc.maxWait}"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"minIdle"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.minIdle}”></property>
<property name=“driverClassName”
value=“{jdbc.driverClassName}"</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"url"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.url}”></property>
<property name=“username” value=“{jdbc.username}"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">property</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">property</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"password"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"{jdbc.password}”></property>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:jdbc.properties</value> </list> </property> </bean> <!-- dbcp pool config --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="maxIdle" value="${jdbc.maxIdle}"></property> <property name="maxActive" value="${jdbc.maxActive}"></property> <property name="maxWait" value="${jdbc.maxWait}"></property> <property name="minIdle" value="${jdbc.minIdle}"></property> <property name="driverClassName" value="${jdbc.driverClassName}"> </property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
我想上面的东西不用解释了吧,用的是dbcp的连接池。
然后,spring提供了一个JDBC的DaoSupport可供我们使用,就像集成hibernate时提供的hibernate的DaoSupport一样。这里叫JdbcDaoSupport。假设我们有个叫我们像如下的方式使用:
Java代码
public class ImplBaseDao extends JdbcDaoSupport implements BaseDao { public List get(String ID) { return null; } }
public class ImplBaseDao extends JdbcDaoSupport implements BaseDao { public List get(String ID) { return null; } }
因为完全是一个Demo,所以BaseDao这个接口里面只有一个名为get的方法。
Java代码
public interface BaseDao { public List get(String ID); }
public interface BaseDao { public List get(String ID); }
然后,具体的业务dao都可以继承自ImplBaseDao
Java代码
public class PassengerInfoDao extends ImplBaseDao {
public List<PassengerInfo> list = new ArrayList<PassengerInfo>();
@SuppressWarnings(“unchecked”)
public List<PassengerInfo> getPassengerInfo(String id) {
String sql = ”select * from passengerinfo where id=”+id;
return (List<PassengerInfo>) this.getJdbcTemplate().query(sql,
new PassengerInfoMapper());
}
}
public class PassengerInfoDao extends ImplBaseDao { public List<PassengerInfo> list = new ArrayList<PassengerInfo>(); @SuppressWarnings("unchecked") public List<PassengerInfo> getPassengerInfo(String id) { String sql = "select * from passengerinfo where id="+id; return (List<PassengerInfo>) this.getJdbcTemplate().query(sql, new PassengerInfoMapper()); } }
我惊叹spring的地方在于,对于Java代码
this.getJdbcTemplate().query(sql,new PassengerInfoMapper());
this.getJdbcTemplate().query(sql,new PassengerInfoMapper());这句话中,第二个参数new PassengerInfoMapper()来自于spring提供一个接口的实现:
Java代码
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.travelsky.web.pojo.PassengerInfo;
public class PassengerInfoMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index) throws SQLException {
PassengerInfo passengerInfo = new PassengerInfo();
passengerInfo.setId(rs.getInt(”id”));
passengerInfo.setPaName(rs.getString(”paName”));
return passengerInfo;
}
}
import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; import com.travelsky.web.pojo.PassengerInfo; public class PassengerInfoMapper implements RowMapper { public Object mapRow(ResultSet rs, int index) throws SQLException { PassengerInfo passengerInfo = new PassengerInfo(); passengerInfo.setId(rs.getInt("id")); passengerInfo.setPaName(rs.getString("paName")); return passengerInfo; } }
可以看见,通过这样的方式,实现了bean与rs的一个转换,虽然很原始,但是这样做比我们完全靠自己去写还是要方便很多。
好了,说说spring集成jdbc的事务和配置和对dao的托管。
在applicationContext中
Xml代码
<!– 事务管理 –>
<bean id=“transactionManager”
class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=“dataSource”>
<ref bean=“dataSource” />
</property>
</bean>
<bean id=“transactionInterceptor”
class=“org.springframework.transaction.interceptor.TransactionInterceptor”>
<property name=“transactionManager” ref=“transactionManager” />
<property name=“transactionAttributes”>
<props>
<!– 定义规则 –>
<prop key=“*”>PROPAGATION_REQUIRED,-Exception</prop>
<prop key=“get*”>PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id=“transactionProxyCreator”
class=“org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
<property name=“beanNames”>
<value>*Service</value>
</property>
<property name=“interceptorNames”>
<list>
<value>transactionInterceptor</value>
<!–
此处增加新的Interceptor
–>
</list>
</property>
</bean>
<bean
class=“org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor”>
<property name=“transactionInterceptor”
ref=“transactionInterceptor” />
</bean>
<!-- 事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <!-- 定义规则 --> <prop key="*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="transactionProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <value>*Service</value> </property> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> <!-- 此处增加新的Interceptor --> </list> </property> </bean> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> <property name="transactionInterceptor" ref="transactionInterceptor" /> </bean>
以上是对事务的配置,大同小异,不明白的可以参照相关spring事务配置说明的文档。
接下来是对dao service action等我们常见类型bean的托管。
其实很简单了,不写大家都会。
Xml代码
<!– project实例配置 start –>
<bean id=“baseDao” class=“com.travelsky.web.core.dao.ImplBaseDao”>
<property name=“dataSource”>
<ref bean=“dataSource” />
</property>
</bean>
<bean id=“JdbcTemplate” class=“org.springframework.jdbc.core.JdbcTemplate”>
<property name=“dataSource”>
<ref bean=“dataSource”/>
</property>
</bean>
<!– 将所有的dao按顺序配置在这个地方 –>
<bean id=“passengerInfoDao”
class=“com.travelsky.web.dao.PassengerInfoDao”>
<property name=“dataSource”>
<ref bean=“dataSource”/>
</property>
<!– 给其直接配置dataSource或者配置jdbcTemplate都可以实现与数据源的引用–>
<!–
<property name=“jdbcTemplate”>
<ref bean=“JdbcTemplate”/>
</property>
–>
</bean>
<!– 将所有的service按顺序配置在这个地方 –>
<bean id=“passengerInfoService”
class=“com.travelsky.web.service.PassengerInfoService”>
<property name=“passengerInfoDao”>
<ref bean=“passengerInfoDao” />
</property>
</bean>
<!– 将所有的action配置在这个地方 –>
<bean name=“/painfo”
class=“com.travelsky.web.web.PassengerInfoAction”>
<property name=“passengerInfoService”>
<ref bean=“passengerInfoService” />
</property>
</bean>
<!– project实例配置 end –>
<!-- project实例配置 start --> <bean id="baseDao" class="com.travelsky.web.core.dao.ImplBaseDao"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!-- 将所有的dao按顺序配置在这个地方 --> <bean id="passengerInfoDao" class="com.travelsky.web.dao.PassengerInfoDao"> <property name="dataSource"> <ref bean="dataSource"/> </property> <!-- 给其直接配置dataSource或者配置jdbcTemplate都可以实现与数据源的引用--> <!-- <property name="jdbcTemplate"> <ref bean="JdbcTemplate"/> </property> --> </bean> <!-- 将所有的service按顺序配置在这个地方 --> <bean id="passengerInfoService" class="com.travelsky.web.service.PassengerInfoService"> <property name="passengerInfoDao"> <ref bean="passengerInfoDao" /> </property> </bean> <!-- 将所有的action配置在这个地方 --> <bean name="/painfo" class="com.travelsky.web.web.PassengerInfoAction"> <property name="passengerInfoService"> <ref bean="passengerInfoService" /> </property> </bean> <!-- project实例配置 end -->
好了,写到这里,该结束了。
book
相关文章推荐
- Spring中使用JDBC连接数据库的配置
- Java_JDBC连接数据库_使用读取配置文件的方式
- java jdbc使用配置文件连接数据库
- spring(数据库)jdbc配置、spring与jdbc编程的结合和jdbc模板方式的使用
- Oracle 使用配置文件来配置JDBC连接数据库
- Oracle 使用配置文件来配置JDBC连接数据库
- 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等
- 配置BEA WebLogic 8.1 JDBC连接--Oracle 8.1.7数据库使用的WebLogic 8.1 JDBC配置
- 配置BEA WebLogic 8.1 JDBC连接--Oracle 8.1.7数据库使用的WebLogic 8.1 JDBC配置
- spring_使用占位符连接数据库_PropertyPlaceholderConfigurer_DataSource配置创建获取
- java jdbc使用配置文件连接数据库:
- 使用Spring连接数据库,配置JSP json数据
- 使用Spring JDBC框架连接并操作数据库
- jdbc数据库连接管理封装工具类,不同使用属性文件配置数据库连接信息(3)
- Spring Boot通过Mybatis,使用mapper接口和xml配置sql,连接数据库
- 使用Spring JDBC框架连接并操作数据库
- spring的xml配置文件中获取jdbc.properties乱码导致连接数据库失败
- Spring配置文件中如何使用外部配置文件配置数据库连接
- 使用资源文件配置 Spring数据库连接
- spring使用properties配置数据库连接信息