Artikelverzeichnis
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
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
1.1 Allgemeine Konfigurationsanalyse
1.1.1 Umgebungsbezeichnung (Konfiguration der Datenbankumgebung, Unterstützung für die Konfiguration mehrerer Umgebungen)
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
1.1.4 typeAliases-Tag (Typ-Aliase, Kurzname für den Java-Typ festlegen)
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>