SSM框架学习3-Spring配置数据源

在日常的开发中,我们对于数据库的引用通常是通过数据源创建连接来完成的,这样做效率更高且资源占用率更小,复用率更大。

推荐使用c3p0或者druid的数据连接池,这里以c3p0为例记录,druid的方式相同,只是某些api的内容不同。

目录

1. 引入坐标

2. 创建数据源对象,创建连接

首先是使用.properties的配置文件的方法

通过spring配置文件创建对象的方法


1. 引入坐标

我们要使用c3p0的连接池,以及jdbc首先得导入依赖,配置坐标:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

注意这里的mysql-connector-java得版本需要与当前所连接得数据库的版本对应,我的是8.0.25。

配置好后,刷新依赖成功导入。

2. 创建数据源对象,创建连接

使用c3p0时,当我们不在spring配置文件中创建对象,而是手动创建时,我们需要条用c3p0提供的类创建以及连接的代码如下:
 

@Test
    //测试手动创建c3p0
    public void test1() throws PropertyVetoException, SQLException {
        ComboPooledDataSource dataSource=new ComboPooledDataSource();//从连接池实例一个数据源
        dataSource.setDriverClass("com.mysql.jdbc.Driver");//设置驱动
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/coms?useUnicode=true&characterEncoding=utf-8");//设置数据库连接
        dataSource.setUser("root");//要连接的用户名
        dataSource.setPassword("xxxxxx");//设置密码
        //到这里数据源已经配置好,我们要使用数据时就创建一个连接如下,用完连接后关闭连接,实现节约资源
        Connection connection=dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

这里我们发现,我们数据库的相关配置与代码高度耦合,需要解耦处理,因此有两种方式课供选择,第一种就是写一个.properties的配置文件,将各个量定义在此配置文件中,完成解耦,第二种方法是使用spring配置文件的bean来构建dataSource对象,观察手动创建过程可以发现,他是一种无参构造,且采用setter方式给变量赋值,因此我们可以对此进行依赖注入。

首先是使用.properties的配置文件的方法

配置文件如图:

 然后是导入配置文件,引用变量:

@Test
    //测试手动创建c3p0数据源(加载properties配置文件)
    public void test2() throws PropertyVetoException, SQLException {
        //读取配置文件
        ResourceBundle rb=ResourceBundle.getBundle("jdbc");
        String driver=rb.getString("jdbc.driver");
        String url=rb.getString("jdbc.url");
        String username=rb.getString("jdbc.username");
        String password=rb.getString("jdbc.password");
        ComboPooledDataSource dataSource=new ComboPooledDataSource();//从连接池实例一个数据源
        dataSource.setDriverClass(driver);//设置驱动
        dataSource.setJdbcUrl(url);//设置数据库连接
        dataSource.setUser(username);//要连接的用户名
        dataSource.setPassword(password);//设置密码
        //到这里数据源已经配置好,我们要使用数据时就创建一个连接如下,用完连接后关闭连接,实现节约资源
        Connection connection=dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

 我们的配置文件需放在标准的resource文件夹下,这样在用上面的getBundle的方法才可以引入这个配置文件,传入值不需要加后缀。

通过spring配置文件创建对象的方法

首先我们需要在applicationContext.xml文件中编写依赖注入的bean

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/coms?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="user" value="root"/>
        <property name="password" value="xxxxx"/>
</bean>

注意这里的name应该是我们set构造后面的部分将首字母小写

仔细看这规律,然后记住,然后value值就是我们自己填入,这里的属于解耦状态,因为xml文件同属于配置文件,我们可以在xml文件修改内容,从而完成不同数据库的连接。

通过properties文件继续解耦

在配置文件中:

<!--        导入外部properties文件-->
        <context:property-placeholder location="classpath:jdbc.properties"/>

导入一个jdbc的properties,然后bean里的注入可以如下:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <property name="driverClass" value="${jdbc.driver}"/>
                <property name="jdbcUrl" value="${jdbc.url}"/>
                <property name="user" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
        </bean>

 测试效果一样。

注:

1.我们的url的内容可以看到是jdbc:mysql://localhost:3306/coms?useUnicode=true&amp;characterEncoding=utf-8

这一串的意思是:

useUnicode=true    允许用户自己设定数据库编码

characterEncoding=utf-8    字符集设定为utf-8,这样可以防止乱码,避免报错

因为有时候报错了,在检查了各个值发现没问题,逻辑结构都没问题时,可以检查是否是编码乱了。

2.我们这里使用的是单元测试跑代码,可以百度一下单元测试的坐标配置和使用方法。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值