Wiosna - przegląd frameworka JDBC

Podczas pracy z bazą danych przy użyciu zwykłego starego JDBC, pisanie niepotrzebnego kodu do obsługi wyjątków, otwierania i zamykania połączeń z bazą danych itp. Staje się uciążliwe. Jednak Spring JDBC Framework zajmuje się wszystkimi niskopoziomowymi szczegółami począwszy od otwarcia połączenia, przygotowania i wykonaj instrukcję SQL, wykonaj wyjątki, obsłuż transakcje i ostatecznie zamknij połączenie.

Wystarczy więc zdefiniować parametry połączenia i określić instrukcję SQL do wykonania oraz wykonać wymaganą pracę dla każdej iteracji podczas pobierania danych z bazy danych.

Spring JDBC udostępnia kilka podejść i odpowiednio różne klasy do połączenia z bazą danych. Mam zamiar przyjąć klasyczne i najpopularniejsze podejście, które wykorzystujeJdbcTemplateklasa ramy. Jest to centralna klasa szkieletowa, która zarządza całą komunikacją z bazą danych i obsługą wyjątków.

Klasa JdbcTemplate

Klasa JDBC Template wykonuje zapytania SQL, aktualizuje instrukcje, przechowuje wywołania procedur, wykonuje iterację zestawów wyników i wyodrębnia zwrócone wartości parametrów. Przechwytuje również wyjątki JDBC i tłumaczy je na ogólną, zawierającą więcej informacji hierarchię wyjątków zdefiniowaną w pakiecie org.springframework.dao.

Instancje JdbcTemplate klasy są threadsafe raz skonfigurowany. Możesz więc skonfigurować pojedyncze wystąpienie JdbcTemplate, a następnie bezpiecznie wstrzyknąć to współużytkowane odniesienie do wielu DAO.

Typową praktyką podczas korzystania z klasy szablonu JDBC jest skonfigurowanie źródła danych w pliku konfiguracyjnym Spring, a następnie wstrzyknięcie współdzielonego komponentu bean DataSource do klas DAO, a JdbcTemplate jest tworzony w programie ustawiającym dla źródła danych.

Konfigurowanie źródła danych

Stwórzmy tabelę bazy danych Student w naszej bazie danych TEST. Zakładamy, że pracujesz z bazą danych MySQL, jeśli pracujesz z jakąkolwiek inną bazą danych, możesz odpowiednio zmienić swoje zapytania DDL i SQL.

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

Teraz musimy dostarczyć źródło danych do szablonu JDBC, aby mógł skonfigurować się w celu uzyskania dostępu do bazy danych. Możesz skonfigurować źródło danych w pliku XML za pomocą fragmentu kodu, jak pokazano w poniższym fragmencie kodu -

<bean id = "dataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
   <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
   <property name = "username" value = "root"/>
   <property name = "password" value = "password"/>
</bean>

Obiekt dostępu do danych (DAO)

DAO to skrót od Data Access Object, który jest powszechnie używany do interakcji z bazą danych. DAO istnieją, aby zapewnić środki do odczytu i zapisu danych w bazie danych i powinny udostępniać tę funkcjonalność poprzez interfejs, za pomocą którego reszta aplikacji będzie miała do nich dostęp.

Obsługa DAO w Spring ułatwia spójną pracę z technologiami dostępu do danych, takimi jak JDBC, Hibernate, JPA czy JDO.

Wykonywanie instrukcji SQL

Zobaczmy, jak możemy wykonać operację CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) na tabelach bazy danych za pomocą SQL i obiektu szablonu JDBC.

Querying for an integer

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Querying for a long

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

A simple query using a bind variable

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Querying for a String

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Querying and returning an object

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
   SQL, new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Querying and returning multiple objects

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Inserting a row into the table

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Updating a row into the table

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Deleting a row from the table

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

Wykonywanie instrukcji DDL

Możesz użyć execute(..)z jdbcTemplate do wykonywania instrukcji SQL lub instrukcji DDL. Poniżej znajduje się przykład użycia instrukcji CREATE do utworzenia tabeli:

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Spring JDBC Framework Przykłady

W oparciu o powyższe koncepcje, zapoznajmy się z kilkoma ważnymi przykładami, które pomogą Ci zrozumieć wykorzystanie frameworka JDBC na wiosnę -

Sr.No. Przykład i opis
1 Przykład wiosennego JDBC

Ten przykład wyjaśnia, jak napisać prostą aplikację Spring opartą na JDBC.

2 Procedura składowana SQL na wiosnę

Dowiedz się, jak wywołać procedurę składowaną SQL podczas korzystania z JDBC na wiosnę.