Spring學習筆記--Spring JDBC

JDBC是Spring數據訪問/集成中的最重要模塊。


1. Spring JDBC的配置

Spring JDBC模塊主要由4個包組成:

包名 說明
core 包含了JDBC的核心功能,例如JdbcTemplate等
dataSource 訪問數據源的實用工具類
object 以面向對象的方式訪問數據庫
support 包含了core和object包的支持類

2. 使用Spring JdbcTemplate方法

針對數據庫的操作,Spring框架提供了JdbcTemplate類,該類是Spring框架數據抽象層的基礎,可以說,JdbcTemplate類是Spring JDBC的核心類。

2.1 execute()

  • 使用的數據庫是Mysql(版本爲8.0的),創建一個名Spring的數據庫
  • 創建web項目,導入jar包
    在這裏插入圖片描述
  • 創建包(com.xhh.jdbc)創建配置文件applicationContext.xml,在該文件中配置id爲dataSource的數據源Bean和id爲jdbcTemplate的JDBC模板Bean,並將數據源注入到JDBC模板中。
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	
	<!-- 1 配置數據源,熟練使用 alt + / 有提示 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<!-- 數據庫驅動 -->
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
		<!-- 連接數據庫的url  -->
		<property name="url" value="jdbc:mysql://localhost:3306/spring?serverTimezone=UTC"></property>
		<!-- 連接數據庫的用戶名  -->
		<property name="username" value="root"></property>
		<!-- 連接數據庫的密碼  -->
		<property name="password" value="025431"></property>
		
	</bean>
	<!-- 2 配置JDBC模板  -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

</beans>

上述代碼使用到了設值注入,Spring的依賴注入(DI)。在前兩篇已舉例。

  • 快速找到org.springframework.jdbc.datasource.DriverManagerDataSource並複製
    在這裏插入圖片描述

  • 忘記<property name="" ></property>中應該填什麼值?,ctrl + 鼠標左鍵進入源碼中查看需要的setter
    在這裏插入圖片描述
    配置JDBC模板類似。

  • 在包中創建類JdbcTemplateTest
    使用單元測試

public class JdbcTemplateTest {
	@Test
	public void mainTest() {
		// 加載配置文件
		ApplicationContext applicationContext = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//獲取JdbcTemplate實例
		JdbcTemplate jdTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
		//使用execute()方法執行SQL語句,創建用戶賬號管理表account
		jdTemplate.execute("create table account("
				+ "id int primary key auto_increment,"
				+ "username varchar(50),"
				+ "balance double)");
		System.out.println("賬號表account創建成功");
	}
	
}

快捷鍵alt + shift + x + t 運行。

2.2 update(),query()

  • 在包中創建Account類,定義上述創建表中的屬性,使用alt + s + r 快速創建getter/setter。

Account.java

package com.xhh.jdbc;

public class Account {

	private int id;
	private String username;
	private double balance;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
	@Override
	public String toString() {
		return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";
	}
	
	
	
}

  • 創建接口AccountDao,定義增刪查改方法。

AccountDao.java

package com.xhh.jdbc;

import java.util.List;

public interface AccountDao {

	// 添加用戶
	public int addAccount(Account account);
	
	// 更新用戶
	public int updateAccount(Account account);
	
	// 刪除用戶
	public int deleteAccount(int id);
	
	// 查詢所有用戶
	public List<Account> findAllAccount();
	
}

  • 創建實現類AccountDaoImpl,將JdbcTemplate模板通過依賴注入,並使用該模板實現增刪查改。

AccountDaoImpl.java

package com.xhh.jdbc;

import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

public class AccountDaoImpl implements AccountDao {

	private JdbcTemplate jdbcTemplate;
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	@Override
	public int addAccount(Account account) {
		String sql = "insert into account(username,balance) values(?,?)";
		Object [] obj = {
				account.getUsername(),
				account.getBalance()
		};
		int update = jdbcTemplate.update(sql, obj);
		return update;
	}

	@Override
	public int updateAccount(Account account) {
		String sql = "update account set username=?,balance=? where id=?";
		Object [] obj = {
				account.getUsername(),
				account.getBalance(),
				account.getId()
		};
		int update = jdbcTemplate.update(sql, obj);
		return update;
	}

	@Override
	public int deleteAccount(int id) {
		String sql = "delete from account where id=?";
		int update = jdbcTemplate.update(sql, id);
		return update;
	}

	// 查詢所有賬戶信息
	@Override
	public List<Account> findAllAccount() {
		String sql = "select * from account";
		RowMapper<Account> rowMapper =
				new BeanPropertyRowMapper<Account>(Account.class);
		
		return this.jdbcTemplate.query(sql, rowMapper);
	}
}

  • applicationContext.xml中定義一個accountDao的Bean,該Bean實現了將模板注入到accountDao實例中。
	<!-- 定義Bean -->
	<bean id="accountDao" class="com.xhh.jdbc.AccountDaoImpl">
		<property name="jdbcTemplate" ref="jdbcTemplate"></property>
	</bean>
  • 在測試類中添加測試方法
	@Test
	public void addTest() {
		Account account = new Account();
		account.setUsername("xhh");
		account.setBalance(600.0);
		int addAccount = accountDao.addAccount(account);
		if (addAccount > 0) {
			System.out.println("添加成功。。");
		}
	}
	
	@Test
	public void findAllTest() {
		List<Account> findAllAccount = accountDao.findAllAccount();
		for (Account account : findAllAccount) {
			System.out.println(account.toString());
		}
	}

完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章