Die Informationen der Schüler in diesem Beispiel fügen der Datenbank Transaktionen hinzu (die Transaktion kann eingereicht werden, Transaktionen können zurückgeworfen und mit lokalen Threads verbessert werden).
Hauptseitenindex.jsp
<%@ page Language = "java" import = "java.util. value = "/query"/>? Name: <Eingabe type = "text" name = "name"/> <br> <br> <fieldset style = "Border: Solid; Border-Color: rot; Breite: 250px;"> <Legend> Buch1 </legend> Titel: <Eingabe type = "text" name = "buch"/> <br> <br> preis: <Eingabe type type = "text style="border: solid;border-color:green;width: 250px;"> <legend>Book 2</legend> Title:<input type="text" name="book"/><br><br> Price:<input type="text" name="price"/> </fieldset> <br><br> <input type="submit" value="submit"/><br><br> </form> </body> </html>
Tool zum Erhalten von Datenbankverbindung Connutils5.java
Paket cn.hncu.utils; import Java.lang.reflect.invocationHandler; Import Java.lang.reflect.Method; Import Java.lang.reflect.proxy; Import Java.Sql.Connection; java.util.properties; öffentliche Klasse Connutils5 {// Lokales Thread -Verwaltungsobjekt, verwendet, um zu implementieren: Die durch denselbe Thread erhaltene Verbindung ist derselbe private statische ThreadLocal <Connection> t = Neues ThreadLocal <Nobine> (); private endgültige statische Liste <verbindung> pool = new ArrayList <Connection> (); private statische int Größe; // private connutils5 () {} static {Eigenschaften p = neue Eigenschaften (); Versuchen Sie {// Die folgende Methode kann die Ressourcendatei unter ClassPath in einem reinen Java -Projekt lesen, aber das Javaee -Projekt kann nicht gelesen werden. Weil Tomcat den Standardklassenlader des Systems geändert hat //p.load (classloader.getSystemClassloader (). GetSystemResourceAsStream ("jdbc.properties")); // p.Load (classloader.getSystemResourceAsStream ("jdbc.properties"); // Lesen Sie die Ressourcendatei unter dem Klassenpfad des Webprojekts, verwenden Sie diese zu P.Load (connutils3.class.getClassloader (). GetResourceAsStream ("jdbc.properties"); String driver = p.getProperty ("Treiber"); String url = p.getProperty ("url"); String name = p.getProperty ("Benutzername"); String pwd = p.getProperty ("Passwort"); String ssize = p.getProperty ("Größe"); Size = Integer.ParseInt (ssize); Class.Forname (Treiber); für (int i = 0; i <size; i ++) {endgültige Verbindung con = driverManager.getConnection (URL, Name, PWD); System.out.println ("con =="+con); // Ändern Sie die Conn.CLOSE () -Methode // Verwenden Sie den Proxy -Modus, um eine erweiterte Version des Conn -Objekts zu generieren, intercept und ändere seine Close () -Methode in Object ncon = proxy.newproxyinstance (connutils3.class.getClass.GetClassLoader () // Conn.GetClass (). Getinterfaces (). Programm (der Klassenlader ist unterschiedlich) neue Klasse [] {Connection.class}, New InvocationHandler () {@Override öffentliches Objekt (Objektproxy, Methode, Objekt [] args) throwable {if (methodname.GetName () NULL; pool.add ((Verbindung) ncon); }} catch (Ausnahme e) {e.printstacktrace (); }} öffentliche statische synchronisierte Verbindung getConnection () {// Nehmen Sie es zuerst von T, wenn es einen gibt. Wenn nicht, schnappen Sie es sich im Pool und setzen Sie das Objekt in T -Verbindung con = t.get (); if (con == null) {if (pool.size () <= 0) {System.out.println ("Die Verbindung im Pool ist weg ..."); try {thread.sleep (1000); } catch (interruptedException e) {e.printstacktrace (); } return getConnection (); } con = pool.remove (0); T.Set (con); // geben Sie es in t} return con; // Lassen Sie sich einen verschieben}}Ressourcendatei jdbc.properties
## mysqldriver = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/hncu? UseUnicode = true & charakteristisches Zeichnen = utf-8username = rootpassWor D = 1234SIZE = 3 ## Oracle#Driver = Oracle.jdbc.driver.oracledriver#url = jdbc: oracle: dünn:@127.0.1: 1521: orcl#userername = Scott#Passwort = Tiger
Wertobjekt
Stud.java
Paket cn.hncu.domain; import Java.util.ArrayList; Import Java.util.list;/** Methode zum Erstellen eines "ein" -Square-Wert-Objekts in Eins-zu-Vielfalt*/Public Class Stud {private String-ID; privater Zeichenfolge Name; // ※ Fügen Sie eine Sammlung speziell für "Multi" Quadrate hinzu-und widerspiegeln die "Eins-zu-Viele-Beziehung" in einer privaten Multi-Tisch-Liste <Book> books = new ArrayList <Book> (); // Beachten Sie, dass die Sammlung bei oder vor dem Bau neu sein muss. public String getid () {return id; } public void setID (String -ID) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public List <Book> getBooks () {return books; } public void setbooks (Liste <Book> books) {this.books = books; } @Override public String toString () {return "id =" + id + "," + name + "," + books; }}Book.java
Paket cn.Hncu.domain;/** Methode zum Erstellen von "Multi" -Square-Wert-Objekten in Eins-zu-Many*/Public Class Book {private Integer id; // Alle grundlegenden Datentypen werden von der Verpackungsklasse deklariert, um die zukünftige Verwendung von Frameworks vorzubereiten-die Verpackungsklasse ist mit Frameworks kompatibel (da im Allgemeinen Frameworks-Reflexionen der Klassenreflexion verwendet werden) private String-Name; privater Doppelpreis; // ※ Fügen Sie eine Variable des Objekttyps speziell für "ein" Quadrat hinzu (beachten Sie keine Studie) --- Reflektieren Sie die "Ein-zu-Many-Beziehung" in mehreren Tabellen private Studs. } public void setId (Integer id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public double getPrice () {Rückgabepreis; } public void setPrice (Doppelpreis) {this.price = price; } public Stud gilt () {return s; } public void sets (stud s) {this.s = s; } / * * Wenn Multi-Table-Assoziation auf eine Falle achten, dh eine Partei gibt die andere Partei aus, und die andere Partei ausgibt die vorherige Partei und bildet unendliche Rekursion! */@Override public String toString () {return "id =" + id + "," + name + "," + price; // Das Stud -Objekt kann hier nicht ausgegeben werden, ansonsten unendliche Rekursion}}QueryServlet.java Servlet -Schicht der Stiftschicht
Paket cn.Hncu.stud.servlet; import Java.io.ioxception; import Java.util.list; import Java.util.map; import Javax.servlet.servletException; import Javax.servlet.http.httpServlet; javax.servlet.http.httpServletResponse; importieren cn.hncu.domain.book; import cn.hncu.domain.stud; import cn.hncu.stud.Service.istududService; IStudService Service = new StudServiceImpl (); public void dodget (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {Dopost (Request, Antwort); } public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, iOException {String cmd = request.getParameter ("CMD"); System.out.println ("CMD:"+CMD); if ("query" .equals (cmd)) {query (request, Antwort); } else if ("add" .equals (cmd)) {add (request, Antwort); }} public void query (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, iOException {list <map <String, String >> Studs = service.query (); Request.SetAttribute ("Bolzen", Bolzen); Request.GetRequestDispatcher ("/JSPS/show.jsp"). Forward (Request, Antwort); } public void add (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, ioException {// 1 Parameter sammeln 2 organisieren Parameter (ID -Feld ist in DAO zu ergänzen) String -Name [] = Anregung.getParametervalues ("Name"); System.out.println (Name [0]); Stud S = neuer Stud (); S.SetName (Name [0]); // Informationsstring -Bücher [] = Request.GetParamTervalues ("Buch"); // Schutz --- Der Preisschutz sollte ebenfalls geschrieben werden, hier sind wir faul, wenn (books == null || books.length <= 0) {return; } String -Preise [] = Request.GetParamTervalues ("Preis"); für (int i = 0; i <books.length; i ++) {book b = new Book (); B.SetName (Bücher [i]); B.SetPrice (double.Parsedouble (Preise [i])); // ※ Vervollständigen Sie die "Eins-zu-Viele-Beziehung" von zwei Wertobjekten S.Getbooks (). Add (b); // Einpartei b.sets (s); // Multiple-Party} // 3Call Service Layer Versuchen Sie {service.save (s); } catch (Ausnahme e) {// Richtung fehlgeschlagen Seite}}}Die Service -Layer -Schnittstelle der Studentschicht:
Paket cn.hncu.stud.service; import Java.util.List; import java.util.map; importieren cn.hncu.domain.stud; public interface istudService {öffentliche Liste <map <String, String >> query (); public void save (stud Studie);}Implementierungsklasse
Paket cn.hncu.stud.service; import Java.sql.Connection; Import Java.sql.sqlexception; Import Java.util.List; Import Java.util.map; cn.hncu.stud.dao.bookjdbcdao; import cn.hncu.stud.dao.studdao; import cn.hncu.utils.connutils3;/*In Zukunft verwenden wir normalerweise eine Tabelle, um unabhängig zu operieren. Wenn es mehrere Entitätstabellen im System gibt, schreiben Sie ein paar DAO. * In Zukunft wird das Rahmen dies tun, und wir müssen dies tun, weil die Architektur gut ist! * * Bei Verwendung von Transaktionen: * 1. Wenn es nur ein DAO gibt, aber mehrere SQL -Anweisungen müssen ausgeführt und hinzufügen, löschen und geändert werden, muss die Transaktion geöffnet werden. 2. Wenn ein Dienst mehrere DAO anruft, muss auch die Transaktion geöffnet werden. */public class studserviceImpl implementiert istudService {// Inject Studdao dao_stud = new Studjdbcdao (); Bookdao dao_book = new Bookjdbcdao (); @Override öffentliche Liste <map <String, String >> query () {return dao_stud.query (); } @Override public void Save (Stud studie) {Connection con = null; try {con = connutils3.getConnection (); System.out.println ("Get a Link:"+con); con.setAutocommit (falsch); dao_stud.save (Stud); dao_book.save (stud.getbooks ()); System.out.println ("eine Transaktion begehen ..."); con.commit (); } catch (Ausnahme e) {try {System.out.println ("rolle zurück eine Transaktion ..."); con.rollback (); } catch (sqlexception e1) {e1.printstacktrace (); }} endlich {try {con.setAutocommit (true); con.close (); } catch (sqlexception e) {e.printstacktrace (); }}}} Die Dao -Schicht der Stu -Schicht
Bolzenschnittstelle
Paket cn.hncu.stud.dao; import Java.util.List; import Java.util.map; importieren cn.hncu.domain.stud; public interface studdao {publiclist <map <map <String, String >> query (); public void save (stud bofel) löst Ausnahme aus;}Studentimplementierungsklasse
Paket cn.hncu.stud.dao; import Java.sql.Connection; Import Java.Sql.PreparedStatement; Import Java.SQL.Resultset; Import Java.SQL.SQLEXCECECTION; Import. java.util.list; import Java.util.map; import Java.util.uuid; importieren cn.hncu.domain.book; Liste <map <String, String >> list = new ArrayList <map <String, String >> (); // Eine Karte ist eine Datenzeile, List <Map> ist die gesamte Datentabellenverbindung con = null; try {con = connutils3.getConnection (); Anweisung st = con.CreateStatement (); String SQL = "SELECT * From Stud"; ResultSet rs = St.ExecuteQuery (SQL); while (rs.Next ()) {map <string, string> m = new HashMap <String, String> (); M.put ("id", (String) rs.getObject (1)); M.put ("Name", (String) rs.getObject (2)); list.add (m); } rs.close (); St.CLOSE (); } catch (sqlexception e) {e.printstacktrace (); } endlich {try {con.close (); } catch (sqlexception e) {e.printstacktrace (); }} Rückgabeliste; } @Override public void Save (Stud Stud) löst Ausnahme aus {Connection con = connutils3.getConnection (); System.out.println ("Get a Link:"+con); String SQL = "In Stud -Werte einfügen (?,?)"; String uUid = uUid.randomuuid (). ToString (). Ersetzen ("-", ""); PrepedStatement pst = con.Preparestatement (SQL); Stud.setId (UUID); // Um "mehrere Parteien", dh das Buch "One Party" -ID zu erhalten, wird es speziell mit PST.SetString (1, UUID) ergänzt; pst.setstring (2, stud.getName ()); System.out.println ("1:"+uUid+", 2:"+stud.getName ()); pst.executeUpdate (); // con.close (); // Holen Sie sich denselben Betrug, es besteht keine Notwendigkeit, es hier zu schließen}}Buchschnittstelle
Paket cn.hncu.stud.dao; Import Java.util.List; Import Cn.Hncu.Domain.book; Public Interface Bookdao {public void Save (Liste <Book> books) löst Ausnahme aus;}Buch -Implementierungsklasse
Paket cn.hncu.stud.dao; import Java.sql.Connection; Import Java.Sql.PrepararedStatement; Import Java.util.List; löst Ausnahme aus {Connection con = connutils3.getConnection (); System.out.println ("Get a Link:"+con); String SQL = "In Buch (Name, Preis, Studiden) Werte (?,?,?)"; PrepedStatement pst = con.Preparestatement (SQL); für (Buch B: Bücher) {pst.setString (1, b.getName ()); pst.setDouble (2, B.Getprice ()); pst.setObject (3, "12132312"); // Ausnahme (absichtlich ein nicht existierendes Fremdschlüsselfeld zum Testen von Transaktionsrollback) -Test-Transaktionsrollback // pst.setObject (3, B.Gets (). getId ()); System.out.println ("1:"+b.GetName ()+", 2:"+b.Getprice ()+", 3:"+b.gets (). GetId ()); pst.addbatch (); // Hinzufügen zu batch} pst.executebatch (); // Ausführen batch // con.close (); // Holen Sie sich hier die gleiche Betrügerin, keine Notwendigkeit, hier zu schließen}}Schülerinformationen anzeigen Seite JSPS/show.jsp
<%@ page Language = "java" import = "java.util. <c: foreach items = "$ {studs}" var = "x"> $ {x.id}, $ {x.name} <br/> </c: foreach> </body> </html>Reproduktionsbild:
Weitere Informationen zum Verwaltungssystem finden Sie auf dem Lernen auf "Management System Special Thema", um zu lernen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.