1.認識 JDBCTemplate
??1.了解 JDBC
??學習使用 JDBCTempIate 之前,我們先來了解一下 JDBC( Java DataBase Connectivity ), 它是Java用于連接資料庫的規范,也就是用于執行資料庫SQL陳述句的Java API,從JDBC的名稱上看,它似乎沒有指定某種資料庫,可以猜想它可以為多種資料庫提供統一訪問的介面,這更符合程式設計的模式,實際上,它由一組用Java語言撰寫的類和介面組成,為大部分關系型資料庫提供訪問介面,
??JDBC需要每次進行資料庫連接,然后處理SQL陳述句、傳值、關閉資料庫,如果都由開發人員撰寫代碼,則很容易岀錯,可能會出現使用完成之后,資料庫連接忘記關閉的情況,這容易導致連接被占用而降低性能,為了減少這種可能的錯誤,減少開發人員的作業量,JDBCtemplate就被設計岀來了
??2.了解 JDBCTemplate
??JDBCTemplate=JDBC+Template的組合,是對JDBC的封裝,它更便于程式實作,替我們完成所有的JDBC底層作業,因此,對于資料庫的操作,再不需要每次都進行連接、打開、關閉了, 現在通過JDBCtemplate不需要進行全域修改,就可以輕松地應對開發人員常常要面對的增加、 洗掉、修改和查詢操作,
??JDBC和JDBCtemplate就像是倉庫管理員,負責從倉庫(資料庫)中存取物品,而后者不需 要"每次進入都開門,取完關門”,因為有電動門自動控制,下面通過具體使用JDBCTemplate的實體來理解它,
??實體: 用JDBCTemplate實作資料的增加、洗掉、修改和查詢
??(1)配置基礎依賴
??使用JDBCTemplate,則需要添加其Starter依賴,因為要操作資料庫,所以也需要配置資料庫(以MySQL為例)的連接依賴,見以下代碼:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
??添加完依賴后,還需要配置資料庫的連接資訊,這樣JDBCTemplate才能正常連接到資料庫, 在application.yml組態檔中配置資料庫的地址和用戶資訊,見以下代碼:“配置IP地址、編碼、時區和SSL”
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
username: root
password: 123456
??(2)新建物體類
??新建一個測驗物體類User,實作RowMapper類,重寫mapRow方法,以便物體欄位和資料表欄位映射(對應),映射是指把Java中設定的物體欄位和MySQL資料庫的欄位對應起來,因 為物體的id可以對應資料庫欄位的u_id,也可以對應id、name等,如果不重寫,則程式不知道如 何對應,具體代碼如下:
package com.itheima.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements RowMapper<User> {
private long id;
private String name;
private int age;
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
return user;
}
}
??(3)操作資料
??JDBCTemplate提供了以下操作資料的3個方法,
- execute:表示“執行”,用于直接執行SQL陳述句
- update:表示“更新",包括新增、修改、洗掉操作,
- query;表示查詢,
??下面使用這3個方法來實作資料的增加、洗掉、修改和查詢功能,
??1.創建資料表
??在使用JDBCTemplate之前,需要在控制器中注入JDBCTemplate,然后就可以通過 "execute"方法執行SQL操作了,見以下代碼:
package com.itheima;
import com.itheima.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserControllerTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void createUserTable() throws Exception {
String sql = "create table `user` (\n" +
"`id` int(10) not null auto_increment,\n" +
"`name` varchar(100) default null,\n" +
"`age` int(10) default null,\n" +
"primary key (`id`)\n" +
")engine=InnoDB auto_increment=1 default charset=utf8;\n" +
"\n";
jdbcTemplate.execute(sql);
}
}
??2.添加資料,
??添加資料可以通過“update”方法來執行,見以下代碼:
@Test
public void saveUserTest() throws Exception{
String sql = "insert into user (name,age) values('buretuzi','12')";
int rows = jdbcTemplate.update(sql);
System.out.println(rows);
}
??3.查詢資料
??以下代碼是根據name查詢單個記錄,執行下面sql字串里的SQL陳述句(SELECT * FROM user WHERE USERNAME = ? ),這里需要通過“query”方法來執行,
@Test
public void getUserByName() throws Exception {
String name = "buretuzi";
String sql = "select * from user where name = ?";
List<User> users = jdbcTemplate.query(sql,new User(),new Object[]{name});
for (User user : users) {
System.out.println(user);
}
}
??4.查詢所有記錄
??查詢所有記錄和查詢單個記錄一樣,也是執行“query”方法,區別是,SQL陳述句使用了查詢通配符見以下代碼:
@Test
public void list() throws Exception {
String sql = "select * from user";
List<User> users = jdbcTemplate.query(sql,new BeanPropertyRowMapper(User.class));
for (User user : users) {
System.out.println(user);
}
}
??5.修改資料,
??要進行資料的修改,可以使用“update”方法來實作,見以下代碼:
@Test
public void updateUserPassword() throws Exception {
Integer id = 1;
String password = "12331313";
String sql = "update user set name = ? where id = ?";
int rows = jdbcTemplate.update(sql,password,id);
System.out.println(rows);
}
??6.洗掉資料,
??這里洗掉資料并不用DELETE方法,而是通過“update”方法來執行SQL陳述句中的“DELETE” 方法,
@Test
public void deleteUserById() throws Exception {
String sql = "delete from user where id = ?";
int rows = jdbcTemplate.update(sql,1);
System.out.println(rows);
}
??至此,已經實作了簡單的增加、洗掉、修改和查詢功能,如果讀者對關系型資料庫的SQL陳述句不陌生,那么實作起來會非常簡單,因為JDBCTemplate實作起來比ORM煩瑣,所以大部分開發人員使用的是ORM (JPA和MyBatis),但是JDBCTemplate依然有市場,因為學習成本低, 會一些SQL陳述句就能上手使用,操作雖然麻煩,但很容易學會,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499837.html
標籤:其他
