程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 使用Spring JdbcTemplate實現數據庫操作,springjdbctemplate

使用Spring JdbcTemplate實現數據庫操作,springjdbctemplate

編輯:JAVA綜合教程

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved