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&useSSL=false&serverTimezone=GMT%2B8
注意在xml文件中&需要使用转义字符&