1. 程式人生 > >使用JdbcTemplate訪問數據庫

使用JdbcTemplate訪問數據庫

mar jndi oot assert 1.2 rep 配置數據源 framework 引入

參考源端: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. int update(Users users);
  4. int delete(int id);
  5. Users findUsersById(int id);
  6. List<Users> findAccountList();
  7. }
創建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. @Override
  12. public int update(Users users) {
  13. return jdbcTemplate.update(" update users set name=?,age=? where id=?",users.getName(),users.getAge(),users.getId());
  14. }
  15. @Override
  16. public int delete(int id) {
  17. // TODO Auto-generated method stub
  18. return 0;
  19. }
  20. @Override
  21. public Users findUsersById(int id) {
  22. // TODO Auto-generated method stub
  23. return null;
  24. }
  25. @Override
  26. public List<Users> findAccountList() {
  27. return namedParameterJdbcTemplate_love.query("select *from users",new BeanPropertyRowMapper(Users.class));
  28. }
  29. }
創建controller

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

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

技術分享圖片

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,就可以直接在自己的對象中註入使用。

本文完整示例

使用JdbcTemplate訪問數據庫