1. 程式人生 > >Spring(十)Spring JDBCTemplate

Spring(十)Spring JDBCTemplate

cat -c 自己 username get nag odi 創建 HR

JdbcTemplate是Spring提供的一個請有力的模板類,他簡化了JDBC的操作,DateSource對象與末班JdbcTemplate對象均可以通過Bean的形式定義在配置文件中,充分發揮了依賴註入的威力!!!下面通過一個例子來使用一下JdbcTemplate

案例:查詢所有圖書

首先創建數據表

技術分享圖片

開始編寫代碼:

第一步:引入jar Spring-jdbc,引入這個jar之後會引帶這將事務的包也引進來

技術分享圖片
<!--jdbc-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>
技術分享圖片

第二步:創建實體類Book在entity包下

技術分享圖片
package demoJDBC.entity;

/**
 * Created by mycom on 2018/1/29.
 */
public class Book {
    private Integer bookID;
    private String  bookName;
    private String bookAuthor;
    private Integer bookPrice;

    @Override
    public String toString() {
        return "Book{" +
                "bookID=" + bookID +
                ", bookName=‘" + bookName + ‘\‘‘ +
                ", bookAuthor=‘" + bookAuthor + ‘\‘‘ +
                ", bookPrice=" + bookPrice +
                ‘}‘;
    }

    public Integer getBookID() {
        return bookID;
    }

    public void setBookID(Integer bookID) {
        this.bookID = bookID;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookAuthor() {
        return bookAuthor;
    }

    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor = bookAuthor;
    }

    public Integer getBookPrice() {
        return bookPrice;
    }

    public void setBookPrice(Integer bookPrice) {
        this.bookPrice = bookPrice;
    }
}
技術分享圖片

第三步:創建Dao層

接口:

技術分享圖片
package demoJDBC.dao;

import demoJDBC.entity.Book;

import java.util.List;

/**
 * Created by mycom on 2018/3/12.
 */
public interface IBookDao {
    public List<Book> findAll();

}
技術分享圖片

Dao實現類

技術分享圖片
package demoJDBC.dao;


import demoJDBC.entity.Book;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Created by mycom on 2018/3/12.
 */
public class BookDaoImpl extends JdbcDaoSupport implements IBookDao {
    public List<Book> findAll() {
        //sql
        String sql="select * from book";
        List<Book> list = this.getJdbcTemplate().query(sql, new RowMapper<Book>() {
            public Book mapRow(ResultSet rs, int i) throws SQLException {
                //創建一個Book對象
                Book book = new Book();
                book.setBookID(rs.getInt("bookID"));
                book.setBookName(rs.getString("bookName"));
/*                book.setBookAuthor(rs.getString("bookAuthor"));
                book.setBookPrice(rs.getInt("bookPrice"));*/
                return book;
            }
        });
        return list;
    }
}
技術分享圖片

第四步:創建service層

接口:

技術分享圖片
package demoJDBC.service;

import demoJDBC.entity.Book;

import java.util.List;

/**
 * Created by mycom on 2018/3/13.
 */
public interface IBookService {
    public List<Book> findAll();
}
技術分享圖片

接口的實現類

技術分享圖片
package demoJDBC.service;

import demoJDBC.dao.BookDaoImpl;
import demoJDBC.entity.Book;

import java.util.List;

/**
 * Created by mycom on 2018/3/13.
 */
public class BookServiceImpl implements IBookService {
    BookDaoImpl book;

    public BookDaoImpl getBook() {
        return book;
    }

    public void setBook(BookDaoImpl book) {
        this.book = book;
    }

    public List<Book> findAll() {
        return book.findAll();
    }
}
技術分享圖片

第五步:在resources下創建jdbc.properties文件

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

第六步:配置xml文件applicationContextJDBCTemplate.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:aop="http://www.springframework.org/schema/aop"
       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/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">

    <!--配置數據源-->
    <!--配置1-->
    <bean id="dateSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--&lt;!&ndash;配置2&ndash;&gt;
    <bean id="dateSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>-->
    <!--&lt;!&ndash;配置3&ndash;&gt;
    <bean id="dateSource" 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>-->
    <!--配置4-->
    <!--<bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>-->

    <!--識別到jdbc.properties-->
    <!--配置1-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!--配置2-->
    <!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"></property>
    </bean>-->
    <!--配置jdbcTemeplate-->
    <bean id="jdbcTemeplate1" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dateSource"></property>
    </bean>
    <!--配置Dao-->
    <bean id="bookDao" class="demoJDBC.dao.BookDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemeplate1"></property>
    </bean>
    <!--service id-->
    <bean id="bookService" class="demoJDBC.service.BookServiceImpl">
        <property name="book" ref="bookDao"></property>
    </bean>
</beans>
技術分享圖片

配置文件中配置數據源的方法有四種,配置JDBC的文件的有兩種,下面我在提出來分別寫一下

(1)配置數據源

  1)Spring內置的 DriverManagerDataSource(很少用)

<bean id="dateSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

  2)DBCP 它時apache下的(公司比較常用),這種方式需要引入jar

技術分享圖片
<!--dbcp2-->
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1.1</version>
        </dependency>

或者是

<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

版本問題的話就自己更換版本吧

技術分享圖片
<bean id="dateSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

  3)c3p0 (公司比較常用),這種方式需要引入jar

技術分享圖片
<!--c3p0-->
        <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
技術分享圖片
<bean id="dateSource" 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>

  4)阿裏巴巴的 druid

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
<bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

(2)配置JDBC的兩種方法

<!--配置2-->
    <!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"></property>
    </bean>-->
    <!--識別到jdbc.properties-->
    <!--配置1-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

最後一步:編寫測試方法

技術分享圖片
import demo03.ISomeService;
import demoJDBC.entity.Book;
import demoJDBC.service.IBookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

/**
 * Created by mycom on 2018/3/11.
 */
public class TestDemoJDBC {

    @Test
    public void t1(){
        //獲取對象
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextJDBCTemplate.xml");
        //調用方法,這裏要返回類
        IBookService bookService =(IBookService) context.getBean("bookService");
        List<Book> all = bookService.findAll();
        for (Book book:all) {
            System.out.println(book.getBookName());
        }
    }
}

Spring(十)Spring JDBCTemplate