Spring的JDBC模板的使用

1 Spring的JDBC模板的介绍

  • Spring是EE开发的一站式的框架,有EE开发的每层的解决方案。Spring对持久层也提供了解决方案:ORM模块和JDBC的模板
  • Spring提供了很多的模板用于简化开发:

 2 Spring的JDBC模板入门

2.1 创建项目,引入jar包

2.2 创建数据库和表

create database springjdbcdb;
use springjdbcdb;
create table account(
	id int primary key auto_increment,
	name varchar(20),
	money double
);

2.3 传统的JDBCTemplate开发简单示例

package com.itykd.spring.jdbc;

import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class JDBCDemo {
	@Test
	public void demo() {
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///springjdbcdb");
		dataSource.setUsername("root");
		dataSource.setPassword("NULIFENDOU520");
		//创建JDBC模板
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
		jdbcTemplate.update("insert into account values(null,?,?)","ykd",10000d);
	}

}
  • 由以上可知:JDBCTemplate与dataSource之间有依赖关系:JDBCTemplate依赖于dataSource,因此下面介绍另外一种:利用Spring创建

2.4 利用Spring创建连接池和模板开发

  • 在配置文件中配置Spring默认的连接池和jdbc模板
	<!-- 配置Spring内置的数据库连接池 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	    <property name="url" value="jdbc:mysql:///springjdbcdb"/>
	    <property name="username" value="root"/>
	    <property name="password" value="NULIFENDOU520"/>	
	</bean>
	<!-- 配置Spring的JDBC模板 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	    <property name="dataSource" ref="dataSource"/>	
	</bean>
  •  测试类(用到了Spring整合Junit和注解,因此要把对应的包引进去)
package com.itykd.spring.jdbc;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JDBCDemo {

	@Resource(name="jdbcTemplate")
	private JdbcTemplate jdbcTemplate;

	@Test
	public void demo() {
		jdbcTemplate.update("insert into account values(null,?,?)","kobe",1000d);
		
	}

上述使用的是Spring默认的连接池,也可以换成其他开源你的连接池,比如C3P0和DBCP,具体如下:

3 其他开源连接池的使用

3.1 DBCP的使用

  • 引入jar包

            com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar

            com.springsource.org.apache.commons.pool-1.5.3.jar

  • 配置DBCP连接池
	<!-- 配置DBCP数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	    <property name="url" value="jdbc:mysql:///springjdbcdb"/>
	    <property name="username" value="root"/>
	    <property name="password" value="NULIFENDOU520"/>	
	</bean>
	<!-- 配置Spring的JDBC模板 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	    <property name="dataSource" ref="dataSource"/>	
	</bean>

3.2 C3P0的使用

  • 引入jar包

              com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar

  • 配置C3P0连接池
    <!-- 配置C3P0连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
	    <property name="jdbcurl" value="jdbc:mysql:///springjdbcdb"/>
	    <property name="user" value="root"/>
	    <property name="password" value="NULIFENDOU520"/>		
	</bean>
	<!-- 配置Spring的JDBC模板 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	    <property name="dataSource" ref="dataSource"/>	
	</bean>

4 在Spring的配置文件中引入属性文件

 通常数据库的文件不会直接配置到Spring中,而是会单独管理,这样也易于维护

4.1 定义一个属性文件(jdbc.properties)

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///springjdbcdb
jdbc.username=root
jdbc.password=NULIFENDOU520

4.2 在Spring的配置文件中引入属性文件

  • 方式一(通过一个bean标签引入,用的比较少)

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	    <property name="location" value="classpath:jdbc.properties" />	
    </bean>
  • 方式二(用context标签引入)
	<!-- 通过context标签引入 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>

4.3 修改连接池的配置(以C3P0为例)

修改<property>标签中的value属性

		<!-- 配置C3P0连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	    <property name="driverClass" value="${jdbc.driverClass}"/>
	    <property name="jdbcurl" value="${jdbc.url}"/>
	    <property name="user" value="${jdbc.username}"/>
	    <property name="password" value="${jdbc.password}"/>		
	</bean>

5 使用JDBC模板进行CRUD操作

5.1 保存

	public void insertDemo() {
		jdbcTemplate.update("insert into account values(null,?,?)","kobe",1000d);
	}

5.2 修改

	public void updateDemo() {
		jdbcTemplate.update("update account set name=?,money=? where id=?","kobe",5000d,2);
	}

5.3 删除

	public void deleteDemo() {
		jdbcTemplate.update("delete from account where id=?",2);
	}

5.4 查询

5.4.1 查询某个属性

	public void findDemo() {
		//查询id=2的名字
		String name = jdbcTemplate.queryForObject("select name from account where id=?", String.class,2);
		//统计查询
		Long count = jdbcTemplate.queryForObject("select count(*) from account", Long.class);
	}

5.4.2 查询返回对象或集合

  • 提供一个Account类
package com.itykd.domain;

public class Account {
	
	private Integer id;
	private String name;
	private Double money;
	public void setId(Integer id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setMoney(Double money) {
		this.money = money;
	}

}
  • 实现一个RowMapper接口
package com.itykd.domain;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

public class MyRowMapper implements RowMapper<Account>{

	@Override
	public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
		Account account = new Account();
		account.setId(rs.getInt("id"));
		account.setName(rs.getString("name"));
		account.setMoney(rs.getDouble("money"));		
		return account;
	}

}
  • 完成数据封装
	public void findObjectDemo() {
		List<Account>list=jdbcTemplate.query("select * from account", new MyRowMapper());
		System.out.println(list.size());		
	}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值