mybatis grundlegende Informationen


Vorwort

Denken Sie an die grundlegenden Informationen von mybatis


1. Mybatis Tradition und Agentenentwicklung

Schreiben Sie die UserDao-Oberfläche

public interface UserDao {
    
    
	List<User> findAll() throws IOException;
} 

Schreiben Sie die UserDaoImpl-Implementierung

public class UserDaoImpl implements UserDao {
    
    
	public List<User> findAll() throws IOException {
    
    
	InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
	SqlSession sqlSession = sqlSessionFactory.openSession();
	List<User> userList = sqlSession.selectList("userMapper.findAll");
	sqlSession.close();
	return userList;
	}
}

Den traditionellen Weg testen

@Test
public void testTraditionDao() throws IOException {
    
    
	UserDao userDao = new UserDaoImpl();
	List<User> all = userDao.findAll();
	System.out.println(all); 
}


Agentenentwicklungsmethode : Das mybatis-Framework erstellt dynamische Agentenobjekte der Schnittstelle gemäß der Definition der Schnittstelle m, und der Methodenkörper des Agentenobjekts ist der gleiche wie der der oben beschriebenen Dao-Schnittstellenimplementierungsklassenmethode.
Die Entwicklung der Mapper-Schnittstelle muss den folgenden Spezifikationen entsprechen:
1. Der Namespace in der Datei Mapper.xml entspricht dem vollständig qualifizierten Namen der Mapper-Schnittstelle. 2. Der Name der Mapper-Schnittstellenmethode entspricht
der ID jeder in definierten Anweisung
Mapper.xml 3. Die Eingabe der Mapper-Schnittstellenmethode Der Parametertyp entspricht dem Parametertyp jedes in
mapper.xml definierten SQL. 4. Der Ausgabeparametertyp der Mapper-Schnittstellenmethode entspricht dem Ergebnistyp jedes definierten SQL im mapper.xml
Fügen Sie hier eine Bildbeschreibung ein
Test-Proxy-Modus

@Test
public void testProxyDao() throws IOException {
    
    
	InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
	SqlSession sqlSession = sqlSessionFactory.openSession();
	//获得MyBatis框架⽣成的UserMapper接⼝的实现类
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	User user = userMapper.findById(1);
	System.out.println(user);
	sqlSession.close();
}

Zweitens: Mybatis-Konfigurationsdatei

1. Die Kernkonfigurationsdatei SqlMapConfig.xml

Fügen Sie hier eine Bildbeschreibung ein

1.1 Allgemeine Konfigurationsanalyse

1.1.1 Umgebungsbezeichnung (Konfiguration der Datenbankumgebung, Unterstützung für die Konfiguration mehrerer Umgebungen)

Fügen Sie hier eine Bildbeschreibung ein
Darunter:
Es gibt zwei Arten von Transaktionsmanagern (transactionManager):

  • JDBC: Diese Konfiguration verwendet direkt die Commit- und Rollback-Einstellungen von JDBC, die für die Verwaltung der Transaktionsdomäne auf der von der Datenquelle erhaltenen Verbindung
    basieren.
  • VERWALTET: Diese Konfiguration macht fast nichts. Es wird niemals eine Verbindung festgeschrieben oder zurückgesetzt, sondern der Container kann den gesamten
    Lebenszyklus der Transaktion verwalten (z. B. den Kontext eines JEE-Anwendungsservers). Die Verbindung wird standardmäßig geschlossen, aber einige Container möchten dies nicht.
    Daher müssen Sie die Eigenschaft closeConnection auf false setzen, um zu verhindern, dass das Standardverhalten geschlossen wird.

Es gibt drei Arten von Datenquellen:

  • UNPOOLED: Die Implementierung dieser Datenquelle öffnet und schließt die Verbindung jedes Mal, wenn sie angefordert wird.
  • POOLED: Die Realisierung dieser Datenquelle verwendet das Konzept "Pool", um JDBC-Verbindungsobjekte zu organisieren.
  • JNDI: Diese Datenquelle ist für die Verwendung in Containern wie EJB oder Anwendungsservern implementiert. Der Container kann
    die Datenquelle zentral oder extern konfigurieren und dann einen Verweis auf den JNDI-Kontext platzieren.

1.1.2 Mapper-Tag (die Rolle besteht darin, die Karte zu laden)

Lademethode:

•使用相对于类路径的资源引用,例如:
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
•使用完全限定资源定位符(URL),例如:
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
•使用映射器接口实现类的完全限定类名,例如:
<mapper class="org.mybatis.builder.AuthorMapper"/>
•将包内的映射器接口实现全部注册为映射器,例如:
<package name="org.mybatis.builder"/>

1.1.3 Registerkarte Eigenschaften

In der tatsächlichen Entwicklung ist es üblich, die Konfigurationsinformationen der Datenquelle separat in eine Eigenschaftendatei zu extrahieren. Dieses Tag kann zusätzliche Konfigurationseigenschaftendateien laden
Fügen Sie hier eine Bildbeschreibung ein

1.1.4 typeAliases-Tag (Typ-Aliase, Kurzname für den Java-Typ festlegen)

! [] (https://img-blog.csdnimg.cn/20210112183132344.png
Das mybatis-Framework hat bereits einige häufig verwendete Arten von Aliasen eingerichtet:

Alias Art der Zuordnung
_Byte Byte
_lange lange
_kurz kurz
_int int
_ganze Zahl int
_doppelt doppelt
_schweben schweben
_boolean Boolescher Wert
Zeichenfolge String
Byte Byte
lange Lange
kurz Kurz
int Ganze Zahl
ganze Zahl Ganze Zahl
doppelt Doppelt
schweben Schweben
Boolescher Wert Boolescher Wert
Datum Datum
Dezimal BigDecimal
bigdecimal BigDecimal
Objekt Objekt
Karte Karte
Hashmap HashMap
Liste Liste
Anordnungsliste Anordnungsliste
Sammlung Sammlung
Iterator Iterator

2. Zuordnungskonfigurationsdatei mapper.xml

wenn Urteil

<select id="findByCondition" parameterType="user" resultType="user">
	select * from User
	<where>
		<if test="id!=0">
			and id=#{
    
    id}
		</if>
		<if test="username!=null">
			and username=#{
    
    username}
		</if>
	</where>
</select>

Spleißen von Loop SQL

<select id="findByIds" parameterType="list" resultType="user">
	select * from User
	<where>
		<foreach collection="list" open="id in(" close=")" item="id" separator=",">
			#{
    
    id}
		</foreach>
	</where>
</select>

Das foreach-Tag wird verwendet, um die Sammlung zu durchlaufen:

  • Sammlung: Stellt die zu durchlaufenden Sammlungselemente dar. Achten Sie darauf, beim Schreiben nicht # {} zu schreiben
  • open: repräsentiert den Anfang der Anweisung
  • close: repräsentiert den Endteil
  • item: repräsentiert jedes Element der Traversal-Auflistung, den generierten Variablennamen
  • Sperator: repräsentiert das Trennzeichen

SQL-Fragmentextraktion
SQL kann doppelte SQL extrahieren, bei der Verwendung include verwenden, um Anführungszeichen zu setzen, und schließlich den Zweck der SQL-Wiederverwendung erreichen.

<!--抽取sql片段简化编写-->
<sql id="selectUser" select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
	<include refid="selectUser"></include> where id=#{
    
    id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
	<include refid="selectUser"></include>
	<where>
		<foreach collection="array" open="id in(" close=")" item="id" separator=",">
			#{
    
    id}
		</foreach>
	</where>
</select>

Ich denke du magst

Origin blog.csdn.net/weixin_39417423/article/details/112541360
Empfohlen
Rangfolge