Spring Data JDBC與JDBC的區別

JDBC規範 

   java.sql和javax.sql兩個包中的類與接口(天龍八部):
    DataSource:數據源
    DriverManager:驅動管理
    Driver:JDBC驅動
    Connection:數據庫連接
    Statement:語句,執行SQL
    PrepareStatement:預編譯語句,性能更好
    CallableStatement:調用存儲過程
    ResultSet:結果集,封裝了多條記錄

    JDBC數據庫連接池/Connection Pool
        DBCP:apache tomcat內置
        c3p0:hibernate
        光-HikariCP:spring boot



Spring Boot

    Spring Framework:核心
        IoC容器:
            Spring core
            Spring bean
            Spring context
            Spring el
        AOP編程:後繼
            Spring aop
    Spring Data:
        Spring Data
        Spring Data JDBC
        Spring Data JPA
        Spring Data MongoDB/Redis
        Spring Data....
        
    Spring MVC
        MVC 架構模式:使用控制器實現模型與視圖的結藕(分離)
        基於Java Web技術中 Servlet/JSP 規範
    
    Spring Security
    集成其他技術


爲了讓小夥伴更快的 掌握JDBC與Spring Data JDBC之間的區別,上代碼!!!

該工程所需要的依賴


工程目錄:

 


數據庫dept表的數據: 

 


 

application.properties

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jpa?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

 


Dept.java

package com.newer.jdbc;

/**
 * 實體類
 * @author Admin
 *
 */
public class Dept {

	int id;
	
	String title;
	
	String loc;
	
	public Dept() {
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getLoc() {
		return loc;
	}

	public void setLoc(String loc) {
		this.loc = loc;
	}

	@Override
	public String toString() {
		return "Dept [id=" + id + ", title=" + title + ", loc=" + loc + "]";
	}
	
	
}

 


DeptRepository.java

package com.newer.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

/**
 * 數據訪問/DeptDao/DeptMapper
 * 
 * 類或者接口
 * 
 * 
 * @author Admin
 *
 */
@Repository
public class DeptRepository {

	@Autowired
	JdbcTemplate jdbcTemplate;
	
	/**
	 * 原來的JDBC
	 * @return
	 * @throws SQLException
	 */
	public List<Dept> findAll() throws SQLException {
		
		String sql="select * from dept";
		Connection conn=DriverManager.getConnection("");
		Statement stat=conn.createStatement();
		stat.execute(sql);
//		查詢獲得結果集
		ResultSet rs= stat.executeQuery("");
		
		List<Dept> list=new ArrayList<>();
		while(rs.next()) {
			int id=rs.getInt("id");
			String title=rs.getString("title");
			String loc=rs.getString("loc");
			
			Dept dept=new Dept();
			dept.id=id;
			dept.title=title;
			dept.loc=loc;
			list.add(dept);
		}
		
//		關閉連接
		rs.close();
		stat.close();
		conn.close();
		
		return list;
	}
	
	
	
	
//	結果集記錄的一行,映射特定的對象
	RowMapper<Dept> mapper=new RowMapper<Dept>() {

		@Override
		public Dept mapRow(ResultSet rs, int rowNum) throws SQLException {
			Dept dept =new Dept();
			dept.setId(rs.getInt("id"));
			dept.setTitle(rs.getString("title"));
			dept.setLoc(rs.getString("loc"));
			return dept;
		}
	}; 
	
	
	/**
	 * 2001
	 * 封裝了JDBC,覺得JDBC太繁瑣
	 * jdbcTemplate
	 * @return Dept對象構成的列表/結果集記錄行
	 */
	
	public List<Dept> findALL(){
		
		return jdbcTemplate.query("select * from dept", mapper);	
	}
	
	/**
	 * jdbcTemplate
	 * @param loc
	 * @return
	 */
	public List<Dept> findByLoc(String loc){
		
//		sql語句
		String sql="select * from dept where loc like ?";
		
//		參數
		Object [] args= {loc};
//		執行查詢
		return jdbcTemplate.query(sql,args, mapper);
	}
	
	
	public void remove(int id) {
		
		String sql="delete "
				+"from dept "
				+"where id=? "
				+ "and "
				+"loc=? ";
		jdbcTemplate.execute(sql);
	}
	
}

HomeController.java

package com.newer.jdbc;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

//	數據訪問的幾種方案
//  1.mybatis-mapper
//	2.JPA-repository
//	3.JDBC Template
//	4.JDBC
	@Autowired
	DeptRepository deptRepository;
	
	@GetMapping("/")
	public List<Dept> findAll(){
		
		return deptRepository.findALL();
	}
	
	
	@GetMapping("/{loc}")
	public List<Dept> find(@PathVariable String loc){
		
		return deptRepository.findByLoc(loc);
	}
	
	
}

接下來運行程序,然後可以通過URL去訪問數據庫dept表中的數據。

查詢dept表所有的數據


根據loc查詢dept表數據

 


關於 Spring Data JDBC與JDBC的區別就到這裏結束了,有問題的小夥伴留言!!!

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