Spring JDBC开发

Spring JDBC开发

@(Spring)[spring jdbc]

Spring的JDBC模板的概述

Spring是一站式框架有EE开发的每一层的解决方案,像持久层Spring提供了JDBC的模板和ORM模块用于整合其他的持久层框架。

什么是JDBC的模板

JDBC的模板是Spring提供的用于简化JDBC开发的一个技术。类似于DBUtils。
这里写图片描述
PS:在Spring4中已经移除对IBatis的支持,如果需要使用,请使用3版本的orm包

Spring的JDBC模板入门

创建web项目,引入jar包

这里写图片描述

创建表

create table account(
    id int primary key AUTO_INCREMENT,
    name varchar(20),
    money double
);

编写测试

package com.pc;

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

/**
 * JDBC测试
 * 
 * @author Switch
 * @data 2016年11月25日
 * @version V1.0
 */
public class JDBCTest {
    /**
     * 测试Spring JDBC模板
     */
    @Test
    public void testSpringJDBC() {
        // 创建连接池
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");

        // 创建Spring JDBC模板
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        jdbcTemplate.update("insert into account(id, name, money) values(?,?,?)", null, "Switch", 50000d);
    }
}

Spring管理连接池和模板

Spring管理内置连接池

<!-- Spring配置内置连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root" />
    <property name="password" value="123456"/>
</bean>

Spring管理Spring JDBC模板

<!-- Spring配置Spring JDBC模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

Spring管理DBCP连接池

  • 引入DBCP连接池jar包
    这里写图片描述
  • 在Spring中配置DBCP的连接池
<!-- Spring配置dbcp连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/test" />
    <property name="username" value="root" />
    <property name="password" value="123456" />
</bean>

Spring管理C3P0连接池

  • 引入c3p0连接池的jar包
    这里写图片描述
  • 在Spring中配置C3P0连接池
<!-- spring配置c3p0连接池 -->
<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/test" />
    <property name="user" value="root" />
    <property name="password" value="123456" />
</bean>

将连接数据库信息提取到属性文件中

  • 提供属性文件db.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456
  • 在Spring的配置文件中引入外部属性文件

    • 通过<context>标签引入
      • <!-- 引入外部属性文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
    • 通过<bean>标签引入
      • <!-- 引入外部属性文件 -->
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:db.properties"/>
        </bean>
  • 使用属性文件中的key配置连接池

<!-- spring配置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>

Spring的JDBC的模板的API(完成CRUD)

插入、更新、删除的方法

  • int update(String sql,Object… args);
package com.pc;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * JDBC测试
 * 
 * @author Switch
 * @data 2016年11月25日
 * @version V1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JDBCTest {
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;
    @Test
    // insert语句
    public void insert() {
        jdbcTemplate.update("insert into account(id, name, money) values(?,?,?)", null, "Kity", 10000d);
    }

    @Test
    // update语句
    public void update() {
        jdbcTemplate.update("update account set name = ?, money = ? where id = ?", "Tom", 20000d, 2);
    }

    @Test
    // delete语句
    public void delete() {
        jdbcTemplate.update("delete from account where id = ?", 2);
    }
}

查询的方法

  • T queryForObject(String sql,Class<T> c,Object… args);
  • T queryForObject(String sql,RowMapper<T> rowMapper,Object… args);
  • List<T> query(String sql,RowMapper rowMapper,Object… args);
package com.pc;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * JDBC测试
 * 
 * @author Switch
 * @data 2016年11月25日
 * @version V1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JDBCTest {
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;
    @Test
    // 查询单行单列
    public void queryForObject1() {
        String name = jdbcTemplate.queryForObject("select name from account where id = ?", String.class, 1);
        System.out.println(name);
    }

    @Test
    // 查询一行,封装到对应的对象
    public void queryForObject2() {
        Account account = jdbcTemplate.queryForObject("select * from account where id = ?", new AccountRowMapper(), 1);
        System.out.println(account);
    }

    @Test
    // 查询多行,封装到对应对象集合中
    public void queryForList1() {
        List<Account> accounts = jdbcTemplate.query("select * from account", new AccountRowMapper());
        System.out.println(accounts);
    }
}
package com.pc;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
/**
 * 账号类行映射
 * 
 * @author Switch
 * @data 2016年11月25日
 * @version V1.0
 */
public class AccountRowMapper 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;
    }
}

案例

GitHub:SpringDataTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值