Агляд: Як мы ўсе ведаем, што рамкі вясна стала неад'емнай часткай распрацоўкі прыкладанняў на базе Java сучаснага. Рамкі вясной эфектыўна ўдалося ўзяць пад кантроль кожнага аддзела ў свеце распрацоўкі Java. Шаблон JDBC вясны выкарыстоўваецца ў большасці спружыны прыкладанняў JEE для абмену дадзенымі з базай дадзеных.
У гэтым артыкуле я распавяду пра тое, як атрымаць доступ да рэляцыйнай базы дадзеных з дапамогай шаблону JDBC вясны.
Увядзенне: Мы ўсе ведаем пра важнасць рэляцыйных баз дадзеных у распрацоўцы карпаратыўных прыкладанняў. Вясна з'яўляецца адным з шырока выкарыстоўваюцца ў рамках распрацоўкі карпаратыўных прыкладанняў на базе Java. Spring мае розныя модулі, такія як ОРМ, бяспеку, здзелка, JPS, JMS і г.д., каб падтрымаць неабходнасць распрацоўкі прыкладанняў прадпрыемства. Як спружына забяспечвае лёгкадаступныя кампаненты падключаецца модуля, сучасны падыход для распрацоўкі прыкладанняў Java Enterprise выкарыстоўвае магчымасці шырока. У выніку распрацоўкі нашмат хутчэй і больш эфектыўна. Spring прадастаўляе просты падыход для апрацоўкі дзеянняў з базай дадзеных ведаем, як крынічная JDBC шаблону.
Недахопы стандартнага JDBC API: Стандарт JDBC API мае наступныя недахопы.
- Акрамя выканання асноўнага запыту, вам трэба напісаць шмат кода для апрацоўкі пытанняў навакольнага асяроддзя выканання, як стварэнне злучэння, заяву, ResultSet і г.д..
- Трэба апрацоўваць кода апрацоўкі выключэнняў асобна.
- Трэба апрацоўваць транзакцыйных пытанні.
Перавагі спружыннай JDBC шаблону: Шаблон Спринг JDBC мае наступныя перавагі ў параўнанні са звычайным падыходам стандарту JDBC.
- Ачыстка выкарыстаных рэсурсаў ажыццяўляецца аўтаматычна з дапамогай спружыннага JDBC шаблону. Такім чынам, распрацоўнікам не трэба турбавацца аб вызваленні рэсурсаў. Такім чынам, яна прадухіляе уцечку памяці.
- Шаблон Spring JDBC апрацоўвае выключэнне і памылкі ў больш эфектыўным спосабам. Ён пераўтворыць JDBC SQLExceptions ў RuntimeExceptions, таму распрацоўнікі могуць справіцца з гэтым больш гнуткім спосабам.
- Шаблон вясной JDBC таксама пераўтворыць спецыфічныя памылкі пастаўшчыка ў больш значнага паведамлення. Такім чынам, пагрузачна-разгрузачных работ гэтых памылак з'яўляюцца больш эфектыўнымі.
пачатак працы:
In this document, давайце выкарыстоўваць Gradle як інструмент для зборкі, каб пабудаваць наша дадатак. Пачнем з простага прыкладання, які выкарыстоўваецца для захоўвання і здабывання дэталі супрацоўнікаў разам з іх аддзеламі арганізацыі. У нашым прыкладзе, мы будзем мець наступныя атрыбуты аб'екта супрацоўніка:-
- Id супрацоўнікаў
- супрацоўнік Імя
- супрацоўнік Імя па бацьку
- супрацоўнік Прозвішча
- Супрацоўнік дэпартамента Id
А аб'ект аддзел мае наступныя атрыбуты:-
- Id аддзел
- Назва аддзела
Зараз давайце створым аб'екты Java, якія будуць выкарыстоўвацца для сувязі з базай дадзеных. Нашы POJO класы для гэтых двух сутнасцяў пералічаныя як пад:
Listing1: Прыклад, які паказвае клас Employee
[Code]
package com.home.springjdbc.objects;
грамадскасць клас супрацоўнік {
// супрацоўнік Id
прыватны радок EmpId;
// супрацоўнік Найменне
прыватны радок empFName;
// супрацоўнік імя па бацьку
прыватны радок empMName;
// супрацоўнік Прозвішча
прыватны радок empLName;
// Аддзел ідэнтыфікацыйны нумар супрацоўніка
прыватны радок empDeptId;
грамадскасць супрацоўнік ( радок EmpId, радок empFName, радок empMName,
радок empLName, радок empDeptId ) {
супер();
this.EmpID = EmpID;
this.Rec Rec імя = імя;
this.empMName = empMName;
this.empLName = empLName;
this.empDeptId = empDeptId;
}
/**
* @return EmpId
*/
грамадскасць радок getEmpId () {
return EmpID;
}
/**
* @param EmpID
* EmpId ўсталяваць
*/
грамадскасць анулявання setEmpId ( радок EmpId ) {
this.EmpID = EmpID;
}
/**
* @return empFName
*/
грамадскасць радок getEmpFName () {
return Rec імя;
}
/**
* @param Rec імя
* empFName ўсталяваць
*/
грамадскасць анулявання setEmpFName ( радок empFName ) {
this.Rec Rec імя = імя;
}
/**
* @return empMName
*/
грамадскасць радок getEmpMName () {
return empMName;
}
/**
* @param empMName
* empMName ўсталяваць
*/
грамадскасць анулявання setEmpMName ( радок empMName) {
this.empMName = empMName;
}
/**
* @return empLName
*/
грамадскасць радок getEmpLName () {
return empLName;
}
/**
* @param empLName
* empLName ўсталяваць
*/
грамадскасць анулявання setEmpLName ( радок empLName) {
this.empLName = empLName;
}
/**
* @return empDeptId
*/
грамадскасць радок getEmpDeptId () {
return empDeptId;
}
/**
* @param empDeptId
* empDeptId ўсталяваць
*/
грамадскасць анулявання setEmpDeptId ( радок empDeptId ) {
this.empDeptId = empDeptId;
}
/*
* ( ня-Javadoc )
*
* @see java.lang.Object # ToString ()
*/
@ Override
грамадскасць радок ToString () {
return “супрацоўнік [ EmpID =” + EmpID + “, Rec імя =” + Rec імя
+ “, empMName =” + empMName + “, empLName =” + empLName
+ “, empDeptId =” + empDeptId + “]”;
}
}
[/Code]
Listing2: Прыклад, які паказвае Дэпартамента класа
[Code]
package com.home.springjdbc.objects;
грамадскасць клас аддзел {
// аддзел Id
прыватны радок deptId;
// аддзел Імя
прыватны радок DEPTNAME;
грамадскасць аддзел ( радок deptId, радок DEPTNAME) {
супер ();
this.deptId = deptId;
this.DEPTNAME = DEPTNAME;
}
/**
* @return deptId
*/
грамадскасць радок getDeptId () {
return deptId;
}
/**
* @param deptId
* deptId ўсталяваць
*/
грамадскасць анулявання setDeptId ( радок deptId ) {
this.deptId = deptId;
}
/**
* @return DEPTNAME
*/
грамадскасць радок getDeptName () {
return DEPTNAME;
}
/**
* @param DEPTNAME
* DEPTNAME ўсталяваць
*/
грамадскасць анулявання setDeptName ( радок DEPTNAME ) {
this.DEPTNAME = DEPTNAME;
}
/*
* (ня-Javadoc)
*
* @see java.lang.Object # ToString()
*/
@ Override
грамадскасць радок ToString () {
return “аддзел [ deptId =” + deptId + “, DEPTNAME =” + DEPTNAME + “]”;
}
}
[/Code]
Spring прадастаўляе шаблонны клас, вядомы як JdbcTemplate. Гэты клас адказвае за сувязь з SQL і рэляцыйных баз дадзеных JDBC. Пры традыцыйным падыходзе максімум кода JDBC заняты ў кіраванні злучэння апрацоўкі, набыццё рэсурсаў, апрацоўка выключэнняў, і праверка агульная памылка, якая з'яўляецца непачцівыя ў кантэксце таго, што мы спрабуем дасягнуць. JdbcTemplate бярэ на сябе ўсе гэтыя рэчы і як распрацоўшчык, мы павінны засяродзіцца толькі на бізнэс-логіцы. Рэалізацыя ўзор шаблону класа паказана як пры -
Listing3: Прыклад, які паказвае рэалізацыю шаблону JDBC
[Code]
package com.home.springjdbc.dao;
імпартаваць java.sql.Driver;
імпартаваць java.sql.ResultSet;
імпартаваць java.sql.SQLException;
імпартаваць java.util.List;
імпартаваць org.springframework.jdbc.core.JdbcTemplate;
імпартаваць org.springframework.jdbc.core.RowMapper;
імпартаваць org.springframework.jdbc.datasource.SimpleDriverDataSource;
імпартаваць com.home.springjdbc.objects.Employee;
грамадскасць клас EmployeeDAO {
грамадскасць статычны анулявання асноўнай ( String args[] ) {
// простыя DS для тэсту (ня для вытворчасці!)
SimpleDriverDataSource DataSource = новае SimpleDriverDataSource();
dataSource.setDriverClass((Class<? пашыраецца кіроўца>) org.h2.Driver.клас);
dataSource.setUsername( “яе” );
dataSource.setUrl( “JDBC:h2:мем” );
dataSource.setPassword( “” );
JdbcTemplate JdbcTemplate = новае JdbcTemplate(DataSource);
Сістэма.з.Println( “стварэнне табліц” );
jdbcTemplate.execute( “падзенне супрацоўнікаў табліцы, калі існуе” );
jdbcTemplate.execute( “стварыць табліцу супрацоўнікаў(”
+ “ID VARCHAR(25), first_name VARCHAR(255), middle_name VARCHAR(255), last_name VARCHAR(255), deptId VARCHAR(25))”);
Радок[] запісу = “E001 Дын Эндру Робертс D25; E002 Джэф Longman Дын D42; E003 Erin Нэнсі Kirkland D66;”.раскол(“;”);
для ( радок singleRecord : дакументацыя ) {
Радок [] смещ_по_столбцам = singleRecord.split(” “);
Сістэма.з.Printf( ” Даданне запісы супрацоўніка для% s% s% s% s% s п”,смещ_по_столбцам[0], смещ_по_столбцам[1], смещ_по_столбцам[2], смещ_по_столбцам[3], смещ_по_столбцам[4]);
jdbcTemplate.update(“Супрацоўнікі Уставіць у(ID, імя, імя па бацьку, прозвішча, deptId) каштоўнасці(?,?,?,?,?)”,смещ_по_столбцам[0], смещ_по_столбцам[1], смещ_по_столбцам[2], смещ_по_столбцам[3], смещ_по_столбцам[4]);
}
Сістэма.з.Println ( ” Querying for customer records where first_name = ‘Erin’:” );
спіс<супрацоўнік> Вынікі = jdbcTemplate.query(
“select * ад супрацоўнікаў, дзе first_name = ?”,
новае аб'ект[] { “Erin” }, новае RowMapper<супрацоўнік>() {
@ Override
грамадскасць супрацоўнік mapRow(ResultSet RS, дзесятковага RowNum)
кідкі SQLException {
return новае супрацоўнік(rs.getString(“ID”),
rs.getString(“імя”), rs.getString(“імя па бацьку”),
rs.getString(“прозвішча”), rs.getString(“deptId”));
}
});
для (супрацоўнік супрацоўнік : вынікі) {
Сістэма.з.Println(супрацоўнік);
}
}
}
[/Code]
У прыведзеным вышэй прыкладзе, мы стварылі крыніца дадзеных JDBC, выкарыстоўваючы SimpleDriverDataSource з вясны. Затым мы выкарыстоўваем гэты крыніца дадзеных для пабудовы асобніка JdbcTemplate. Пасля таго, як клас JdbcTemplate ствараецца, мы можам лёгка пачаць выклік базы дадзеных. First, мы ствараем табліцу з дапамогай метаду выканання пра шаблон. Затым ўставіць некалькі запісаў з дапамогай метаду абнаўлення шаблону. Нарэшце, мы выкарыстоўваем метад запыту для выбаркі запісаў нашага выбару. У нашым прыкладзе мы выкарыстоўвалі просты запыт для здабывання запісы з табліцы супрацоўнікаў. Але згодна нашаму праекту, мы бачым, што табліца работнік мае дачыненне з табліцай аддзела праз калонку - deptId. Такім чынам, мы можам таксама выкарыстоўваць адзін і той жа код для здабывання запісаў, які злучае гэтыя дзве табліцы. Проста нам трэба змяніць запыт, каб пакласці далучыцца. Прыведзены вышэй код можа быць зменены ў адпаведнасці з -
Listing4: Прыклад, які паказвае мадыфікаваны запыт
[Code]
спіс<супрацоўнік> Вынікі = jdbcTemplate.query(
“выберыце emp.first_name, emp.middle _name, emp.last _name, dept.dept_Name ад супрацоўнікаў Эмі, аддзел аддзел, дзе emp.first_name = ?”,
новае аб'ект[] { “Erin” }, новае RowMapper<супрацоўнік>() {
@ Override
грамадскасць EmployeeDtls mapRow(ResultSet RS, дзесятковага RowNum)
кідкі SQLException {
return новае супрацоўнік( rs.getString(“імя”),
rs.getString(“імя па бацьку”),
rs.getString(“прозвішча”),
rs.getString(“dept_Name “));
}
});
для (EmployeeDtls employeeDtl : вынікі) {
Сістэма.з.Println(employeeDtl);
}
[/Code]
Каб выканаць гэта, мы павінны мець яшчэ адзін клас POJO EmployeeDtls як па -
Listing5: Прыклад, які паказвае EmployeeDtls класа POJO
[Code]
package com.home.springjdbc.objects;
грамадскасць клас EmployeeDtls {
// супрацоўнік Найменне
прыватны радок empFName;
// супрацоўнік імя па бацьку
прыватны радок empMName;
// супрацоўнік Прозвішча
прыватны радок empLName;
// аддзел Імя
прыватны радок DEPTNAME;
/**
* @param Rec імя
* @param empMName
* @param empLName
* @param DEPTNAME
*/
грамадскасць EmployeeDtls(радок empFName, радок empMName, радок empLName,
радок DEPTNAME) {
супер();
this.Rec Rec імя = імя;
this.empMName = empMName;
this.empLName = empLName;
this.DEPTNAME = DEPTNAME;
}
/*
* (ня-Javadoc)
*
* @see java.lang.Object # ToString()
*/
@ Override
грамадскасць радок ToString() {
return “EmployeeDtls [Rec імя =” + Rec імя + “, empMName =” + empMName
+ “, empLName =” + empLName + “, DEPTNAME =” + DEPTNAME + “]”;
}
/**
* @return empFName
*/
грамадскасць радок getEmpFName() {
return Rec імя;
}
/**
* @param Rec імя
* empFName ўсталяваць
*/
грамадскасць анулявання setEmpFName(радок empFName) {
this.Rec Rec імя = імя;
}
/**
* @return empMName
*/
грамадскасць радок getEmpMName() {
return empMName;
}
/**
* @param empMName
* empMName ўсталяваць
*/
грамадскасць анулявання setEmpMName(радок empMName) {
this.empMName = empMName;
}
/**
* @return empLName
*/
грамадскасць радок getEmpLName() {
return empLName;
}
/**
* @param empLName
* empLName ўсталяваць
*/
грамадскасць анулявання setEmpLName(радок empLName) {
this.empLName = empLName;
}
/**
* @return DEPTNAME
*/
грамадскасць радок getDeptName() {
return DEPTNAME;
}
/**
* @param DEPTNAME
* DEPTNAME ўсталяваць
*/
грамадскасць анулявання setDeptName(радок DEPTNAME) {
this.DEPTNAME = DEPTNAME;
}
}
[/Code]
Summary: Так што ў гэтым артыкуле мы бачылі, як вясна JDBC шаблон можа быць выкарыстаны ў Java стандартных і карпаратыўных прыкладанняў на аснове. Акрамя таго, мы абмеркавалі перавагі такога падыходу, і як гэта можа зрабіць развіццё значна хутчэй у параўнанні са стандартнай распрацоўкі на аснове JDBC.
Падагульнім наша абмеркаванне ў выглядзе наступных куля кропак -
- Вясна стала неад'емнай часткай сучаснай, заснаванай на Java асяроддзя распрацоўкі карпаратыўных прыкладанняў.
- Вясна мае розныя раздзелы, з якіх, шаблон JDBC з'яўляецца важнай часткай.
- Шаблон Spring JDBC спрашчае распрацоўку, прымаючы нагрузку набыцця рэсурсаў, кіраванне злучэннямі, апрацоўка выключэнняў, і праверка агульная памылка. Мы, як распрацоўшчык проста трэба сканцэнтравацца на складаных бізнес-сцэнары.