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ę. |