使用Spring JdbcTemplate實現數據庫操作,springjdbctemplate
一:Spring JdbcTemplate是干啥的呢?
JdbcTemplate是core包的核心類。它替我們完成了資源的創建以及釋放工作,從而簡化了我們對JDBC的使用。它還可以幫助我們避免一些常見的錯誤,比如忘記關閉數據庫連接。JdbcTemplate將完成JDBC核心處理流程,比如SQL語句的創建、執行,而把SQL語句的生成以及查詢結果的提取工作留給我們的應用代碼。它可以完成SQL查詢、更新以及調用存儲過程,可以對ResultSet進行遍歷並加以提取。
二:首先我們先了解的知識
1. Spring JDBC由4個部分組成,即core、datasource、object、support。
(1)core包:提供JDBC模板類,其中JdbcTemplate是core包的核心類。
(2)datesource包:提供簡化訪問JDBC數據源工具類,並提供一些DataSource簡單實現類,從而使這些DataSource獲取的連接能自動得到Spring事務管理的支持。
(3)object包:提供關系數據的對象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction等。
(4)support包:提供將JDBC異常轉換為DAO非檢查異常的轉化類和一些工具類。
2. JdbcTemplate主要提供以下五類方法:
-
execute方法:可以用於執行任何SQL語句,一般用於執行DDL語句;
-
update方法及batchUpdate方法:update方法用於執行新增、修改、刪除等語句;batchUpdate方法用於執行批處理相關語句;
-
query方法及queryForXXX方法:用於執行查詢相關語句;
-
call方法:用於執行存儲過程、函數相關語句。
想要了解大家可以去查API,這裡就不做多的解釋了
三:幾個使用經典案例

1.使用之前在保證Spring框架的jar包齊全的情況下引入
spring-jdbc-4.2.0.RELEASE.jar
2.Book.java

![]()
package cn.book.beans;
//Book實體類(Bean)
public class Book {
private Integer bookId;
private String bookName;
private Integer 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 Integer getBookPrice() {
return bookPrice;
}
public void setBookPrice(Integer bookPrice) {
this.bookPrice = bookPrice;
}
}
View Code
3.BookDao.java

![]()
package cn.book.dao;
//dao接口
import java.util.List;
import cn.book.beans.Book;
public interface BookDao {
/**
* 新增圖書
* @param book 圖書對象編號
* @return 受影響行數
*/
public int addBook(Book book);
/**
* 刪除圖書信息
* @param book 要刪除的圖書對象編號
* @return 受影響行數
*/
public int deleteBook(Book book);
/**
* 更改圖書信息
* @param book 要更改的圖書對象編號
* @return 受影響行數
*/
public int updateBook(Book book);
/**
* 查詢所有圖書集合
* @return 圖書集合
*/
public List<Book> booklist();
/**
* 根據編號查詢圖書名
* @param book 圖書對象編號
* @return 圖書名
*/
public String bookNameOfId(Book book);
/**
* 據編號查詢圖書對象
* @param book 圖書對象編號
* @return 圖書對象
*/
public Book bookOfId(Book book);
}
View Code
4.BookDaoImpl.java(繼承了JdbcDaoSupport類--使用getJdbcTemplate()方法)

![]()
package cn.book.dao.impl;
//dao接口實現類
import java.util.List;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import cn.book.beans.Book;
import cn.book.dao.BookDao;
import cn.book.util.MyRowMapper;
//繼承了JdbcDaoSupport類--使用getJdbcTemplate()方法
public class BookDaoImpl extends JdbcDaoSupport implements BookDao {
public int addBook(Book book) {
// 增刪改用update
String sql = "insert into book(bookname,bookPrice) values(?,?)";
int count = this.getJdbcTemplate().update(sql, book.getBookName(),
book.getBookPrice());
return count;
}
public List<Book> booklist() {
String sql = "select * from book";
List<Book> list = this.getJdbcTemplate().query(sql, new MyRowMapper());
return list;
}
public int updateBook(Book book) {
// 增刪改用update
String sql = "update book set bookname=?,bookPrice=? where bookId=?";
int count = this.getJdbcTemplate().update(sql, book.getBookName(),
book.getBookPrice(), book.getBookId());
return count;
}
public int deleteBook(Book book) {
// 增刪改用update
String sql = "delete from book where bookId=?";
int count = this.getJdbcTemplate().update(sql, book.getBookId());
return count;
}
public String bookNameOfId(Book book) {
String sql = "select * from book where bookId=?";
List<Book> list = this.getJdbcTemplate().query(sql, new MyRowMapper(),
book.getBookId());
return list.get(0).getBookName();
}
public Book bookOfId(Book book) {
String sql = "select * from book where bookId=?";
Book mybook = this.getJdbcTemplate().queryForObject(sql,
new BeanPropertyRowMapper<Book>(Book.class), book.getBookId());
return mybook;
}
}
View Code
5.BookService.java

![]()
package cn.book.service;
//service接口
import java.util.List;
import cn.book.beans.Book;
public interface BookService {
/**
* 新增圖書
* @param book 圖書對象
* @return 受影響行數
*/
public int addBook(Book book);
/**
* 刪除圖書信息
* @param book 要刪除的圖書對象
* @return 受影響行數
*/
public int deleteBook(Book book);
/**
* 更改圖書信息
* @param book 要更改的圖書對象
* @return 受影響行數
*/
public int updateBook(Book book);
/**
* 查詢所有圖書集合
* @return 圖書集合
*/
public List<Book> booklist();
/**
* 根據編號查詢圖書名
* @param book 圖書集合
* @return 圖書名
*/
public String bookNameOfId(Book book);
/**
* 據編號查詢圖書對象
* @param book 圖書對象編號
* @return 圖書對象
*/
public Book bookOfId(Book book);
}
View Code
6.BookServiceImpl.java

![]()
package cn.book.service.impl;
//service接口實現類
import java.util.List;
import cn.book.beans.Book;
import cn.book.dao.BookDao;
import cn.book.service.BookService;
public class BookServiceImpl implements BookService{
//植入dao接口
private BookDao dao;
//調用dao中的方法
public int addBook(Book book) {
// TODO Auto-generated method stub
return dao.addBook(book);
}
public List<Book> booklist() {
return dao.booklist();
}
public int updateBook(Book book) {
return dao.updateBook(book);
}
public int deleteBook(Book book) {
return dao.deleteBook(book);
}
public String bookNameOfId(Book book) {
// TODO Auto-generated method stub
return dao.bookNameOfId(book);
}
public Book bookOfId(Book book) {
// TODO Auto-generated method stub
return dao.bookOfId(book);
}
//set和get方法
public BookDao getDao() {
return dao;
}
public void setDao(BookDao dao) {
this.dao = dao;
}
}
View Code
7.MyRowMapper.java

![]()
package cn.book.util;
///RowMapper可以將數據中的每一行封裝成用戶定義的類,
//在數據庫查詢中,如果返回的類型是用戶自定義的類型則需要包裝,則可以包裝成你想要的類
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import cn.book.beans.Book;
public class MyRowMapper implements RowMapper<Book> {
/**
* 封裝成Book類並返回
* rs:代表單行數據
* rowNum:行號
*/
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book=new Book();
book.setBookId(rs.getInt("bookId"));
book.setBookName(rs.getString("bookName"));
book.setBookPrice(rs.getInt("bookPrice"));
return book;
}
}
View Code
8.applicationContext.xml(Spring配置文件)

![]()
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
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-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<bean id="dao" class="cn.book.dao.impl.BookDaoImpl">
<property name="jdbcTemplate" ref="myJDBCTemplate"></property>
</bean>
<bean id="service" class="cn.book.service.impl.BookServiceImpl">
<property name="dao" ref="dao"></property>
</bean>
<!-- 配置連接池 Spring 內置的 -->
<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>
<!-- *****注冊Jdbc屬性文件***** -->
<!-- 方式一: PropertyPlaceholderConfigurer -->
<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="myJDBCTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
View Code
9.jdbc.properties(連接池的配置信息)

![]()
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/mybook
jdbc.username=root
jdbc.password=1234
View Code
10.log4j.properties(日志配置文件)

![]()
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
View Code
11.MyTest.java(測試類)

![]()
package cn.book.test;
//測試類
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.book.beans.Book;
import cn.book.service.BookService;
public class MyTest {
/*
* 新增
*/
@Test
public void TestOne() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
BookService service = (BookService)ctx.getBean("service");
Book book=new Book();
book.setBookName("西游記");
book.setBookPrice(100);
int addBook = service.addBook(book);
if (addBook>0) {
System.out.println("新增成功!");
}
}
/*
* 刪除
*/
@Test
public void TestTwo() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
BookService service = (BookService)ctx.getBean("service");
Book book=new Book();
book.setBookId(3);
int count = service.deleteBook(book);
if (count>0) {
System.out.println("刪除成功");
}
}
/*
* 修改
*/
@Test
public void TestThree(){
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
BookService service = (BookService)ctx.getBean("service");
Book book=new Book();
book.setBookId(3);
book.setBookName("水浒傳");
book.setBookPrice(300);
int count = service.updateBook(book);
if (count>0) {
System.out.println("更改成功");
}
}
/*
* 查詢所有圖書信息
*/
@Test
public void TestFour() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
BookService service = (BookService)ctx.getBean("service");
List<Book> list = service.booklist();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getBookName());
}
}
/*
* 根據編號查詢圖書名
*/
@Test
public void bookNameOfId() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
BookService service = (BookService)ctx.getBean("service");
Book book=new Book();
book.setBookId(2);
String nameOfId = service.bookNameOfId(book);
System.out.println(nameOfId);
}
/*
* 根據編號查詢圖書名
*/
@Test
public void bookOfId() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
BookService service = (BookService)ctx.getBean("service");
Book book=new Book();
book.setBookId(2);
Book book2 = service.bookOfId(book);
System.out.println(book2.getClass());
}
}
View Code