jdbcTemplate之jdbc模板技术

1:为什么要使用jdbcTemplate?

在实际开发中使用jdbc技术太过复杂,为了减少代码冗余,操作简单

步骤一:创建实体类

package beans;

public class Book {
@Override
    public String toString() {
        return "Book [bid=" + bookid + ", bname=" + bname + ", bprice=" + bprice
                + "]";
    }
private int bookid;
private String bname;
private int bprice;
public int getBid() {
    return bookid;
}
public String getBname() {
    return bname;
}
public int getBprice() {
    return bprice;
}
public void setBid(int bid) {
    this.bookid = bid;
}
public void setBname(String bname) {
    this.bname = bname;
}
public void setBprice(int bprice) {
    this.bprice = bprice;
}

}

步骤二:创建接口以及实现类

package dao;

import java.util.List;

import beans.Book;

public interface IBook {
   public int addbook(Book book);
   public List<Book> getall();
}
package dao.impl;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

import util.MyRowMapped;
import beans.Book;
import dao.IBook;

public class IBookimpl extends JdbcDaoSupport implements IBook {

    @Override
    public int addbook(Book book) {
        String sql="insert into book(bid,bname,bprice) values(?,?,?)";
        int update = this.getJdbcTemplate().update(sql,book.getBid(),book.getBname(),book.getBprice());
        return update;
    }

    @Override
    public List<Book> getall() {
        String sql="select * from book";
        List<Book> query = this.getJdbcTemplate().query(sql,new MyRowMapped());
        return query;
    }

}

*如果要使用查询功能,需要调用jdbcTemplate的query方法,query方法的重载方法需要RowMapped类型的参数,不过RowMapped是接口类型。

所以要自己手动创建一个RowMapped接口的实现类。并重写其方法~!

package util;

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

import org.springframework.jdbc.core.RowMapper;

import beans.Book;

public class MyRowMapped implements RowMapper<Book>{

    //rs:單條記錄
    @Override
    public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
        Book book=new Book();
        book.setBid(rs.getInt("bid"));
        book.setBname(rs.getString("bname"));
        book.setBprice(rs.getInt("bprice"));
        return book;
    }
}

这里的resultSet对象代表单条记录,rowNum代表第几行的数据。所以不需要使用while循环来迭代。

步骤三:数据源的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        ">
        <bean id="bookDao" class="dao.impl.IBookimpl">
        <property name="dataSource" ref="DataSource"></property>
        </bean>
        <bean id="serviceDao" class="service.impl.IBookServiceimpl">
        <property name="dao" ref="bookDao"></property>
        </bean>
        <!-- 配置數據源 -->
        <!-- 1.spring內置 -->
        <!-- <bean id="DataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
        <property name="username" value="Y2162"></property>
        <property name="password" value="1"></property>
        </bean> -->
        <!-- dbcp方式配置  需要导入dbcp的包和pool的包 --> 
        <!-- <bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
        <property name="username" value="Y2162"></property>
        <property name="password" value="1"></property>
        </bean> -->
        <!-- c3p0方式配置 需要导入c3p0的包 -->
        <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${driverClass}"></property>
        <property name="jdbcUrl" value="${jdbcUrl}"></property>
        <property name="user" value="${user}"></property>
        <property name="password" value="${password}"></property>
        </bean>
        <!-- 註冊jdbc屬性 -->
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"></property>
        </bean>
        
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!-- 註冊jdbctemplate -->
        <bean id="myTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="DataSource"></property>
        </bean>
</beans>

步骤四:测试类代码

package test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import service.IBookService;
import beans.Book;

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        /*IBookService bean = (IBookService)ctx.getBean("serviceDao");
        Book book=new Book();
        book.setBid(3);
        book.setBname("深入spring");
        book.setBprice(100);
        System.out.println(bean.addbook(book));*/
        IBookService bean = (IBookService)ctx.getBean("serviceDao");
        List<Book> getall = bean.getall();
        for (Book book : getall) {
            System.out.println(book);
        }
    }
}
原文地址:https://www.cnblogs.com/chimingyang/p/6023332.html