spring中JdbcTemplate详解编程语言

Spring 为了简化 各种持久化 开发,内部提供了很多模板工具类类
JDBC —org.springframework.jdbc.core.JdbcTemplate
Hibernate — org.springframework.orm.hibernate3.HibernateTemplate
MyBatis — org.springframework.orm.ibatis.SqlMapClientTemplat

Spring JDBC是Spring提供的持久层技术
简化JDBC API开发,使用上和Apache公司的DBUtils框架非常类似
导入必要jar包到工程目录
导入Spring核心开发包到创建工程
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
还需要下载commons-logging日志包
commons-logging-1.1.1.jar
导入JDBC模板开发包
spring-jdbc-3.2.0.RELEASE.jar
spring-tx-3.2.0.RELEASE.jar

数据库驱动
mysql-connector-java-5.0.8-bin.jar

代码示例:
不使用配置文件 ,操作数据库

package com.my.jdbc; 
 
import org.junit.Test; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
 
public class JdbcTemplateTest { 
 
    @Test 
    public void demo1(){ 
        // 1、 先获得数据库连接池 对象  
        DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
        // 获得连接,必须需要jdbc 四个基本参数  
        dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
        dataSource.setUrl("jdbc:mysql:///spring_demo"); 
        dataSource.setUsername("root"); 
        dataSource.setPassword("1234"); 
 
        // 2、通过连接池,构造JdbcTemplate 对象 
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 
 
        // 3、使用JdbcTemplate操作数据库  
        jdbcTemplate.execute("create table user(id int, name varchar(20))"); 
    } 
 
} 

通过配置配置数据库连接池的示例:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:context="http://www.springframework.org/schema/context" 
       xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
 
    <!-- 配置数据库连接池  --> 
    <!-- spring 内置连接池 --> 
<!--    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> --> 
<!--        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> --> 
<!--        <property name="url" value="jdbc:mysql:///spring_demo"></property> --> 
<!--        <property name="username" value="root"></property> --> 
<!--        <property name="password" value="1234"></property> --> 
<!--    </bean> --> 
 
    <!-- DBCP连接池  --> 
<!--    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> --> 
<!--        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> --> 
<!--        <property name="url" value="jdbc:mysql:///spring_demo"></property> --> 
<!--        <property name="username" value="root"></property> --> 
<!--        <property name="password" value="1234"></property> --> 
<!--    </bean> --> 
 
    <!-- 引入外部properties 属性文件  --> 
    <context:property-placeholder location="classpath:jdbc.properties"/>     
 
    <!-- C3P0连接池  --> 
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
        <property name="driverClass" value="${jdbc.driver}"></property> 
        <property name="jdbcUrl" value="${jdbc.url}"></property> 
        <property name="user" value="${jdbc.username}"></property> 
        <property name="password" value="${jdbc.password}"></property> 
    </bean> 
 
    <!-- 将连接池交给JdbcTemplate 构造模板对象 --> 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
        <property name="dataSource" ref="dataSource"></property> 
    </bean> 
 
</beans>

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql:///spring_demo 
jdbc.username=root 
jdbc.password=1234 

测试类JdbcTemplateTest2.java

package com.my.jdbc; 
 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:applicationContext.xml") 
public class JdbcTemplateTest2 { 
 
    @Autowired 
    @Qualifier("jdbcTemplate") 
    private JdbcTemplate jdbcTemplate ; 
 
    @Test 
    public void demo(){ 
        jdbcTemplate.execute("create table users0(id int)"); 
    } 
 
} 

使用JdbcTemplate 编写DAO实现数据CURD
代码示例:
Customer.java

package com.my.jdbc; 
 
public class Customer { 
 
    private int id; 
    private String name;  
    private int age; 
 
    public int getId() { 
        return id; 
    } 
    public void setId(int id) { 
        this.id = id; 
    } 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public int getAge() { 
        return age; 
    } 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
} 

sql语句

CREATE TABLE `customer` ( 
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `name` varchar(20) DEFAULT NULL, 
  `age` int(11) DEFAULT NULL, 
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CustomerDao.java

package com.my.jdbc; 
 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.List; 
 
import org.springframework.jdbc.core.RowMapper; 
import org.springframework.jdbc.core.support.JdbcDaoSupport; 
 
//操作customer表进行增删改查 
public class CustomerDao extends JdbcDaoSupport{ // 继承JdbcTemplate注入方法 
 
    //增加客户 
    public void save(Customer customer){ 
        String sql ="insert into customer values(null,?,?)"; 
        this.getJdbcTemplate().update(sql, customer.getName(),customer.getAge()); 
    } 
 
    //根据id删除 
    public void delete(Customer customer){ 
        String sql = "delete from customer where id = ?"; 
        this.getJdbcTemplate().update(sql, customer.getId()); 
    } 
 
    //根据id 修改其它所有字段 
    public void update(Customer customer){ 
        String sql = "update customer set name=? , age=? where id =?"; 
        this.getJdbcTemplate().update(sql, customer.getName() , customer.getAge(), customer.getId()); 
    } 
 
    // 根据id 查找 age 
    public int findAgeById(int id){ 
        String sql = "select age from customer where id = ?"; 
        return this.getJdbcTemplate().queryForInt(sql , id); 
    } 
    // 根据id 查询name 
    public String findNameById(int id){ 
        String sql = "select name from customer where id = ?"; 
        return this.getJdbcTemplate().queryForObject(sql, String.class, id); 
    } 
 
    // 查询所有客户信息 
    public List<Customer> findAll(){ 
        String sql = "select * from customer"; 
        return this.getJdbcTemplate().query(sql, new CustomerRowMapper()); 
    } 
 
    // 根据id 查询某个客户信息 
    public Customer findById(int id){ 
        String sql = "select * from customer where id = ?"; 
        return this.getJdbcTemplate().queryForObject(sql, new CustomerRowMapper(), id); 
    } 
 
    private class CustomerRowMapper implements RowMapper<Customer> { 
 
        @Override 
        public Customer mapRow(ResultSet rs, int rowNum) throws SQLException { 
            Customer customer = new Customer();  
            customer.setId(rs.getInt("id")); 
            customer.setName(rs.getString("name")); 
            customer.setAge(rs.getInt("age")); 
            return customer; 
        } 
 
    } 
 
 
} 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:context="http://www.springframework.org/schema/context" 
       xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
 
    <context:property-placeholder location="classpath:jdbc.properties"/> 
 
    <!-- C3P0连接池  --> 
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
        <property name="driverClass" value="${jdbc.driver}"></property> 
        <property name="jdbcUrl" value="${jdbc.url}"></property> 
        <property name="user" value="${jdbc.username}"></property> 
        <property name="password" value="${jdbc.password}"></property> 
    </bean> 
 
    <!-- 将连接池交给JdbcTemplate 构造模板对象 --> 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
        <property name="dataSource" ref="dataSource"></property> 
    </bean> 
 
    <!-- 将JdbcTemplate注入给 customerDao --> 
    <bean id="customerDao" class="com.my.jdbc.CustomerDao"> 
        <property name="jdbcTemplate" ref="jdbcTemplate"></property> 
    </bean> 
 
</beans>

测试类TestCustmerDao.java

package com.my.jdbc; 
 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:applicationContext.xml") 
public class TestCustmerDao { 
 
    @Autowired 
    @Qualifier("customerDao") 
    private CustomerDao customerDao ; 
 
    @Test 
    // 测试数据保存 
    public void testSave(){ 
        Customer customer = new Customer(); 
        customer.setName("rose"); 
        customer.setAge(18); 
 
        customerDao.save(customer); 
    } 
 
    @Test 
    // 测试数据修改 
    public void testUpdate(){ 
        Customer customer = new Customer(); 
        customer.setId(3); 
        customer.setName("jack"); 
        customer.setAge(19); 
 
        customerDao.update(customer); 
    } 
 
    @Test 
    // 测试数据删除  
    public void testDelete(){ 
        Customer customer = new Customer(); 
        customer.setId(1); 
 
        customerDao.delete(customer); 
    } 
 
    @Test 
    // 测试 简单查询 
    public void testFindAgeNameById(){ 
        System.out.println(customerDao.findAgeById(2)); 
        System.out.println(customerDao.findNameById(2)); 
    } 
 
    @Test 
    // 测试复杂查询 
    public void testFindAll(){ 
        System.out.println(customerDao.findAll()); 
        System.out.println(customerDao.findById(2)); 
    } 
 
} 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12094.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论