Programmierung im Schnittstellenbetrieb
Im Allgemeinen sieht es bei der Erstellung von Klassen, die SQL -Schnittstellen erstellen, normalerweise so aus:
public static void testbasicQuery (int id) {SQLSession Session = mybatisutils.getSQLSession (); try { / * * the David.mybatis.demo.ivisitorOperation.basicQuery hier muss dem Namespace in der Konfiguration in der folgenden Abbildung entsprechen MyBatisutils.Closession (Sitzung); System.out.println (Besucher); } catch (Ausnahme e) {// toDo: Handle -Ausnahme}}}}<!-Hier entspricht der Namespace dem String-Parameter, den Sie übergeben haben-> <Mapper Namespace = "David.mybatis.demo.IVisitorOperation"> <!-Hier entspricht der Ergebnistyp der alias, die Sie gerade in der Typealias-Note von typealias-> <select id = "basicquery" von id = "int" -StyptyPe = "ausgewählt haben"> SECTORS- und STATTYPE "und STATTYPe ="> SECTION und STATTYPE = "> SECTORS- und STATYPe ="> Select * von Visitor, und########’| bestellen nach id </select> </makePer>
Wenn die Namen auf beiden Seiten während des realen Entwicklungsprozesses versehentlich nicht entsprechen, wird eine Ausnahme auftreten. Um eine solche Situation zu vermeiden, können wir die Schnittstellenmethode verwenden, um entsprechende Operationen auszuführen. Ändern wir diesen Artikel unten.
Zunächst erstellen wir eine neue IVisitoperationsklasse unter dem Paketnamen David.mybatis.demo, der angibt, dass die Schnittstellen aller Datenbankmethoden in Zukunft betrieben werden, wie unten gezeigt:
Paket David.mybatis.demo; Import Java.util.List; Import David.mybatis.Model.Pagenateargs; Import David.mybatis.Model.visor; öffentliche Schnittstelle Ivisitoroperation { /** Basic Query* / Public Visitor Basic (int id); = Mybatisutils.getSqlSession (); try {ivisitorOperation voperation = session.getMapper (ivisitorOperation.class); Besucher Besucher = voperation.BasicQuery (ID); MyBatisutils.Closession (Sitzung); System.out.println (Besucher); } catch (Ausnahme e) {// toDo: Handle -Ausnahme}}}}Dies geschieht, sodass wir uns keine Sorgen um die Nichtübereinstimmung machen müssen, die sich aus manuellen Schreibmethodennamen ergeben kann.
CRUD -Betrieb
Im Folgenden werden die Erstellung von CRUD und GETLIST -Operationen auf der Grundlage einzelner Tabellenbetrieb erläutert. Um einige Testdaten zu erstellen, erhalten wir zunächst eine Add -Methode.
Fahren Sie in der letzten IVisitoroperation -Schnittstellenklasse fort, um die Schnittstellenmethoden hinzufügen, löschen, aktualisieren, abfragen und erhalten, wie unten gezeigt:
/** Basisabfrage*/ public Visitor basicQuery (int id); /** Besucher hinzufügen*/ public int add (Besucher Besucher); /** Besucher löschen*/ public int delete (int id); /** Besucher aktualisieren*/ public int update (Besucher Besucher); /** Abfrage Besucher*/ öffentlicher Besucherabfrage (int id); / * * Besucherliste abfragen */ öffentliche Liste <Besucher> getList ();
Für die entsprechenden CRUD -Operationen befinden sich die Knoten einfügen, aktualisieren, löschen und auswählen. Ausführliche Konfigurationsdetails finden Sie auf der offiziellen Website http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Die Konfiguration in diesem Beispiel lautet wie folgt: Verwenden Sie #{parameter_name}, um die Parameter zu übergeben, und Sie können natürlich auch $ {parameter_name} direkt verwenden.
In der ersteren Weise konvertiert MyBatis es in parametrisierte Form, z.
In der letzteren Weise passieren MyBatis die Parameter, ohne Operationen auszuführen, z. B. in Tabelle (Name) Werte ($ {Name}) => In Tabelle (Name) Werte einfügen ([der Wert, den Sie bestanden haben]), über AA, hier ist aa, passieren 'aa', hier ist 'aa'.
<? namespace = "David.mybatis.demo.ivisitoroperation"> <!-useGeneratedKeys = "True" bedeutet, ob eine Selbstwachstumssequenz verwendet werden soll, KeyProperty = "id" Gibt an, welche Spalte die Selbsterwachstumspalte, Parametertype = "Besucher", die entsprechende Art der Definition, die in der Definition der Definition übergeben wurde. resultmap in query. The customized return type is the best choice for returning complex types and is also the most powerful weapon in mybatis--> <insert id="add" parameterType="Visitor" useGeneratedKeys="true" keyProperty="Id"> insert into Visitor (Name, Email, Status, CreateTime) values (#{name}, #{email}, #{status}, #{createTime}) </insert> <delete id = "parameterType =" int "> löschen aus dem Besucher, wobei der Status> 0 und id = {id} </delete> <update id =" update "parameterType =" Visitor "> Visitor Set name =#{name}, E -Mail = {E -Mail}, Status = {Status} und status {status} und Status> 0; </update> <select id = "query" parameterType = "int" resultType = "Visitor"> ID, Name, E -Mail, Status, createtime aus Besucher wob < /select> <select id = "getList" resultMap = "Visitorrs"> <include refID = "getListsql" /> < /select> <resultMap type = "Visitor" id = "Visitorrs"> <id column = "id" id "id" id "id" /> <resultdes column = "status column = "createTime" properation = "createTime"/> </resultMap> <sql id = "getListsql"> aus dem Besucher, wobei der Status> 0 </sql> </Mapper>Eine Sache, die hier zu beachten ist, ist, dass die ID im Operationsknoten dem Grenzflächennamen in der Schnittstellendefinition entsprechen muss und der Parametertyp auch ihm entsprechen muss. Beispielsweise ist die Schnittstelle add (Besucherbesucher). Dann beim Konfigurieren des Knotens einfügen, id = "hinzufügen" und parameterType = "Besucher"
Andernfalls wird eine entsprechende Ausnahme gemeldet. Wenn der ID -Knoten beispielsweise nicht dem Schnittstellennamen entspricht, wird die folgende Ausnahme angezeigt:
Sie können feststellen, dass Sie bei der Erhöhung der Liste in der Konfigurationsdatei von VisitorMapper.xml resultMap verwenden. Bei Verwendung von resultMap können Sie angeben, welche Felder Ihre eigenen SQL -Anweisungskarten sind, da Sie manchmal nicht so viele Spalten benötigen, sodass Sie bei der Konfiguration der Zuordnung nicht so viele Karten konfigurieren müssen, oder Ihre Spalte wurde aliasind nicht direkt verwenden. Sie können auch steuern, ob die Zuordnung des Attributwerts <Stonts> unter dem Knoten <Configuration> konfiguriert werden soll, um zu steuern, ob sie wie folgt mit Kamelbenennungen in Javabäen zugeordnet werden sollen.
<einstellungen> <Einstellung Name = "MAPUNDERSCORETOCAMELCASE" value = "False" /> < /Einstellungen>
Für andere Konfigurationen, die den Mapper ändern, können Sie sie unter http://mybatis.github.io/mybatis-3/configuration.html#settings anzeigen.
Für die Mapper -Klasse des Besuchers lautet wie folgt:
<mapper namespace = "David.mybatis.demo.IVisitorOperation"> <sql id = "getListsql"> ID ID als Visitor_id, Name, E-Mail, Status, CreateTime von Besucher, bei dem der Status> 0 </sql> <select id = "GetList" resultmap = "ised thefand yefid yefid yefid =" GetLists yo. ist das Eigentum. Die Felder darin müssen die gleichen wie die Eigenschaften sein, die Sie in der Entität definieren. Dies ist Fallempfindlichkeit, andernfalls findet der Standard -Setter die entsprechende Eigenschaft nicht, wenn sie der Eigenschaft Werte zuweisen. Sie können die Spalteneigenschaft versuchen, die dem Namen des von der Abfrageanweisung zurückgegebenen Ergebnisses entspricht. Wenn ein Alias dem entsprechenden Feld gegeben ist, wird beispielsweise ID Visitor_ID, dann muss der entsprechende Spaltenname auch -> <resultmap type = "Visitor" id = "Visitorrs"> <id column = "Visitor_id" Property = "ID" /> <resultal = "Name" Property = "Name" /> <resulting column = "E -Mail" -Mandal ". column = "createTime" Property = "createTime"/> </resultMap> </makePer>
Hier werden Sie auch feststellen, dass es einen Knoten <Sql> Knoten gibt. Dies wird verwendet, um öffentliche SQL -Aussagen oder Felder zur Wiederverwendung an anderen Orten zu extrahieren. Weitere detaillierte Anweisungen finden Sie unter http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Der Rest ist der gleiche Operation wie gerade jetzt. Sie können eine Demorun -Klasse im Demo -Programm erstellen, um verschiedene Testmethoden zu speichern, wie folgt:
Paket David.mybatis.demo; Import Java.util.Arrays; Import Java.util.List; import org.apache.ibatis.Session.sqlSession; David.Mybatis.Model.Pagenateargs; Import David.mybatis.Model.visor; Import David.mybatis.Model.Website; try { / * * the David.mybatis.demo.ivisitorOperation.basicQuery hier muss dem Namespace in der Konfiguration in der folgenden Abbildung entsprechen MyBatisutils.Closession (Sitzung); System.out.println (Besucher); } catch (Ausnahme e) {// toDo: Behandeln Sie die Ausnahme E.PrintStackTrace (); }} public static void testBasicQueryByInterfaceway (int id) {sqlSession Session = mybatisutils.getSQLSession (); try {ivisitorOperation voperation = session.getMapper (ivisitorOperation.class); Besucher Besucher = voperation.BasicQuery (ID); MyBatisutils.Closession (Sitzung); System.out.println (Besucher); } catch (Ausnahme e) {// toDo: Behandeln Sie die Ausnahme E.PrintStackTrace (); }} /** Besucherdatensatz in Stapeln hinzufügen* / public static void addvisitors () {SQLSession Session = mybatisutils.getSQLSession (); Liste <Besucher> Besucher = arrays.aslist (neuer Besucher [] {neuer Besucher ("Mongodb", "[email protected]"), neuer Besucher ("Redis", [email protected] "), Neu Besucher (" Memcached "," [email protected]), New Visitor ("Couchdb", "[email protected]"), New Visitor ("Couchdb", "Couchdb@gmail. Besucher ("Hbase", "[email protected]"), neuer Besucher ("BigTable", "[email protected]"), neuer Besucher ("Hive", "[email protected]"), neuer Besucher ("Mapreduce", "[email protected]"),}); für (Besucher Besucher: Besucher) {Addvisitor (Besucher, Sitzung); } Mybatisutils.Closession (Sitzung); Mybatisutils.showmessages (crud_enum.list, Visitors.size ()); } /** Besucherinformationen hinzuzufügen IvisitorOperation voperation = session.getMapper (ivisitorOperation.class); int recordCount = voperation.add (Besucher); Session.Commit (); if (session == null) mybatisutils.closession (Sitzung); Mybatisutils.showMessages (crud_enum.add, recordCount); } /** Überladung Besucher hinzufügen* / public static void addvisitor (Besucher Besucher) {Addvisitor (Besucher, NULL); } /** Besucherinformationen löschen* / public static void deletevisitor (int id) {sqlSession session = mybatisutils.getSQLSession (); IvisitorOperation voperation = session.getMapper (ivisitorOperation.class); int recordCount = voperation.delete (id); Session.Commit (); MyBatisutils.Closession (Sitzung); Mybatisutils.showMessages (crud_enum.delete, recordCount); } /** Besucherinformationen aktualisieren* / public static void updatevisitor (int id) {sqlSession session = mybatisutils.getSqlSession (); IvisitorOperation voperation = session.getMapper (ivisitorOperation.class); Besucher Besucher = voperation.Query (id); System.out.println ("Originalobjekt:" + Besucher); String name = Visitor.getName (); if (name.contains ("aktualisiert"))) {Visitor.setName (name.substring (0, name.indexof ("aktualisiert")); } else {Visitor.setName (Name + "aktualisiert"); } int recordCount = voperation.update (Besucher); Session.Commit (); MyBatisutils.Closession (Sitzung); Mybatisutils.showMessages (crud_enum.update, recordCount); System.out.println ("Objekt aktualisieren:" + Besucher); } /** Besucherinformationen abfragen* / public static void queryvisitor (int id) {sqlSession Session = mybatisutils.getSQLSession (); IvisitorOperation voperation = session.getMapper (ivisitorOperation.class); Besucher Besucher = voperation.Query (id); MyBatisutils.Closession (Sitzung); Mybatisutils.showMessages (crud_enum.Query, 1); System.out.println (Besucher); } /** Die Besucherliste abfragen* / public static void queryvisitorlist () {sqlSession Session = mybatisutils.getSQLSession (); IvisitorOperation voperation = session.getMapper (ivisitorOperation.class); Liste <Besucher> Besucher = voperation.getList (); für (Besucher Besucher: Besucher) {System.out.println (Besucher); } Mybatisutils.Closession (Sitzung); Mybatisutils.showmessages (crud_enum.list, Visitors.size ()); }} In der Demorun -Klasse wird ein einfaches einzelnes Tisch -Crud ausgeführt, und die Demo ist abgeschlossen.