Spring和数据库编程(一)

1.传统的JDBC代码的弊端

如果用的好JDBC,其性能是最好的,但是有太多的try…catch…finally语句需要处理,数据库资源的打开、关闭都是定性的,甚至在大部分情况下,只要发生异常数据库的事务就会回滚,否则就提交,二者都是比较固定的模式。在spring没有出来之前,许多开发者在JDBC中滥用try…catch…finally语句,导致代码可读性和可维护性下降,从而引发信任问题。

2.配置数据库资源

2.1 使用简单数据库配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/chapter12" />
        <property name="username" value="root" />
        <property name="password" value="123456abc" />
    </bean>

这个配置一般用于测试,因为他不是一个数据库连接池,只是一个很简单的数据库连接的应用。

2.2 使用第三方数据库连接池

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/chapter12" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
        <!--连接池的最大数据库连接数 -->
        <property name="maxActive" value="255" />
        <!--最大等待连接中的数量 -->
        <property name="maxIdle" value="5" />
        <!--最大等待毫秒数 -->
        <property name="maxWait" value="10000" />
    </bean>

这样就配置了一个DBCP的数据库连接池了。

2.3 使用JNDI数据库连接池

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/jdbc/chapter12" />
    </bean>

在Tomcat、WebLogic等JavaEE服务器上配置数据源,这是它存在一个JNDI的名称。也可以通过Spring所提供的的JNDI机制获取对应的数据源。


常用的数据库连接池

常用的数据库连接池有C3P0,dbcp,druid
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>
------------------------------------
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>
------------------------------------
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>

注解配置数据源

/**
     * 配置数据库
     * @return 数据库连接池
     */
    @Bean(name="dataSource")
    public DataSource initDataSource() {
        if(dataSource!=null) {
            return dataSource;
        }
        Properties props=new Properties();
        props.setProperty("driverClassName", "com.mysql.cj.jdbc.Driver");
        props.setProperty("url","jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=GMT%2B8");
        props.setProperty("userName","root");
        props.setProperty("password","123456abc");
        props.setProperty("maxActive","20");
        props.setProperty("maxIdle","20");
        props.setProperty("maxWait","30000");
        try {
            dataSource=BasicDataSourceFactory.createDataSource(props);
        }catch(Exception e) {
            e.printStackTrace();
        }
        return dataSource;
    }

properties文件配置数据源

dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass=com.mysql.cj.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/db_shiro?useSSL=false&serverTimezone=GMT%2B8
dataSource.user=root
dataSource.password=123456abc

xml:
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/db_shiro?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=GMT%2B8

注意在xml文件中&需要使用转义字符&amp;

posted @ 2020-02-29 17:41  马中赤兔  阅读(185)  评论(0编辑  收藏  举报