banner
jzman

jzman

Coding、思考、自觉。
github

Spring Boot系列之JDBC操作資料庫

PS:任何時候都不必害怕改變,因為那正是讓你變好的路。

JDBC(Java Data Base Connectivity,Java 數據庫連接),主要用途就是用於數據庫的連接、執行 SQL 語句、處理 SQL 執行結果等,從零開始 Spring Boot 中 JDBC 的學習,主要內容如下:

  1. 安裝 MySQL
  2. 連接 MySQL
  3. 創建數據庫
  4. 依賴及配置
  5. 實體類
  6. 實現增刪改查
  7. 測試效果
  8. 多數據源配置

安裝 MySQL#

訪問官网下载對應版本的 MySQL:

https://dev.mysql.com/downloads/

這裡選擇 Windows 操作系統對應的安裝包進行下載,如下圖所示:

image

然後依次選擇 next 進行安裝,安裝完成後就可以啟動 MySQL 了。

連接 MySQL#

安裝完成 MySQL 之後啟動 MySQL,然後使用 navicat 來連接 MySQL,新建連接如下:

image

輸入用戶名、密碼等點擊測試連接,如果配置正確,則會提示連接成功。

創建數據庫和表#

連接 MySQL 之後,右鍵該連接創建數據庫 db_student 如下:

image

其創建數據庫的對應命令如下:

CREATE DATABASE `db_student` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';

創建完數據庫之後創建一個名為 student 的表,可以使用 navicat 創建也可以使用命令,創建表的命令如下:

CREATE TABLE `student` (
     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
     `name` varchar(32) DEFAULT NULL COMMENT '用戶名',
     `password` varchar(32) DEFAULT NULL COMMENT '密碼',
     `age`  int DEFAULT NULL COMMENT '年齡',
     PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

依賴及配置#

創建 Spring Boot 項目,在其 build.gradle 文件中添加 JDBC 和 MySQL 驅動的依賴如下:

dependencies {
    // jdbc依賴
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    // mysql驅動
    runtime("mysql:mysql-connector-java")
    // ...
}

然後在項目的 application.properties 文件中進行數據庫基本配置,如下:

# 數據庫用戶名
spring.datasource.username=root
# 數據庫密碼
spring.datasource.password=admin
# JDBC Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JDBC URL
spring.datasource.url=jdbc:mysql://localhost:3306/db_student?serverTimezone=Asia/Shanghai

配置完成之後,可以借助 IDEA 的 Database 工具測試配置是否正確,測試成功如下圖所示:

image

實體類#

創建數據表 student 對應的數據實體類如下:

/**
 * 實體類
 */
public class Student {
    private long id;
    private String name;
    private String password;
    private int age;

    public Student() {
    }

    public Student(String name, String password, int age) {
        this.name = name;
        this.password = password;
        this.age = age;
    }

    public Student(long id,String name, String password, int age) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.age = age;
    }

    // setter、getter方法
}

實現增刪改查#

定義增刪改查接口 IStudentRepository 如下:

/**
 * @Desc: 定義增刪查改接口
 * @Author: jzman
 */
public interface IStudentRepository {
    /**
     * 保存數據
     * @param student 單條student記錄
     */
    void save(Student student);

    /**
     * 刪除數據
     * @param id 學生id
     */
    void delete(long id);

    /**
     * 更新數據
     * @param student 單條student記錄
     */
    void update(Student student);

    /**
     * 查詢數據
     * @param name 姓名
     * @return 返回單條記錄
     */
    Student findByName(String name);

    /**
     * 查詢全部數據
     * @return 返回全部記錄
     */
    List<Student> findAll();
}

創建 StudentRepositoryImpl 實現 IStudentRepository 接口實現增刪改查:

/**
 * @Desc: 具體實現
 * @Author: jzman
 */
@Repository
public class StudentRepositoryImpl implements IStudentRepository {

    public JdbcTemplate mJdbcTemplate;

    /**
     * 構造方法自動裝配
     * @param jdbcTemplate JdbcTemplate
     */
    public StudentRepositoryImpl(JdbcTemplate jdbcTemplate) {
        this.mJdbcTemplate = jdbcTemplate;
    }

    @Override
    public void save(Student student) {
        mJdbcTemplate.update("INSERT INTO student(name,password,age) values(?,?,?) ",
                student.getName(), student.getPassword(), student.getAge());
    }

    @Override
    public void delete(long id) {
        mJdbcTemplate.update("DELETE FROM student where id=?", id);
    }

    @Override
    public void update(Student student) {
        mJdbcTemplate.update("UPDATE student SET name=?,password=?,age=? WHERE id=?",
                student.getName(), student.getPassword(), student.getAge(), student.getId());
    }

    @Override
    public Student findByName(String name) {
        Object[] args = {name};
        return mJdbcTemplate.queryForObject("SELECT * FROM student WHERE name=?", args,
                new BeanPropertyRowMapper<Student>(Student.class));
    }

    @Override
    public List<Student> findAll() {
        return mJdbcTemplate.query("SELECT * FROM student",new BeanPropertyRowMapper<>(Student.class));
    }
}

測試效果#

編寫測試程序進行測試,這裡以添加數據為例,插入兩條數據如下:

 * @Desc: StudentRepositoryTests
 * @Author: jzman
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentRepositoryTests {
    @Autowired
    private IStudentRepository mStudentRepository;

    @Test
    public void testSave(){
        Student student1 = new Student("躬行之", "111",3);
        Student student2 = new Student(2,"jzman", "123",20);
        mStudentRepository.save(student1);
        mStudentRepository.save(student2);
    }
}

運行 testSave 之後,使用 IDEA 提供的 Database 工具,雙擊表 student 查看數據表內容,如下:

image

到此,數據插入操作就成功了,刪除、修改、查詢也是一樣。

多數據源配置#

多數據源配置的配置主要是配置對應的 DataSourceJdbcTemplate,定義多數據源如下:

/**
 * @Desc: 數據源配置
 * @Author: jzman
 */
@Configuration
public class DataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "primaryJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
}

然後在 application.properties 文件中配置多個數據庫連接,如下:

# dataSource1
spring.datasource.primary.username=root
spring.datasource.primary.password=admin
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/data_source_one?serverTimezone=Asia/Shanghai


# dataSource1
spring.datasource.secondary.username=root
spring.datasource.secondary.password=admin
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/data_source_two?serverTimezone=Asia/Shanghai

不同的數據源對應不同的 JdbcTemplate 即可操作對應數據源的數據,具體可參考文末提示查看對應源碼。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。