使用JdbcTemplate訪問數據庫


參考源端:https://blog.csdn.net/liaodehong/article/details/76974827

今天用Spring Boot訪問一下數據庫,並且把數據返回到頁面中,進行增刪改查操作。主要介紹springboot通過jdbc訪問關系型MySQL,通過spring的JdbcTemplate去訪問。

創建mysql:

 

[sql]  view plain  copy
 
  1. CREATE TABLE `users` (  
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,  
  3.   `name` VARCHAR(20) NOT NULL,  
  4.   `age` INT,  
  5.   PRIMARY KEY (`id`)  
  6. ) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;  
  7. INSERT INTO `users` VALUES ('1', 'aaa', 18);  
  8. INSERT INTO `users` VALUES ('2', 'bbb', 19);  

數據源配置

在我們訪問數據庫的時候,需要先配置一個數據源,下面分別介紹一下幾種不同的數據庫配置方式。

首先,為了連接數據庫需要引入jdbc支持,在pom.xml中引入如下配置:

 

[java]  view plain  copy
 
  1. <dependency>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-jdbc</artifactId>  
  4. </dependency>  

連接生產數據源

以MySQL數據庫為例,先引入MySQL連接的依賴包,在pom.xml中加入:

[java]  view plain  copy
 
  1. <dependency>  
  2.     <groupId>mysql</groupId>  
  3.     <artifactId>mysql-connector-java</artifactId>  
  4.     <version>5.1.21</version>  
  5. </dependency>  
src/main/resources/application.properties中配置數據源信息
創建實體類

 

[java]  view plain  copy
 
  1. public class Users {  
  2.     private Integer id;  
  3.     private String name;  
  4.     private Integer age;  
創建service接口

 

[java]  view plain  copy
 
  1. public interface UserServices {  
  2.     int add(Users users);  
  3.   
  4.     int update(Users users);  
  5.   
  6.     int delete(int id);  
  7.   
  8.     Users findUsersById(int id);  
  9.   
  10.     List<Users> findAccountList();  
  11.   
  12. }  
創建dao實現

 

[java]  view plain  copy
 
  1. @Repository  
  2. public class UserDao implements UserServices{  
  3.     @Autowired  
  4.     <span style="white-space:pre;"> </span>private JdbcTemplate jdbcTemplate;  
  5.     @Autowired  
  6.     private NamedParameterJdbcTemplate namedParameterJdbcTemplate_love;  
  7.     @Override  
  8.     public int add(Users users) {  
  9.         return jdbcTemplate.update("insert into users(name, age) values(?, ?)",users.getName(),users.getAge());  
  10.     }  
  11.   
  12.     @Override  
  13.     public int update(Users users) {  
  14.         return jdbcTemplate.update(" update users set name=?,age=? where id=?",users.getName(),users.getAge(),users.getId());  
  15.     }  
  16.   
  17.     @Override  
  18.     public int delete(int id) {  
  19.         // TODO Auto-generated method stub  
  20.         return 0;  
  21.     }  
  22.   
  23.     @Override  
  24.     public Users findUsersById(int id) {  
  25.         // TODO Auto-generated method stub  
  26.         return null;  
  27.     }  
  28.   
  29.     @Override  
  30.     public List<Users> findAccountList() {  
  31.         return namedParameterJdbcTemplate_love.query("select *from users",new BeanPropertyRowMapper(Users.class));  
  32.     }  
  33.       
  34.   
  35. }  
創建controller

 

[java]  view plain  copy
 
  1. @RestController  
  2. @RequestMapping("/users")  
  3. public class UsersController {  
  4.     @Autowired  
  5.     UserServices userServices;  
  6.       
  7.     @RequestMapping(value = "/list",method = RequestMethod.GET)  
  8.     public  List<Users> getUsers(){  
  9.        return userServices.findAccountList();  
  10.     }  
  11.       
  12. }  

最后訪問一下,看頁面效果

 

Spring Boot中使用JdbcTemplate訪問數據庫

之前介紹了很多Web層的例子,包括構建RESTful API使用Thymeleaf模板引擎渲染Web視圖,但是這些內容還不足以構建一個動態的應用。通常我們做App也好,做Web應用也好,都需要內容,而內容通常存儲於各種類型的數據庫,服務端在接收到訪問請求之后需要訪問數據庫獲取並處理成展現給用戶使用的數據形式。

本文介紹在Spring Boot基礎下配置數據源和通過JdbcTemplate編寫數據訪問的示例。

數據源配置

在我們訪問數據庫的時候,需要先配置一個數據源,下面分別介紹一下幾種不同的數據庫配置方式。

首先,為了連接數據庫需要引入jdbc支持,在pom.xml中引入如下配置:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

嵌入式數據庫支持

嵌入式數據庫通常用於開發和測試環境,不推薦用於生產環境。Spring Boot提供自動配置的嵌入式數據庫有H2、HSQL、Derby,你不需要提供任何連接配置就能使用。

比如,我們可以在pom.xml中引入如下配置使用HSQL

<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>

連接生產數據源

以MySQL數據庫為例,先引入MySQL連接的依賴包,在pom.xml中加入:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>

src/main/resources/application.properties中配置數據源信息

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

連接JNDI數據源

當你將應用部署於應用服務器上的時候想讓數據源由應用服務器管理,那么可以使用如下配置方式引入JNDI數據源。

spring.datasource.jndi-name=java:jboss/datasources/customers

使用JdbcTemplate操作數據庫

Spring的JdbcTemplate是自動配置的,你可以直接使用@Autowired來注入到你自己的bean中來使用。

舉例:我們在創建User表,包含屬性nameage,下面來編寫數據訪問對象和單元測試用例。

  • 定義包含有插入、刪除、查詢的抽象接口UserService
public interface UserService {

/**
* 新增一個用戶
* @param name
* @param age
*/
void create(String name, Integer age);

/**
* 根據name刪除一個用戶高
* @param name
*/
void deleteByName(String name);

/**
* 獲取用戶總量
*/
Integer getAllUsers();

/**
* 刪除所有用戶
*/
void deleteAllUsers();

}
  • 通過JdbcTemplate實現UserService中定義的數據訪問操作
@Service
public class UserServiceImpl implements UserService {

@Autowired
private JdbcTemplate jdbcTemplate;

@Override
public void create(String name, Integer age) {
jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age);
}

@Override
public void deleteByName(String name) {
jdbcTemplate.update("delete from USER where NAME = ?", name);
}

@Override
public Integer getAllUsers() {
return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);
}

@Override
public void deleteAllUsers() {
jdbcTemplate.update("delete from USER");
}
}
  • 創建對UserService的單元測試用例,通過創建、刪除和查詢來驗證數據庫操作的正確性。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ApplicationTests {

@Autowired
private UserService userSerivce;

@Before
public void setUp() {
// 准備,清空user表
userSerivce.deleteAllUsers();
}

@Test
public void test() throws Exception {
// 插入5個用戶
userSerivce.create("a", 1);
userSerivce.create("b", 2);
userSerivce.create("c", 3);
userSerivce.create("d", 4);
userSerivce.create("e", 5);

// 查數據庫,應該有5個用戶
Assert.assertEquals(5, userSerivce.getAllUsers().intValue());

// 刪除兩個用戶
userSerivce.deleteByName("a");
userSerivce.deleteByName("e");

// 查數據庫,應該有5個用戶
Assert.assertEquals(3, userSerivce.getAllUsers().intValue());

}

}

上面介紹的JdbcTemplate只是最基本的幾個操作,更多其他數據訪問操作的使用請參考:JdbcTemplate API

通過上面這個簡單的例子,我們可以看到在Spring Boot下訪問數據庫的配置依然秉承了框架的初衷:簡單。我們只需要在pom.xml中加入數據庫依賴,再到application.properties中配置連接信息,不需要像Spring應用中創建JdbcTemplate的Bean,就可以直接在自己的對象中注入使用。

本文完整示例

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM