------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------
Spring自帶一個ORM持久化架構JdbcTemplate,他可以說是jdbc的加強版,但是對最細微的控制肯定做不到像jdbc那麼細,那麼性能高,他的出現是為了讓jdbc更加便于使用
下面我說一下我這篇部落格要幹嘛,
一,簡單的JdbcTemplate做出來的案例
二,除了自帶的Spring-jdbc,補充c3p0,druid,dbcp三種DataSource資料源
1.案例查詢圖書
1.1資料表:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuQWM0EjYwcjZ0cTZ3MTNxYTM4UzM5cTMlRmM5UGM0gTMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
接下來就是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>