文章目錄
- 1、前期準備作業
- 2、基于JdbcTemplate實作資料庫的添加、洗掉、更新操作
- 3、基于JdbcTemplate實作資料庫的查詢操作
- 4、基于JdbcTemplate實作資料庫的批量操作
- 5、上述所有資料庫操作的全部實作代碼
前言:Spring框架將Jdbc封裝到了JdbcTemplate類中,以此來方便實作對資料庫的連接操作
1、前期準備作業
-
安裝MySQL+Navicat(找到安裝教程,跟著操作即可)
-
匯入JdbcTemplate相應的jar包(如何匯入jar包,在博客Spring總述(一)中有介紹)

druid.jar下載地址:
https://repo1.maven.org/maven2/com/alibaba/druid/mysql-connection-java.jar包下載:
https://dev.mysql.com/downloads/connector/j/注:其他的jar包在Spring-libs檔案夾中都能找到 -
創建資料庫表,并在Spring組態檔中配置資料庫連接池(固定格式,只需要修改資料庫的表名,密碼,用戶名)
<!--資料庫連接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!--根據實際情況修改user_db-->
<property name="url" value="jdbc:mysql:///user_db"></property>
<!--根據實際情況修改value屬性值-->
<property name="username" value="root"></property>
<!--根據實際情況修改value屬性值-->
<property name="password" value="lll159357."></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
- 配置JdbcTemplate物件,并注入DataSource物件
<!--JdbcTempla物件-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
- 對應資料庫的屬性創建Book物體類以便后面進行資料庫操作的時候使用
public class Book {
private int userid;
private String username;
private String ustatua;
public int getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public String getUstatua() {
return ustatua;
}
public void setUserid(int userid) {
this.userid = userid;
}
public void setUsername(String username) {
this.username = username;
}
public void setUstatua(String ustatua) {
this.ustatua = ustatua;
}
@Override
public String toString() {
return "Book{" +
"userid=" + userid +
", username='" + username + '\'' +
", ustatua='" + ustatua + '\'' +
'}';
}
}
2、基于JdbcTemplate實作資料庫的添加、洗掉、更新操作
1、增刪改需要利用JdbcTemplate類呼叫update方法
public int update(String sql, @Nullable Object... args) throws DataAccessException {
return this.update(sql, this.newArgPreparedStatementSetter(args));
}
(1)第一個引數:SQL陳述句
(2)第二個引數:通過可變長引數 args 指明 SQL 陳述句中問號代表的引數
2、代碼演示
- 創建BookDao類,在BookDao類中注入jdbcTemplate物件,并呼叫JdbcTemplate物件里面update方法實作添加操作
@Repository
public class BookDao {
//注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
public void add(Book book) {
//添加操作的sql陳述句,sql陳述句的寫法在這里就不陳述了
String sql = "insert into t_book values(?,?,?)";
//第二個引數與上面的?一一對應
int update=jdbcTemplate.update(sql,book.getUserid(),book.getUsername(),book.getUstatua());
System.out.println("影響的資料庫表中資訊的行數為:"+update);
}
}
- 創建BookService類,在BookService類中呼叫資料庫中的add方法
@Service
public class BookService {
//注入dao
@Autowired
private BookDao bookDao;
public void addBook(Book book){
bookDao.add(book);
}
}
- 創建測驗類,進行測驗
public class testBook {
@Test
public void testJdbcTemplate(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService=context.getBean("bookService", BookService.class);
Book book = new Book();
book.setUserid(1);
book.setUsername("java");
book.setUstatua("a");
bookService.addBook(book);
}
}
- 測驗結果(Idea控制臺輸出展示,資料庫表資料展示)
影響的資料庫表中資訊的行數為:1

對于洗掉和修改操作,在此只書寫BookDao中的方法,其余呼叫程序與上面操作類似,不做過多冗余演示
//這里傳入的引數ID就是Book物體類中的ID屬性值
public void deleteBook(int id) {
String sql="delete from t_book where user_id=?";
int update = jdbcTemplate.update(sql,id);
System.out.println(update);
}
public void updateBook(Book book) {
String sql="update t_book set username=?,ustatua=? where user_id=?";
Object[] args={book.getUsername(),book.getUstatua(),book.getUserid()};
//第二個引數就是傳入的陣列,可以與上面的問號一一對應
int update=jdbcTemplate.update(sql,args);
System.out.println(update);
}
3、基于JdbcTemplate實作資料庫的查詢操作
1、查詢資料庫中表里面有多少條記錄,回傳某個值
此操作需要呼叫JdbcTemplate類中的queryForObject方法
public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException {
return this.queryForObject(sql, this.getSingleColumnRowMapper(requiredType));
}
(1)第一個引數:SQL陳述句
(2)第二個引數:設定回傳型別的class
2、查詢某個具體的物件
此操作同樣需要呼叫JdbcTemplate類中的queryForObject方法,但是方法傳入的引數型別不同
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException {
List<T> results = (List)this.query((String)sql, (Object[])args, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper, 1)));
return DataAccessUtils.nullableSingleResult(results);
}
(1)第一個引數:SQL陳述句
(2)第二個引數:RowMapper是介面,通過 RowMapper 介面實作類指明從資料庫查詢出來的引數應該如何封裝到指定的物件中
(3)第三個引數:通過可變長引數 args 指明 SQL 陳述句的引數
3、查詢資料庫表中所有物件(多行資料)
此操作需要呼叫JdbcTemplate類中的query方法
public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException {
return (List)result(this.query((String)sql, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper))));
}
(1)第一個引數:SQL陳述句
(2)第二個引數:RowMapper是介面,通過 RowMapper 介面實作類指明從資料庫查詢出來的引數應該如何封裝到指定的物件中
具體代碼不做演示,只展示一下BookDao類中的對上面三種方法的呼叫
//查詢資料庫表中資料的行數
public int selectCount() {
String sql="select count(*) from t_book";
Integer count=jdbcTemplate.queryForObject(sql,Integer.class);
return count;
}
//查詢單條資料
public Book findBookInfo(int id) {
String sql="select * from t_book where user_id=?";
Book book=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
return book;
}
//查詢資料庫表中的所有資料
public List<Book> findAllBook() {
String sql="select * from t_book";
List<Book> books=jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
return books;
}
4、基于JdbcTemplate實作資料庫的批量操作
此操作需要呼叫JdbcTemplate類中batchUpdate方法
public int[] batchUpdate(String sql, List<Object[]> batchArgs) throws DataAccessException {
return this.batchUpdate(sql, batchArgs, new int[0]);
}
(1)第一個引數:SQL陳述句
(2)第二個引數:指明批處理 SQL 陳述句的引數,是一個物件集合
具體代碼不做演示,只展示一下BookDao類中的對上面方法的呼叫
public void batchAddBook(List<Object[]> batchArgs) {
String sql="insert into t_book values(?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
5、上述所有資料庫操作的全部實作代碼
- Book類,物體類
public class Book {
private int userid;
private String username;
private String ustatua;
public int getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public String getUstatua() {
return ustatua;
}
public void setUserid(int userid) {
this.userid = userid;
}
public void setUsername(String username) {
this.username = username;
}
public void setUstatua(String ustatua) {
this.ustatua = ustatua;
}
@Override
public String toString() {
return "Book{" +
"userid=" + userid +
", username='" + username + '\'' +
", ustatua='" + ustatua + '\'' +
'}';
}
}
- BookDao類,實作資料庫操作
@Repository
public class BookDao {
//注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
public void add(Book book) {
String sql = "insert into t_book values(?,?,?)";
int update=jdbcTemplate.update(sql,book.getUserid(),book.getUsername(),book.getUstatua());
System.out.println("影響的資料庫表中資訊的行數為"+update);
}
public void deleteBook(int id) {
String sql="delete from t_book where user_id=?";
int update = jdbcTemplate.update(sql,id);
System.out.println(update);
}
public void updateBook(Book book) {
String sql="update t_book set username=?,ustatua=? where user_id=?";
Object[] args={book.getUsername(),book.getUstatua(),book.getUserid()};
int update=jdbcTemplate.update(sql,args);
System.out.println(update);
}
public int selectCount() {
String sql="select count(*) from t_book";
Integer count=jdbcTemplate.queryForObject(sql,Integer.class);
return count;
}
public Book findBookInfo(int id) {
String sql="select * from t_book where user_id=?";
Book book=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
return book;
}
public List<Book> findAllBook() {
String sql="select * from t_book";
//呼叫方法
List<Book> books=jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
return books;
}
public void batchAddBook(List<Object[]> batchArgs) {
String sql="insert into t_book values(?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
}
- BookService類,用于呼叫BookDao中的資料庫操作方法
@Service
public class BookService {
//注入dao
@Autowired
private BookDao bookDao;
public void addBook(Book book){
bookDao.add(book);
}
public void updateBook(Book book){
bookDao.updateBook(book);
}
public void deleteBook(int id){
bookDao.deleteBook(id);
}
public int findcount(){
return bookDao.selectCount();
}
public Book findOne(int id){
return bookDao.findBookInfo(id);
}
public List<Book> findAll(){
return bookDao.findAllBook();
}
public void batchAdd(List<Object[]> batchArgs){
bookDao.batchAddBook(batchArgs);
}
}
- testBook類,用于測驗
public class testBook {
@Test
public void testJdbcTemplate(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService=context.getBean("bookService", BookService.class);
//創建Book物體類
Book book = new Book();
//添加操作
book.setUserid(1);
book.setUsername("java");
book.setUstatua("a");
bookService.addBook(book);
//更新操作
book.setUserid(1);
book.setUsername("Spring5");
book.setUstatua("5");
bookService.updateBook(book);
//洗掉操作
bookService.deleteBook(1);
//查詢資料庫表中一共有多少條資料
System.out.println(bookService.findcount());
//單個物件查詢操作
Book book1=bookService.findOne(1);
//查詢資料庫表中的所有物件
List<Book> all=bookService.findAll();
//批量添加操作
List<Object[]> batchaArgs = new ArrayList<>();
Object[] o1 = {6,"java","良好"};
Object[] o2 = {7,"MySQL","良好"};
Object[] o3 = {8,"Python","良好"};
batchaArgs.add(o1);
batchaArgs.add(o2);
batchaArgs.add(o3);
bookService.batchAdd(batchaArgs);
}
}
- 創建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: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/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--開啟組件的掃描-->
<context:component-scan base-package="jdbc_dao,Jdbc_service"></context:component-scan>
<!--資料庫連接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!--根據實際情況修改user_db-->
<property name="url" value="jdbc:mysql:///user_db"></property>
<!--根據實際情況修改value屬性值-->
<property name="username" value="root"></property>
<!--根據實際情況修改value屬性值-->
<property name="password" value="lll159357."></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
<!--JdbcTempla物件-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
?????????????????????????????????????????????????
若對Spring基礎知識感興趣的可以關注一下博主,我會持續更新Spring基礎知識(一邊學習一邊記錄),一起進步,有錯誤的地方也可以在評論區指出來喔,謝謝大家啦!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/271559.html
標籤:java
