Kiel aliri datumaron uzanta Printempan JDBC ŝablono?

Spring JDBC template

Printempa JDBC ŝablono

Superrigardo: Kiel ni ĉiuj scias ke la printempa kadro fariĝis havenda parto de la moderna Java bazita aplika evoluado. La printempa kadro efike administris ekregi ĉiun departementon en la Java evoluada mondo. La JDBCa ŝablono de printempo estas uzita en plejparto de la printempo bazita JEEajn aplikojn komuniki kun la datumaro.

En ĉi tiu artikolo mi parolos al kiel aliri interrilatan datumaron uzanta la JDBCan ŝablonon de printempo.

Enkonduko: Ni ĉiuj scias la gravecon de interrilata datumaro en entreprena apliko evoluado. Printempo estas unu el la ĝenerale uzita kadrojn en Java bazita entreprena apliko evoluado. Printempo havas malsamajn kapsulojn kiel ORM, Sekureco, Transakcio, JPS, JMS ktp. subtenas la bezonon de entreprena apliko evoluado. Kiel printempo provizas vole haveblajn erojn ŝtopi-je, La moderna alproksimiĝo por entrepreno Java aplika evoluado uzas la ĉefaĵojn amplekse. Rezulte la evoluado estas multe da pli rapida kaj efika. Printempo provizas simplan alproksimiĝon pritrakti datumarajn aktivecojn scias kiel printempa JDBC ŝablono.

Malavantaĝoj de norma JDBCa API: Norma JDBCa API havas la sekvantajn malavantaĝojn.

  • Krom efektiviganta la ĉefan demandon, Vi devas skribi multan kodon pritrakti la ekzekutajn mediajn aferojn kiel kreanta konekton, Komunikaĵo, Resultset ktp.
  • Devi pritrakti escepton pritraktanta kodon aparte.
  • Devi pritrakti transactional aferoj.

Avantaĝoj de printempa JDBC ŝablono: Printempa JDBC ŝablono havas la sekvantajn avantaĝojn komparita al la normala alproksimiĝo de norma JDBC.

  • Purigadanta de uzita rimedojn estas farita aŭtomate de printempa JDBC ŝablono. Do la ellaborantoj ne devas ĝeni pri liberiganta la rimedojn. Tial ĝi malhelpas memorajn likojn.
  • Printempa JDBC ŝablono pritraktas la escepton kaj eraroj en pli efika vojo. Ĝi transformas la JDBC SQLExceptions en RuntimeExceptions, Do la ellaborantoj povas pritrakti ĝin en pli da fleksebla vojo.
  • La printempa JDBCa ŝablono ankaŭ transformas la vendiston specifaj eraroj en pli bona serioza mesaĝo. Do la handlings de tiuj eraroj estas pli efikaj.

Akiranta Komencita:

En ĉi tiu dokumento, Lasita-a uzo gradle kiel konstrua ilo konstrui nian aplikon. Lasi nin komenco kun simpla apliko uzita enteni kaj repreni la detalojn de dungitoj kune kun iliaj departementoj de organizo. En nia ekzemplo, Ni havos la sekvantajn ecojn de la dungita objekto:-

  • Dungita Identigaĵo
  • Dungito Unua Nomo
  • Dungito Meza Nomo
  • Dungito Lasta Nomo
  • Dungita Departemento Identigaĵo

Kaj la departementa objekto havas la sekvantajn ecojn:-

  • Departementa Identigaĵo
  • Departementa Nomo

Nun lasita nin krei la java objektoj kiu estos uzita komuniki kun la datumaro. Niaj POJOaj klasoj por ĉi tiuj du entoj estas enlistigita kiel nesufiĉe:

Listing1: Provi montranta la Dungitan Klason

[Kodo]

Pako Com.Hejme.Springjdbc.Objektoj;

Publika Klaso Dungito {

// La dungita Identigaĵo

Privata Laĉi empId;

// La dungito unua Nomo

Privata Laĉi empFName;

// La dungito meza nomo

Privata Laĉi empMName;

// La dungito lasta Nomo

Privata Laĉi empLName;

// La dungita departementa Identigaĵo

Privata Laĉi empDeptId;

Publika Dungito ( Laĉi empId, Laĉi empFName, Laĉi empMName,

Laĉi empLName, Laĉi empDeptId ) {

Ekstra();

Tio ĉi.EmpId = empId;

Tio ĉi.EmpFName = empFName;

Tio ĉi.EmpMName = empMName;

Tio ĉi.EmpLName = empLName;

Tio ĉi.EmpDeptId = empDeptId;

}

/**

* @Reveno La empId

*/

Publika Laĉi getEmpId () {

Reveno EmpId;

}

/**

* @Param EmpId

* La empId fiksi

*/

Publika Malplena SetEmpId ( Laĉi empId ) {

Tio ĉi.EmpId = empId;

}

/**

* @Reveno La empFName

*/

Publika Laĉi getEmpFName () {

Reveno EmpFName;

}

/**

* @Param EmpFName

* La empFName fiksi

*/

Publika Malplena SetEmpFName ( Laĉi empFName ) {

Tio ĉi.EmpFName = empFName;

}

/**

* @Reveno La empMName

*/

Publika Laĉi getEmpMName () {

Reveno EmpMName;

}

/**

* @Param EmpMName

* La empMName fiksi

*/

Publika Malplena SetEmpMName ( Laĉi empMName) {

Tio ĉi.EmpMName = empMName;

}

?

/**

* @Reveno La empLName

*/

Publika Laĉi getEmpLName () {

Reveno EmpLName;

}

/**

* @Param EmpLName

* La empLName fiksi

*/

Publika Malplena SetEmpLName ( Laĉi empLName) {

Tio ĉi.EmpLName = empLName;

}

/**

* @Reveno La empDeptId

*/

Publika Laĉi getEmpDeptId () {

Reveno EmpDeptId;

}

/**

* @Param EmpDeptId

* La empDeptId fiksi

*/

Publika Malplena SetEmpDeptId ( Laĉi empDeptId ) {

Tio ĉi.EmpDeptId = empDeptId;

}

/*

* ( Ne-Javadoc )

*

* @Vidi java.Lang.Objekto#toString ()

*/

@Superregi

Publika Laĉi toString () {

Reveno “Dungito [ EmpId=” + EmpId + “, EmpFName=” + EmpFName

+ “, EmpMName=” + EmpMName + “, EmpLName=” + EmpLName

+ “, EmpDeptId=” + EmpDeptId + “]”;

}

}

[/Kodo]

Listing2: Provi montranta la Departementan Klason

[Kodo]

Pako Com.Hejme.Springjdbc.Objektoj;

Publika Klaso Departemento {

// La departementa Identigaĵo

Privata Laĉi deptId;

// La departementa Nomo

Privata Laĉi deptName;

Publika Departemento ( Laĉi deptId, Laĉi deptName) {

Ekstra ();

Tio ĉi.DeptId = deptId;

Tio ĉi.DeptName = deptName;

}

/**

* @Reveno La deptId

*/

Publika Laĉi getDeptId () {

Reveno DeptId;

}

/**

* @Param DeptId

* La deptId fiksi

*/

Publika Malplena SetDeptId ( Laĉi deptId ) {

Tio ĉi.DeptId = deptId;

}

/**

* @Reveno La deptName

*/

Publika Laĉi getDeptName () {

Reveno DeptName;

}

/**

* @Param DeptName

* La deptName fiksi

*/

Publika Malplena SetDeptName ( Laĉi deptName ) {

Tio ĉi.DeptName = deptName;

}

/*

* (Ne-Javadoc)

*

* @Vidi java.Lang.Objekto#toString()

*/

@Superregi

Publika Laĉi toString () {

Reveno “Departemento [ DeptId=” + DeptId + “, DeptName=” + DeptName + “]”;

}

}

[/Kodo]

Printempo provizas ŝablonan klason sciita kiel JdbcTemplate. Ĉi tiu klaso estas priresponda por komunikanta kun SQL interrilataj datumaroj kaj JDBC. En la tradicia alproksimiĝo la maksimumo de JDBCa kodo estas okupita en pritraktanta konektan administradon, Rimeda akiro, Escepto pritraktanta, Kaj ĝenerala erara kontrolado kiu estas nerespekteca en la kunteksto de kio ni estas provantaj atingi. La JdbcTemplate prizorgas de ĉiuj de ĉi tiuj aferoj kaj kiel ellaboranto ni devus koncentri nur sur la komerca logiko. Ekzempla efektivigo de la ŝablona klaso estas montrita kiel nesufiĉe –

Listing3: Provi montranta la efektivigon de JDBCa ŝablono

[Kodo]

Pako Com.Hejme.Springjdbc.Dao;

Importaĵo Java.Sql.Ŝoforo;

Importaĵo Java.Sql.ResultSet;

Importaĵo Java.Sql.SQLException;

Importaĵo Java.Util.Listo;

Importaĵo Org.Springframework.Jdbc.Kerno.JdbcTemplate;

Importaĵo Org.Springframework.Jdbc.Kerno.RowMapper;

Importaĵo Org.Springframework.Jdbc.Datasource.SimpleDriverDataSource;

Importaĵo Com.Hejme.Springjdbc.Objektoj.Dungito;

Publika Klaso EmployeeDAO {

Publika Senmova Malplena Ĉefa ( #La?i args[] ) {

// Simpla DS por testo (Ne por produktado!)

SimpleDriverDataSource dataSource = Nova SimpleDriverDataSource();

DataSource.SetDriverClass((Klaso<? Etendas Ŝoforo>) Org.H2.Ŝoforo.Klaso);

DataSource.SetUsername( “Sa” );

DataSource.SetUrl( “Jdbc:H2:Mem” );

DataSource.SetPassword( “” );

JdbcTemplate jdbcTemplate = Nova JdbcTemplate(DataSource);

Sistemo.Ekstere.Println( “Kreanta tablojn” );

JdbcTemplate.Efektivigas( “Fala tablo dungitoj se ekzistas” );

JdbcTemplate.Efektivigas( “Krei tablajn dungitojn(”

+ “Identigaĵo varchar(25), Unua_nomo varchar(255), Meza_nomo varchar(255), Lasta_nomo varchar(255), DeptId varchar(25))”);

Ŝnuro[] Rekordoj = “E001 Dean Andrew Roberts D25; E002 Jeff Longman Dean D42; E003 Erin Nancy Kirkland D66;”.Fendita(“;”);

Por ( Laĉi singleRecord : Rekordoj ) {

Ŝnuro [] Cols = singleRecord.Fendo(” “);

Sistemo.Ekstere.Printf( ” Aldonanta dungitan rekordon por %s %s %s %s %sn”,Cols[0], Cols[1], Cols[2], Cols[3], Cols[4]);

JdbcTemplate.Ĝisdatigo(“ENIGAĴA INTO dungitoj(Identigaĵo, Unua_nomo, Meza_nomo, Lasta_nomo, DeptId) Valoroj(?,?,?,?,?)”,Cols[0], Cols[1], Cols[2], Cols[3], Cols[4]);

}

Sistemo.Ekstere.Println ( ” Querying for customer records where first_name = ‘Erin’:” );

Listo<Dungito> Rezultoj = jdbcTemplate.Demando(

“Elektita * De dungitoj kie unua_nomo = ?”,

Nova Objekto[] { “Erin” }, Nova RowMapper<Dungito>() {

@Superregi

Publika Dungito mapRow(ResultSet rs, Int RowNum)

Ĵetas SQLException {

Reveno Nova Dungito(Rs.GetString(“Identigaĵo”),

Rs.GetString(“Unua_nomo”), Rs.GetString(“Meza_nomo”),

Rs.GetString(“Lasta_nomo”), Rs.GetString(“DeptId”));

}

});

Por (Dungita dungito : Rezultoj) {

Sistemo.Ekstere.Println(Dungito);

}

}

}

[/Kodo]

En la supra ekzemplo, Ni instalis JDBCan datuman fonton uzanta la SimpleDriverDataSource de printempo. Ni tiam uzas ĉi tiun datuman fonton konstrui la JDBCTemplate okazo. Unufoje la JDBCTemplate klaso estas kreita, Ni facile povas komenci vokanta la datumaron. Unue, Ni kreas la tablon uzanta la efektivigi metodon de la ŝablono. Tiam ni insertas malabundajn rekordojn uzanta la ĝisdatigan metodon de la ŝablono. Fine ni uzas la demandan metodon venigi la rekordojn de nia elekto. En nia ekzemplo ni uzis simplan demandon venigi la rekordon de la dungita tablo. Sed kiel por nia desegno ni vidas ke la dungita tablo havas rilaton kun la departementa tablo tra la kolumno – deptId. Do ni ankaŭ povas uzi la saman kodon venigi rekordojn aliĝanta ĉi tiuj du tabloj. Nur ni devas ŝanĝi la demandon meti aliĝi. La supra kodo povus esti modifita kiel nesufiĉe –

Listing4: Provi montranta la modifita demandon

[Kodo]

Listo<Dungito> Rezultoj = jdbcTemplate.Demando(

“Elektita emp.Unua_nomo, Emp.Meza _nomo, Emp.Lasta _nomo, Dept.Dept_Nomo de dungitoj emp, Departemento dept kie emp.Unua_nomo = ?”,

Nova Objekto[] { “Erin” }, Nova RowMapper<Dungito>() {

@Superregi

Publika EmployeeDtls mapRow(ResultSet rs, Int RowNum)

Ĵetas SQLException {

Reveno Nova Dungito( Rs.GetString(“Unua_nomo”),

Rs.GetString(“Meza_nomo”),

Rs.GetString(“Lasta_nomo”),

Rs.GetString(“Dept_Nomo “));

}

});

Por (EmployeeDtls employeeDtl : Rezultoj) {

Sistemo.Ekstere.Println(EmployeeDtl);

}

[/Kodo]

Efektivigi tion ĉi ni devus havi alian POJOan klason EmployeeDtls kiel nesufiĉe –

Listing5: Provi montranta la POJOan klason EmployeeDtls

[Kodo]

Pako Com.Hejme.Springjdbc.Objektoj;

Publika Klaso EmployeeDtls {

// La dungito unua Nomo

Privata Laĉi empFName;

// La dungito meza nomo

Privata Laĉi empMName;

// La dungito lasta Nomo

Privata Laĉi empLName;

// La departementa Nomo

Privata Laĉi deptName;

/**

* @Param EmpFName

* @Param EmpMName

* @Param EmpLName

* @Param DeptName

*/

Publika EmployeeDtls(Laĉi empFName, Laĉi empMName, Laĉi empLName,

Laĉi deptName) {

Ekstra();

Tio ĉi.EmpFName = empFName;

Tio ĉi.EmpMName = empMName;

Tio ĉi.EmpLName = empLName;

Tio ĉi.DeptName = deptName;

}

/*

* (Ne-Javadoc)

*

* @Vidi java.Lang.Objekto#toString()

*/

@Superregi

Publika Laĉi toString() {

Reveno “EmployeeDtls [EmpFName=” + EmpFName + “, EmpMName=” + EmpMName

+ “, EmpLName=” + EmpLName + “, DeptName=” + DeptName + “]”;

}

/**

* @Reveno La empFName

*/

Publika Laĉi getEmpFName() {

Reveno EmpFName;

}

/**

* @Param EmpFName

* La empFName fiksi

*/

Publika Malplena SetEmpFName(Laĉi empFName) {

Tio ĉi.EmpFName = empFName;

}

/**

* @Reveno La empMName

*/

Publika Laĉi getEmpMName() {

Reveno EmpMName;

}

/**

* @Param EmpMName

* La empMName fiksi

*/

Publika Malplena SetEmpMName(Laĉi empMName) {

Tio ĉi.EmpMName = empMName;

}

/**

* @Reveno La empLName

*/

Publika Laĉi getEmpLName() {

Reveno EmpLName;

}

/**

* @Param EmpLName

* La empLName fiksi

*/

Publika Malplena SetEmpLName(Laĉi empLName) {

Tio ĉi.EmpLName = empLName;

}

/**

* @Reveno La deptName

*/

Publika Laĉi getDeptName() {

Reveno DeptName;

}

/**

* @Param DeptName

* La deptName fiksi

*/

Publika Malplena SetDeptName(Laĉi deptName) {

Tio ĉi.DeptName = deptName;

}

}

[/Kodo]
Resuma: Do en ĉi tiu artikolo ni vidis kiel printempan JDBC ŝablono povas esti uzita en Java bazis norman kaj entreprenaj aplikoj. Ni ankaŭ diskutis la avantaĝojn de ĉi tiu alproksimiĝo kaj kiel ĝi povas fari la evoluadon tre pli rapida komparita al la norma JDBC bazita evoluadon.

Lasi nin resumi nian diskuton en la formo de sekvantaj kuglaj punktoj –

  • Printempo fariĝis havenda parto de la moderna Java bazita entreprena apliko evoluada medio.
  • Printempo havas malsamajn sekciojn, Ekstere de kiu, La JDBCa ŝablono estas grava parto.
  • Printempa JDBC ŝablono faciligas la evoluadon de prenanta la ŝarĝon de rimeda akiro, Konekta administrado, Escepto pritraktanta, Kaj ĝenerala erara kontrolado. Ni kiel ellaboranto nura bezono koncentri sur la kompleksa komerca scenaro.
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share