Teknologian jakaminen

[MyBatis] MyBatis teoria 40 kysymystä (2)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

MyBatis teoria 40 kysymystä》Sisältää seuraavat 2 artikkelia:


MyBatis teoria 40 kysymystä (2)

21. Kuinka saada luotu ensisijainen avain?

Lisää uusi tunniste:keyProperty=“ID” Se siitä.

<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
	insert into user(user_name, user_password, create_time)
	values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
  • 1
  • 2
  • 3
  • 4

22. MilloinEntiteettiluokkaMitä minun pitäisi tehdä, jos määritteiden nimet poikkeavat taulukon kenttien nimistä?

(1) Kyselemällä SQL Määrittele käskyssä olevan kentän nimen alias, jotta kentän nimen alias on yhdenmukainen entiteettiluokan määritteen nimen kanssa.

<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
	select order_id id, order_no orderno, order_price price form orders
	where order_id=#{id};
</select>
  • 1
  • 2
  • 3
  • 4

(2) Hyväksytty <resultMap> Kenttien nimien ja entiteettiluokkien attribuuttien nimien välisen vastaavuuden kartoittaminen.

<select id="getOrder" parameterType="int" resultMap="orderResultMap">
	select * from orders where order_id=#{id}
</select>

<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
	<!-- 用id属性来映射主键字段 -->
	<id property="id" column="order_id">
	<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
	<result property="orderno" column="order_no" />
	<result property="price" column="order_price" />
</reslutMap>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

23. Mitä tapoja kirjoittaa Mapper?

(1) Käyttöliittymän toteutusluokan periytyminen SqlSessionDaoSupport: Jotta voit käyttää tätä menetelmää, sinun on kirjoitettava mapper käyttöliittymä,mapper Käyttöliittymän toteutusluokka,mapper.xml asiakirja.

  • olla olemassa sqlMapConfig.xml Keskikokoinen kokoonpanomapper.xml s asema.
<mappers>
	<mapper resource="mapper.xml 文件的地址" />
	<mapper resource="mapper.xml 文件的地址" />
</mappers>
  • 1
  • 2
  • 3
  • 4
  • määritelmä mapper käyttöliittymä.
  • Toteuta luokkaintegraatio SqlSessionDaoSupportmapper Voidaan käyttää menetelmissäthis.getSqlSession() Suorita tietojen lisääminen, poistaminen, muokkaaminen ja tarkistaminen.
  • spring kokoonpano.
<bean id=" " class="mapper 接口的实现">
	<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
  • 1
  • 2
  • 3

(2) Käyttö org.mybatis.spring.mapper.MapperFactoryBean

  • olla olemassa sqlMapConfig.xml Keskikokoinen kokoonpanomapper.xml asema josmapper.xml jamapper Liitännöillä on sama nimi ja ne ovat samassa hakemistossa, joten asetuksia ei tarvita tässä.
  • määritelmä mapper käyttöliittymä.
<mappers>
	<mapper resource="mapper.xml 文件的地址" />
	<mapper resource="mapper.xml 文件的地址" />
</mappers>
  • 1
  • 2
  • 3
  • 4
  • mapper.xml keskellänamespace vartenmapper Käyttöliittymän osoite.
  • mapper Menetelmän nimi käyttöliittymässä jamapper.xml määritelty vuonnastatement /id ole johdonmukainen.
  • Spring määritelty vuonna.
<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
	<property name="mapperInterface" value="mapper 接口地址" />
	<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
  • 1
  • 2
  • 3
  • 4

(3) Käyttö mapper skanneri.

  • mapper.xml Asiakirjan kirjoittaminen.
    • mapper.xml keskellänamespace vartenmapper käyttöliittymän osoite;
    • mapper Menetelmän nimi käyttöliittymässä jamapper.xml määritelty vuonnastatement /id ole johdonmukainen;
    • Jos mapper.xml jamapper Jos käyttöliittymän nimi pysyy yhtenäisenä, ei ole tarvettasqlMapConfig.xml Määritä sisään.
  • määritelmä mapper käyttöliittymä.Ilmoitusmapper.xml tiedoston nimi jamapper Liitäntöjen nimien on oltava johdonmukaisia ​​ja sijoitettava samaan hakemistoon.
  • Kokoonpano mapper skanneri.
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="mapper 接口包地址"></property>
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
  • 1
  • 2
  • 3
  • 4
  • Kun olet käyttänyt skanneria alkaen spring Ota säiliöstämapper toteutusobjekti.

24. Mikä on MyBatis käyttöliittymän sitominen? Mitkä ovat toteutustavat?

Käyttöliittymän sidonta on rajapinnan määrittäminen mielivaltaisesti MyBatisissa ja sitten käyttöliittymän menetelmien yhdistäminen SQL:n kanssa lausuntoSidonta, voimme kutsua suoraan käyttöliittymämenetelmää, joten verrattuna alkuperäiseen SqlSession Tarjotut menetelmät antavat meille joustavammat valinnat ja asetukset.

On kaksi tapaa toteuttaa käyttöliittymän sidonta:

  • Sidonta merkintöjen kautta on lisättävä @Select@Update Odota SQL-käskyjä sisältävien huomautusten sitoutumista;
  • kulkea xml Kirjoita SQL sidottavaksi. Tässä tapauksessa sinun on määritettäväxml kartoitustiedostossanamespace On oltava käyttöliittymän koko polkunimi.Kun SQL-käsky on suhteellisen yksinkertainen, käytä annotaatioiden sidontaa. Kun SQL-käsky on suhteellisen monimutkainen, käytäxml Sidonta, yleiskäyttöinenxml Sitoja on enemmän.

25. Mitä vaatimuksia on soittaa MyBatisin karttaliittymän avulla?

  • Mapper-käyttöliittymän menetelmän nimi ja mapper.xml jokaisesta kohdassa määritellystä sql:stäid sama.
  • Mapper-liitäntämenetelmien syöttöparametrityypit ja mapper.xml jokaisesta kohdassa määritellystä sql:stäparameterType samaa tyyppiä.
  • Mapper-liitäntämenetelmien lähtöparametrityypit ja mapper.xml jokaisesta kohdassa määritellystä sql:stäresultType samaa tyyppiä.
  • Mapper.xml tiedostossanamespace Tämä on Mapper-käyttöliittymän luokkapolku.

26. Kuinka tämä Dao-käyttöliittymä toimii? Jos menetelmällä Dao-rajapinnassa on erilaiset parametrit, voiko menetelmä olla ylikuormitettu?

  • Dao-rajapinnan toimintaperiaate on JDK:n dynaaminen välityspalvelin. MyBatis käyttää JDK-välityspalvelinta luodakseen välityspalvelimen Dao-rajapinnalle ajon aikana. proxy objekti, välityspalvelinobjektiproxy Käyttöliittymämenetelmät siepataan ja suoritetaan sen sijaanMappedStatement edustaa SQL:ää ja palauttaa sitten SQL-suoritustulokset.
  • Dao-rajapinnan menetelmiä ei voi ylikuormittaa, koska Täysin hyväksytty nimi + menetelmän nimi Tallentaminen ja strategioiden löytäminen.

27. Voiko MyBatisin Xml-kartoitustiedostossa id toistaa eri Xml-kartoitustiedostoissa?

  • Erilaiset Xml-kartoitustiedostot, jos ne on määritetty namespace,Niin id Voidaan toistaa, jos sitä ei ole määritettynamespace,Niin id ei voi toistaa;namespace Ei vaadita, vain paras käytäntö.
  • Syy on namespace + id on kuin M ap &lt; S string , M apped Statement &gt; Kartta<String, MappedStatement>Mas<Strsisääng,MasedStatement> Käytettävä avain, jos sitä ei olenamespace, vain loput id,Niin,id Päällekkäisyys voi saada tiedot korvaamaan toisensa.Sain sennamespace, luonto id Voit toistaa sen,namespace eri,namespace + id Luonnollisesti se on erilainen.

28. Kuvaile lyhyesti MyBatisin Xml-kartoitustiedoston ja MyBatisin sisäisen tietorakenteen välistä kartoitussuhdetta?

MyBatis kapseloi kaikki Xml-määritystiedot All-In-One-raskaita objekteja Configuration sisäinen. Xml-kartoitustiedostossa<parameterMap> Tunniste jäsennetään muodossaParameterMap objekti, jokainen sen alielementti jäsennetään muodossaParameterMapping esine.<resultMap> Tunniste jäsennetään muodossaResultMap objekti, jokainen sen alielementti jäsennetään muodossaResultMapping esine.Joka<select><insert><update><delete> Tunnisteet jäsennetään muodossaMappedStatement Objekti, tagissa oleva SQL jäsennetään nimelläBoundSql esine.

29.Kuinka MyBatis kapseloi SQL-suoritustulokset kohdeobjekteihin ja palauttaa ne? Mitkä ovat kartoituslomakkeet?

  • Ensimmäinen on käyttää <resultMap> Tunnisteet määrittelevät sarakkeiden nimien ja objektien attribuuttien nimien välisen yhdistämisen yksitellen.
  • Toinen on käyttää SQL-sarakealias-toimintoa ja kirjoittaa sarakkeen alias objektin attribuutin nimeksi, kuten T_NAME AS NAME, objektin attribuutin nimi on yleensä name, pienet kirjaimet, mutta sarakkeiden nimissä ei ole merkitystä T_NAME AS NaMe, MyBatis voi silti toimia normaalisti.

Kun sarakkeiden ja määritteiden nimien välinen suhde on kartoitettu, MyBatis luo objekteja heijastuksen avulla ja määrittää heijastuksen avulla arvot yksitellen kohteen ominaisuuksille ja palauttaa ne niille ominaisuuksille, jotka eivät löydä kartoitussuhdetta , tehtävää ei voida suorittaa loppuun.

30. Mitä muita tunnisteita on Xml-kartoitustiedostossa yleisten lisäysten |.

On monia muita tunnisteita, <resultMap><parameterMap><sql><include><selectKey>, sekä dynaaminen SQL 9 9 9 tunnisteet:trimwheresetforeachifchoosewhenotherwisebind odota.sisään<sql> SQL-fragmenttitunnisteiden kohdalla hyväksy<include> Tunnisteet esittelevät SQL-fragmentteja,<selectKey> Luo käytäntötunnisteet ensisijaisille avaimille, jotka eivät tue automaattista lisäystä.

31. Jos MyBatis-kartoitustiedostossa A-tunniste viittaa B-tunnisteen sisältöön include:n kautta, voidaanko B-tunniste määritellä A-tunnisteen jälkeen vai pitääkö se määrittää A-tunnisteen eteen?

Vaikka MyBatis jäsentää Xml-kartoitustiedoston järjestyksessä, viitattu B-tunniste voidaan silti määrittää missä tahansa, ja MyBatis voi tunnistaa sen oikein.

Periaate on, että MyBatis jäsentää A-tunnisteen ja huomaa, että A-tunniste viittaa B-tunnisteeseen, mutta B-tunnistetta ei ole jäsennetty eikä sitä ole vielä olemassa. Tällä hetkellä MyBatis merkitsee A-tunnisteen ratkaisemattomaksi ja jatkaa sitten Jäsentääksesi jäljellä olevat tunnisteet, mukaan lukien B. Tunnisteet, kun kaikki tunnisteet on jäsennetty, MyBatis jäsentää uudelleen ratkaisemattomiksi merkityt tunnisteet.

32. Voiko MyBatis suorittaa yksi-moneen ja yksi-yhteen yhteyskyselyitä. Mitkä ovat toteutustavat?

Voi, ei vain voi Yksi monille, yksi yhteen,Tarpeeksi hyvin Monista moneen, monta yhteen . Tämä saavutetaan seuraavasti:

  • Lähetä erillinen SQL kyselyyn liittyvään objektiin, määritä se pääobjektille ja palauta sitten pääobjekti.
  • Käyttämällä sisäkkäisiä kyselyitä, kuten JOIN-kyselyjä, yksi osa on objektin A attribuuttiarvo ja toinen osa on liitetyn objektin B attribuutin arvo. Etuna on, että niin kauan kuin yksi attribuutin arvo lähetetään, pääobjekti ja liittyvä objekti löytyy.
  • alikysely

33. Voiko MyBatis kartoittaa Enum-luetteloluokan?

MyBatis voi kartoittaa luettelointiluokkia, vaan se voi kartoittaa minkä tahansa kohteen taulukon sarakkeeseen.Kartoitusmenetelmä on mukautettuTypeHandler, saavuttaa TypeHandler /setParameter() jagetResult() käyttöliittymämenetelmiä.

TypeHandler Siinä on kaksi toimintoa, joista toinen on täydentääjavaType kohtaanjdbcType Muunnos, toinen on valmisjdbcType kohtaanjavaType Muunnos näkyy muodossasetParameter() jagetResult() Molemmat menetelmät edustavat sql-kysymysmerkin paikkamerkkiparametrien asettamista ja vastaavasti sarakekyselyn tulosten saamista.

34.Mitä MyBatis dynaaminen SQL tekee? Millaisia ​​dynaamisia SQL:itä on olemassa? Voitko kuvailla lyhyesti dynaamisen SQL:n suoritusperiaatetta?

MyBatisin dynaaminen SQL mahdollistaa dynaamisen SQL:n kirjoittamisen tunnisteiden muodossa Xml-kartoitustiedostoon täydentämään MyBatisin tarjoamat loogisen arvioinnin ja dynaamisen liittämisen toiminnot 9 9 9 Dynaamiset SQL-tunnisteet:trimwheresetforeachifchoosewhenotherwisebind

Sen suoritusperiaate on käyttää OGNL Laske lausekkeen arvo SQL-parametriobjektista ja liitä SQL dynaamisesti lausekkeen arvon mukaan täydentääksesi dynaamisen SQL:n toimintoa.

35.Kuinka MyBatis suorittaa henkilöhaun? Mikä on hakulaajennuksen periaate?

MyBatis käyttää RowBounds Objekti on sivuttu, se on tarkoitettuResultSet Tulosjoukon suorittama muistihaku ei ole fyysistä hakua. Voit kirjoittaa parametreja suoraan fyysisellä hakutoiminnolla SQL:ssä fyysisen hakutoiminnon suorittamiseksi tai voit käyttää sivulaajennusta fyysisen sivun suorittamiseen.

Hakulaajennuksen perusperiaate on käyttää MyBatisin tarjoamaa liitännäistä mukautetun laajennuksen toteuttamiseen, kaapata laajennuksen sieppausmenetelmässä suoritettava SQL ja kirjoittaa sitten SQL uudelleen sen mukaan. kohtaan dialect Murre, lisää vastaavat fyysiset sivulausekkeet ja fyysiset sivuparametrit.

Esimerkki:

select * from student
  • 1

Kun olet siepannut SQL:n, kirjoita se uudelleen muotoon:

select t.* from (select * from student) t limit 0, 10
  • 1

36. Kuvaile lyhyesti MyBatis-liitännäisen toimintaperiaate ja miten liitännäinen kirjoitetaan?

MyBatis voi kirjoittaa vain ParameterHandlerResultSetHandlerStatementHandlerExecutor Tämä 4 4 4 Eräänlainen käyttöliittymälaajennus, MyBatis käyttää JDK:n dynaamista välityspalvelinta luomaan välityspalvelinobjekteja liitäntöille, jotka on siepattava liitäntämenetelmän sieppaustoiminnon toteuttamiseksi. 4 4 4 käyttöliittymäobjektin menetelmä, se siirtyy erityisesti sieppausmenetelmäänInvocationHandler /invoke() Menetelmät sieppaavat tietysti vain ne menetelmät, jotka määrität siepattavaksi.

Ota käyttöön MyBatis Interceptor Käyttöliittymä ja ohitusintercept() Menetelmä, kirjoita sitten lisäosan huomautuksia ja määritä minkä käyttöliittymän menetelmät haluat siepata. Muista, että älä unohda määrittää määritystiedostoon kirjoittamaasi laajennusta.

37. MyBatisin ensimmäisen ja toisen tason välimuisti

  • Tason 1 välimuisti: perustuu PerpetualCache HashMap-paikallinen välimuisti, sen tallennusalue on Session, kun istuntoflush taiclose Sen jälkeen kaikki istunnon välimuistit tyhjennetään ja ensimmäisen tason välimuisti otetaan oletusarvoisesti käyttöön.
  • Toisen tason välimuistilla on sama mekanismi kuin ensimmäisen tason välimuistilla, ja sitä käytetään myös oletuksena. PerpetualCache, HashMap-tallennustila, ero on siinä, että sen tallennuslaajuus on MapperNamespace), ja tallennuslähdettä voidaan mukauttaa, kuten Ehcache .Toisen tason välimuisti ei ole oletuksena käytössä, jotta toisen tason välimuisti voidaan ottaa käyttöön, toisen tason välimuistin attribuuttiluokka on otettava käyttöön.Serializable Serialisointirajapinta (voidaan käyttää objektin tilan tallentamiseen), konfiguroitavissa sen kartoitustiedostossa<cache/>
  • Välimuistin tietojen päivitysmekanismille, kun tietty laajuus (ensimmäisen tason välimuistin istunto / toisen tason välimuistin nimiavaruus) on C / U / D Toiminnon jälkeen oletusarvoisesti kaikki tämän alueen tiedostotselect Välimuisti tulee olemaanclear