1. 程式人生 > >SSM-Spring-19:Spring中JdbcTemplate

SSM-Spring-19:Spring中JdbcTemplate

beans 接下來 連接數 repo 替換 類的方法 數據源 img println

------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------

Spring自帶一個ORM持久化框架JdbcTemplate,他可以說是jdbc的加強版,但是對最細微的控制肯定做不到像jdbc那麽細,那麽性能高,他的出現是為了讓jdbc更加便於使用

下面我說一下我這篇博客要幹嘛,

一,簡單的JdbcTemplate做出來的案例

二,除了自帶的Spring-jdbc,補充c3p0,druid,dbcp三種DataSource數據源

1.案例查詢圖書

  1.1數據表:

    技術分享圖片

  接下來就是java程序開發工具idea做的事了

  1.2引入依賴jar包:

    以前的jar包外,還需要spring-jdbc和jdbc的mysql的jar

        <!--spring 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> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency>

  1.3分層開發開始,先是entity實體類層

    Book

package cn.dawn.day21jdbctemplate.entity;

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 Book() {
    }

    public Integer getBookID() {
        return this.bookID;
    }

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

    public String getBookName() {
        return this.bookName;
    }

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

    public String getBookAuthor() {
        return this.bookAuthor;
    }

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

    public Integer getBookPrice() {
        return this.bookPrice;
    }

    public void setBookPrice(Integer bookPrice) {
        this.bookPrice = bookPrice;
    }
}

  1.3dao層

    一個接口IBookDAO

package cn.dawn.day21jdbctemplate.dao;

import cn.dawn.day21jdbctemplate.entity.Book;

import java.util.List;

/**
 * Created by Dawn on 2018/3/13.
 */
public interface IBookDAO {
    public List<Book> findAllBooks();
}

    它的實現類BookDAOImpl

package cn.dawn.day21jdbctemplate.dao;

import cn.dawn.day21jdbctemplate.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 Dawn on 2018/3/13.
 */
public class BookDAOImpl extends JdbcDaoSupport implements IBookDAO {
    public List<Book> findAllBooks() {
        String sql="select * from book";
        List<Book> lists = this.getJdbcTemplate().query(sql, new RowMapper<Book>() {
            public Book mapRow(ResultSet rs, int i) throws SQLException {
                Book book=new Book();
                book.setBookAuthor(rs.getString("bookAuthor"));
                book.setBookID(rs.getInt("bookId"));
                book.setBookName(rs.getString("bookName"));
                book.setBookPrice(rs.getInt("bookPrice"));
                return book;
            }
        });
        return lists;
    }
}

    這兒有幾點要說的,他實現了JdbcTemplate,是為了一會給這個類註入數據源等操作,子類繼承了父類的方法屬性,所以這個類才能和數據庫打交道

    ResultSet就是數據庫的單行記錄,i就是此單行記錄是符合你查出來的中的第幾條,先把案例配通

  1.4service層

    一個接口IBookService

package cn.dawn.day21jdbctemplate.service;

import cn.dawn.day21jdbctemplate.entity.Book;

import java.util.List;

/**
 * Created by Dawn on 2018/3/13.
 */
public interface IBookService {
    public List<Book> findAllBooks();
}

    它的實現類BookService

package cn.dawn.day21jdbctemplate.service;

import cn.dawn.day21jdbctemplate.dao.IBookDAO;
import cn.dawn.day21jdbctemplate.entity.Book;

import java.util.List;

/**
 * Created by Dawn on 2018/3/13.
 */
public class BookServiceImpl implements IBookService{
    private IBookDAO dao;

    public List<Book> findAllBooks() {
        return dao.findAllBooks();
    }

    public IBookDAO getDao() {
        return dao;
    }

    public void setDao(IBookDAO dao) {
        this.dao = dao;
    }
}

    dao層的接口聲明成成員變量,並且提供get/set方法,一會要註入進來dao層的實現

  1.5我做了個一步到位的操作,將Driver,url,username,pwd這些jdbc連接數據庫的條件提到了propertiess文件中

    jdbc.properties

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

  1.6就是書寫大配置文件了

    起名隨意,一會單測方法中能合的上就行,以.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:p="http://www.springframework.org/schema/p" 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">

    <!--配置jdbc。properties-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

    <!--自帶的持久化框架的數據源-->
    <bean id="dataSource" 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>
    
    
    <!--配置jdbctemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--dao-->
    <bean id="bookDao" class="cn.dawn.day21jdbctemplate.dao.BookDAOImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

    <!--service-->
    <bean id="bookService" class="cn.dawn.day21jdbctemplate.service.BookServiceImpl">
        <property name="dao" ref="bookDao"></property>
    </bean>
</beans>

  1.7書寫測試方法

package cn.dawn.day21JdbcTemplate;


import cn.dawn.day21jdbctemplate.entity.Book;
import cn.dawn.day21jdbctemplate.service.IBookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

/**
 * Created by Dawn on 2018/3/3.
 */
public class test20180313 {
    @Test
    /*aop代理工廠bean異常增強*/
    public void t01(){
        ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext-day21JdbcTemplate.xml");
        IBookService service = (IBookService) context.getBean("bookService");
        List<Book> allBooks = service.findAllBooks();
        for (Book item:allBooks) {
            System.out.println(item);
        }

    }
}

  

案例完

下面說說另外三種數據源的配置,不同公司使用的不是完全一樣,所以我提及幾種,使用方法,在上方的案例中只要引入jar包,把xml中dateSource那個bean替換掉就好

  1.dbcp

    1.1引入jar包

        <!-- 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>

    1.2xml文件中的dataSource

    <bean id="dataSource" 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>

  2.c3p0

    2.1jar包

        <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

    2.2xml中

     <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>

  3.druid  這個是中國阿裏巴巴開發的

    3.1jar包

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>

    3.2xml文件中

    <!--阿裏的Druid-->
    <bean id="dataSource" 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>

SSM-Spring-19:Spring中JdbcTemplate