SSM-Spring-19:Spring中JdbcTemplate
------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------
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