接近年底了在外地出差格外想家呀,尤其这种到处都洋溢着节日喜庆的时节。忙里偷闲把之前有关数据源的疑惑整理了下。分别是数据源和对数据库的操作。


阿里巴巴的数据源druid作为后起之秀,各种优点百科都有,这里就不赘述了。今天主要说下相关配置。

druid配置及使用

添加相关jar包(我是maven项目,因此在pom.xml中添加如下依赖):

<!-- druid数据源 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.28</version>
    </dependency>

项目是springMVC的,主要在spring-servlet.xml中添加如下代码:

<!-- 数据源配置 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
        <!-- 连接池最大使用连接数量 -->
        <property name="maxActive" value="${jdbc.maxActive}"/>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${jdbc.minPoolSize}"/>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${jdbc.maxIdleTime}"/>
        <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
        <property name="filters" value="stat" />
        <!--监控SQL语句-->
        <property name="proxyFilters">
            <list>
                <ref bean="stat-filter"/>
            </list>
        </property>
    </bean>

    <!--SQL监控-->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!--慢SQL记录 缺省值为3000,也就是3秒-->
        <property name="slowSqlMillis" value="5000"/>
        <property name="logSlowSql" value="true"/>
        <!--SQL合并配置-->
        <property name="mergeSql" value="true"/>
    </bean>

在web.xml中添加如下代码:

<!-- 监控SQL情况 -->
  <servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <!--允许用户清统计数据-->
    <init-param>
      <param-name>resetEnable</param-name>
      <param-value>true</param-value>
    </init-param>
    <!--用户名-->
    <init-param>
      <param-name>loginUsername</param-name>
      <param-value>helloworld</param-value>
    </init-param>
    <!--密码-->
    <init-param>
      <param-name>loginPassword</param-name>
      <param-value>helloworld</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
  </servlet-mapping>

  <!--连接池启用Web监控统计功能start -->
  <filter>
    <filter-name>DruidWebStatFilter</filter-name>
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
    <init-param>
      <param-name>exclusions</param-name>
      <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--连接池启用Web监控统计功能end-->

做完以上配置,德鲁伊数据源就可以使用了,在项目启动之后可以打开页面查看监控:
http://ip:port/projectName/druid/index.html


虽然数据源配置完成了,但是要操作数据库(增删改查)还需要通过配置JdbcTemplate来实现(这里只说这一种,还有其他方式)。

JdbcTemplate有关:

Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

JdbcTemplate主要提供以下五类方法:

execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

query方法及queryForXXX方法:用于执行查询相关语句;

call方法:用于执行存储过程、函数相关语句。

JdbcTemplate是Spring下的,因此无需加入相关jar包(spring配套jar包要加入)

在spring-servlet.xml中添加如下配置:

<!--注入 spring 的 jdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="defaultSource"/>
    </bean>

这样在项目其中之后可以在实现层通过注解的方式来调用实现操作数据库

@Repository
public class WebDaoImpl implements WebDao {

    @Autowired
    JdbcTemplate jdbcTemplate;

    public List queryUserInfo()
    {
        String SQL = " SELECT * FROM H_USER";
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            list = jdbcTemplate.queryForList(SQL);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
}