So schreiben Sie Konfigurationsdateien und verwenden MyBatis einfach

So schreiben Sie Konfigurationsdateien und verwenden MyBatis einfach

So schreiben Sie Konfigurationsdateien und verwenden MyBatis einfach

MyBatis3.x

Hier ist eine kurze Einführung in MyBatis. Die spezifische Verwendung wird im Code veröffentlicht.

Die Vergangenheit und Gegenwart von MyBatis

Der Vorgänger von MyBatis ist iBatis. iBatis wurde ursprünglich von Clinton Begin entwickelt und später der Apache Foundation gespendet, um das Open-Source-Projekt iBatis zu etablieren. Im Mai 2010 wurde das Projekt von der Apache Foundation zu Google Code verschoben und in MyBatis umbenannt.

Die Paketstruktur ist jedoch immer noch Ibatis.

www.mybatis.org/

https://github.com/mybatis

Einführung in MyBatis

MyBatis ist ein ORM-Framework (Data Persistence Layer). Es wird eine Zuordnungsbeziehung zwischen Entitätsklassen und SQL-Anweisungen hergestellt. Dabei handelt es sich um eine halbautomatische ORM-Implementierung.

Vorteile von MyBatis:
1. Basierend auf SQL-Syntax, einfach und leicht zu erlernen.
2. Den zugrunde liegenden Montageprozess verstehen können.
3. SQL-Anweisungen werden in Konfigurationsdateien gekapselt, was eine einheitliche Verwaltung und Wartung erleichtert und den Kopplungsgrad von Programmen verringert.
4. Einfaches Debuggen des Programms.

Alle SQL-Anweisungen sind in XML definiert (empfohlen). Es kann auch durch Anmerkungen auf der Schnittstelle implementiert werden. Diese Zuordnungsdateien werden Mapper genannt.

Vergleich mit herkömmlichem JDBC

Reduzierung der Codemenge um 61 %

Das einfachste Persistenz-Framework

Leistungsverbesserungen auf Architekturebene

SQL-Code ist vollständig vom Programmcode getrennt und kann wiederverwendet werden

Verbesserte Arbeitsteilung in Projekten

Verbesserte Portabilität

kannMyBatisDemo

Paket- und Klassenverteilungsdiagramm:


Mybatis hat nur ein Paket und ein Datenbank-Supportpaket.

Konfigurationsdatei mybatis-config.xml (der Dateiname kann natürlich beliebig gewählt werden, aber versuchen Sie, der Spezifikation zu entsprechen. Die Konfigurationsdatei finden Sie im Handbuch)

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE Konfiguration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<Konfiguration> 
  <TypAliase> 
    <!-- Alias ​​des Konfigurationstyps --> 
    <typeAlias ​​​​alias="Benutzer" type="cn.hncu.domain.User" /> 
  </TypAliases> 
  <Umgebungen Standard="Entwicklung"> 
    <Umgebungs-ID="Entwicklung"> 
      <transactionManager Typ="JDBC" /> 
      <Datenquellentyp="POOLED"> 
        <Eigenschaftsname="Treiber" Wert="com.mysql.jdbc.Driver" /> 
        <Eigenschaftsname="URL" Wert="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8" /> 
        <property name="Benutzername" value="hncu" /> 
        <property name="Passwort" value="1234" /> 
        <Eigenschaftsname="poolMaximumActiveConnections" Wert="5"/> 
      </dataSource> 
    </Umgebung> 
  </Umgebungen> 
  <Mapper> 
    <mapper-Ressource="cn/hncu/domain/Benutzer.xml"></mapper> 
    <mapper-Ressource="cn/hncu/domain/User2.xml"></mapper> 
  </Mapper> 
</Konfiguration>

SqlSessionUtils.java

Paket cn.hncu.utils; 
 
importiere java.io.IOException; 
importiere java.io.InputStream; 
importiere java.sql.Connection; 
 
importiere org.apache.ibatis.io.Resources; 
importiere org.apache.ibatis.session.SqlSession; 
importiere org.apache.ibatis.session.SqlSessionFactory; 
importiere org.apache.ibatis.session.SqlSessionFactoryBuilder; 
 
importiere com.mysql.jdbc.interceptors.SessionAssociationInterceptor; 
 
 
öffentliche Klasse SqlSessionUtils { 
  private statische SqlSessionFactory sessionFactory=null;//Datenquelle--pool 
  statisch{ 
    versuchen { 
      InputStream in=Resources.getResourceAsStream("mybatis-config.xml");//Konfigurationsdatei laden sessionFactory=new SqlSessionFactoryBuilder().build(in); 
      /* 
       * Hier ist eine Methode, die zum Laden von Dateien nicht die Verwendung der Klasse „Resources“ erfordert (Verwendung von ClassLoader zum Laden von Konfigurationsdateien auf der untersten Ebene) 
        : SessionFactory = neuer SqlSessionFactoryBuilder().build(SqlSessionUtils.class.getClassLoader().getResourceAsStream("mybatis-config.xml")); 
       */ 
    } Fang (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
   
  öffentliche statische SqlSessionFactory getSessionFactory(){ 
    SessionFactory zurückgeben; 
  } 
  öffentliche statische SqlSession getSqlSession(){ 
    gibt sessionFactory.openSession() zurück; 
  } 
  öffentliche statische void main(String[] args) { 
    //Mybatis steuert die Anzahl der Verbindungen im Pool for(int i=0;i<10;i++){ 
      s=getSqlSession(); 
      System.out.println(s); 
      Verbindung con=s.getConnection(); 
      System.out.println("con: "+con); 
    } 
  } 
}

Benutzer.java

Paket cn.hncu.domain; 
 
öffentliche Klasse Benutzer { 
  private String-ID; 
  privater String-Name; 
  privates String-Passwort; 
  öffentliche Zeichenfolge getId() { 
    Rückgabe-ID; 
  } 
  öffentliche void setId(String id) { 
    diese.id = ID; 
  } 
  öffentliche Zeichenfolge getName() { 
    Rückgabename; 
  } 
  öffentliche void setName(String name) { 
    dieser.name = Name; 
  } 
  öffentlicher String getPwd() { 
    gib Passwort zurück; 
  } 
  öffentliche void setPwd(String pwd) { 
    dies.pwd = pwd; 
  } 
  @Überschreiben 
  öffentliche Zeichenfolge toString() { 
    returniere "Benutzer [id=" + id + ", name=" + name + ", pwd=" + pwd + "]"; 
  } 
   
}

Benutzerzuordnungsdatei User.xml (die einfachste Konfigurationsdatei)

Paket cn.hncu.domain; 
 
importiere java.util.List; 
 
öffentliche Schnittstelle UserMapper { 
  öffentliche Liste<Benutzer> all(); 
  öffentliche Liste<Benutzer> Benutzer2(String String); 
  öffentliche Liste<Benutzer> user3(Benutzer user); 
}

UserMapper.java (Schnittstelle, die offizielle Empfehlung ist, die Schnittstellenmethode zu verwenden – sicherer)

Paket cn.hncu.domain; 
 
importiere java.util.List; 
 
öffentliche Schnittstelle UserMapper { 
  öffentliche Liste<Benutzer> all(); 
  öffentliche Liste<Benutzer> Benutzer2(String String); 
  öffentliche Liste<Benutzer> user3(Benutzer user); 
}


Demo1.java

Paket cn.hncu.demo; 
 
importiere java.util.HashMap; 
importiere java.util.List; 
importiere java.util.Map; 
 
importiere org.apache.ibatis.session.SqlSession; 
importiere org.junit.Test; 
 
importiere cn.hncu.domain.User; 
importiere cn.hncu.domain.UserMapper; 
importiere cn.hncu.utils.SqlSessionUtils; 
 
öffentliche Klasse Demo1 { 
  @Prüfen 
  öffentliche void test1(){ 
    //Holen Sie sich zuerst SqlSession 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    List<User> list=s.selectList("users.all");//Das zurückgegebene Ergebnis wird in eine Liste gekapselt und der Parameter verwendet die ID, um anzugeben, welcher Abschnitt in der Zuordnungsdatei verwendet werden soll, <select> oder <insert> und andere SQL-Operationen// List<User> list=s.selectList("all");//Namespace weglassen ---- Wenn der Name (die ID) in Konflikt steht, muss der Namespace zur Identifizierung verwendet werden//System.out.println(list); 
    für(Benutzer u:list){ 
      System.out.println(u); 
    } 
  } 
  <span style="color:#ff0000;">//Verwenden Sie die Schnittstellenmethode, um die Datenbank zu betreiben (diese Methode wird empfohlen und ist sicherer) 
  /*Schritte* 1. Schreiben Sie eine Schnittstelle: UserMapper. Der abstrakte Methodenname in der Schnittstelle muss mit dem Attribut-ID-Wert von <select> identisch sein, d. h. eine abstrakte Methode stellt eine Operation dar.* 2. Ändern Sie den Namespace in User2.xml in den vollständigen Klassennamen der Schnittstelle.* 3. Verwenden Sie im Testcode (Java auf der DAO-Ebene) „s.getMapper()“, um ein Proxy-Klassenobjekt abzurufen, und verwenden Sie das Objekt, um eine Methode aufzurufen, d. h. um eine bestimmte Operation auszuführen.*/</span> 
   
  @Test//Schnittstellenorientierter Ansatz, folgende Aufrufe lauten: User2.xml 
  öffentliche Leere test2(){ 
    //Holen Sie sich zuerst SqlSession 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    UserMapper m=s.getMapper(UserMapper.class);//Proxy-Objekt abrufen List<User>list=m.all(); 
    System.out.println(Liste); 
  } 
  ///////////////test3() demonstriert die einzelne Bedingungsabfrage in der bedingten Abfrage und ruft User2.xml auf/////////////////// 
   
  @Test//Traditionelle Methode public void test3_1(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
// Liste<Benutzer> users=s.selectList("cn.hncu.domain.UserMapper.all"); 
    List<Benutzer> users=s.selectList("user2","2"); //Das zurückgegebene Ergebnis wird in List gekapselt und der interne Elementdateityp wird durch die Zuordnungsdatei System.out.println(users) konfiguriert; 
  } 
  @Test//Schnittstellenorientierter Ansatz public void test3_2(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    BenutzerMapper u=s.getMapper(BenutzerMapper.class); 
    Liste<Benutzer> Benutzer=u.user2("3"); 
    System.out.println(Benutzer); 
  } 
   
  ///////////////////Abfrage mit mehreren Bedingungen (am besten verwenden Sie für die Bedingungsabfrage Bedingungen zur Objektkapselung)/////////////// 
  @Prüfen 
  öffentliche Leere test4(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
     
    BenutzerMapper u=s.getMapper(BenutzerMapper.class); 
    Benutzer Benutzer=neuer Benutzer(); 
    Benutzer.setId("4"); 
    Benutzer.setName("Erdan"); 
    Liste<Benutzer> Benutzer=u.user3(Benutzer); 
    System.out.println(Benutzer); 
  } 
  @Prüfen 
  public void test5(){//Gib das Ergebnis mithilfe der Karte zurück 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    System.out.println(s); 
    Liste<Map<String,Object>> Benutzer=s.selectList("Benutzer4"); 
    für(Map<String,Object> Benutzer:Benutzer){ 
      System.out.println(Benutzer); 
    } 
  } 
  @Test//Setzen Sie den Eingabeparameter auf Map 
  öffentliche void test6(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    Map<String, Objekt> map=neue HashMap<String,Objekt>(); 
    map.put("id", "5"); 
    map.put("Name", "Xiaoqi"); 
    Liste<Map<String,Objekt>> Benutzer=s.selectList("user5",map); 
    für(Map<String,Object> Benutzer:Benutzer){ 
      System.out.println(Benutzer); 
    } 
  } 
}

User2.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<!-- Die aktuelle Konfigurationsdatei dient der Anzeige des schnittstellenorientierten Betriebsmodus--> 
<!--  
<mapper namespace="cn.hncu.domain.UserMapper"> 
  <select id="alle" resultType="cn.hncu.domain.User"> 
    Wählen Sie * aus Benutzern aus 
  </Auswählen> 
</mapper> 
--> 
<mapper namespace="cn.hncu.domain.UserMapper"> 
<!-- Verwendeter Typalias --> 
  <select id="alle" resultType="Benutzer"> 
    Wählen Sie * aus Benutzern aus 
  </Auswählen> 
   
  <!--Einzelbedingungsabfrage der bedingten Abfrage, die Parameter der folgenden SQL-Anweisung können beliebig geschrieben werden--> 
  <select id="user2" resultType="Benutzer" parameterType="string"> 
    Wählen Sie * aus Benutzern mit ID=#{xx} 
  </Auswählen> 
  <!--Mehrere bedingte Abfragen für bedingte Abfragen, die Parameter der folgenden SQL-Anweisungen müssen mit den Attributnamen des Wertobjekts übereinstimmen (verwenden Sie die bedingte if-Anweisung, um zu bestimmen, ob der Parameter leer ist) --> 
  <select id="user3" resultType="Benutzer" parameterType="string"> 
    Wählen Sie * aus Benutzern aus, wobei id=#{id} 
    <if test="name!=null"> 
      und name=#{name} 
    </if> 
  </Auswählen> 
  <!-- Kapselt die Abfrageergebnisse in List<Map<>> ein --> 
  <select id="Benutzer4" resultType="Karte"> 
    Wählen Sie * aus Benutzern aus 
  </Auswählen> 
  <!-- Kapselt die Eingabeparameter in einen Map-Typ ein --> 
  <select id="Benutzer5" resultType="hashmap" parameterType="hashmap"> 
    Wählen Sie * aus Benutzern aus, wobei id=#{id} 
    <if test="name!=null"> 
      und name=#{name} 
    </if> 
  </Auswählen> 
</mapper>

Ich sehe mybatis zum ersten Mal. Ich weiß, wie man es einfach benutzt. Ich werde das nächste Mal die spezifische, komplexe Verwendung posten (CRUD der Datenbank und einige Details während der Verwendung).

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Eingehende Untersuchung und Konstruktion von Spring + SpringMVC + MyBatis (Teil 3) Analyse der globalen Konfigurationsdatei von MyBatis
  • Detaillierte Erläuterung zum Schreiben der MyBatis Batch Insert Data Mapper-Konfigurationsdatei
  • Detaillierte Erläuterung des Beispiels einer Mybatis-Projektkonfigurationsdatei
  • So schreiben und verwenden Sie die MyBatis-Konfigurationsdatei
  • So überprüfen Sie die Mybatis SqlMapper-Konfigurationsdatei mit XSD (2)
  • So überprüfen Sie die Mybatis SqlMapper-Konfigurationsdatei mit XSD (1)
  • Detaillierte Erklärung der perfektesten Konfigurationsdatei für Mybatis Generator (Vollversion)
  • Einführung in die Mybatis-Konfigurationsdatei_Powernode Java Academy

<<:  8 Befehle zur effektiven Verwaltung von Prozessen in Linux

>>:  Native JS-Implementierung der Lupenkomponente

Artikel empfehlen

Details zur Verwendung der JS-Tag-Syntax

Inhaltsverzeichnis 1. Einführung in Label-Anweisu...

Detaillierte Einführung in Robots.txt

Robots.txt ist eine reine Textdatei, in der Websi...

Beispiele für ES6-Schleifen und iterierbare Objekte

Dieser Artikel untersucht die ES6-for...of-Schlei...

So fragen Sie Bilder in einem privaten Register ab oder erhalten sie

Docker fragt Bilder in einem privaten Register ab...

dh Filtersammlung

Der IE hat uns in der frühen Entwicklungsphase Ko...

Detaillierte Erläuterung der ersten Erfahrungen mit Vue3.0 + TypeScript + Vite

Inhaltsverzeichnis Projekterstellung Projektstruk...

Detaillierte Erklärung der Kernkonzepte und der grundlegenden Verwendung von Vuex

Inhaltsverzeichnis einführen Start Installieren ①...

Block- und Zeilenelemente, Sonderzeichen und Verschachtelungsregeln in HTML

Wenn wir die Verschachtelungsregeln grundlegender...

React-Tipps zeigen Ihnen, wie Sie Probleme mit Hook-Abhängigkeiten beseitigen

Ein sehr häufiges Szenario in react -Projekten: c...

Detaillierte Erläuterung der Beispiele für CSS-Gewichtswerte (Kaskadierung)

•Es gibt viele Selektoren in CSS. Was passiert, w...

Vue3 basierend auf der Skript-Setup-Syntax $refs-Verwendung

Inhaltsverzeichnis 1. Vue2-Syntax 2. Nutzung von ...

Ideen und Codes zur Implementierung der Vuex-Datenpersistenz

Was ist Vuex vuex: ist ein speziell für vue.js en...

Vue-Praxis zur Vermeidung mehrfacher Klicks

Im Allgemeinen werden Klickereignisse in verschie...