Κοινή χρήση τεχνολογίας

[MyBatis] MyBatis theory 40 ερωτήσεις (2)

2024-07-12

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

MyBatis θεωρία 40 ερωτήσεις》Περιέχει τα ακόλουθα 2 άρθρα:


MyBatis theory 40 ερωτήσεις (2)

21. Πώς να αποκτήσετε το πρωτεύον κλειδί που δημιουργήθηκε;

Προσθήκη νέας ετικέτας:keyProperty=“ID” Αυτό είναι.

<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. ΠότεΚατηγορία οντότηταςΤι πρέπει να κάνω εάν τα ονόματα χαρακτηριστικών είναι διαφορετικά από τα ονόματα πεδίων στον πίνακα;

(1) Με ερώτημα SQL Καθορίστε το ψευδώνυμο του ονόματος πεδίου στη δήλωση για να γίνει το ψευδώνυμο του ονόματος πεδίου συνεπές με το όνομα χαρακτηριστικού της κλάσης οντότητας.

<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) Πάσο <resultMap> Για να αντιστοιχίσετε την αντιστοιχία ένα προς ένα μεταξύ ονομάτων πεδίων και ονομάτων χαρακτηριστικών κλάσεων οντοτήτων.

<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.Ποιοι είναι οι τρόποι γραφής Mapper;

(1) Κληρονομικότητα κλάσης υλοποίησης διεπαφής SqlSessionDaoSupport: Για να χρησιμοποιήσετε αυτήν τη μέθοδο, πρέπει να γράψετε mapper διεπαφή,mapper Κλάση υλοποίησης διεπαφής,mapper.xml έγγραφο.

  • υπάρχει sqlMapConfig.xml Μεσαία διαμόρφωσηmapper.xml s θέση.
<mappers>
	<mapper resource="mapper.xml 文件的地址" />
	<mapper resource="mapper.xml 文件的地址" />
</mappers>
  • 1
  • 2
  • 3
  • 4
  • ορισμός mapper διεπαφή.
  • Εφαρμογή ολοκλήρωσης τάξης SqlSessionDaoSupportmapper Μπορεί να χρησιμοποιηθεί σε μεθόδουςthis.getSqlSession() Πραγματοποιήστε προσθήκη, διαγραφή, τροποποίηση και έλεγχο δεδομένων.
  • spring διαμόρφωση.
<bean id=" " class="mapper 接口的实现">
	<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
  • 1
  • 2
  • 3

(2) Χρήση org.mybatis.spring.mapper.MapperFactoryBean

  • υπάρχει sqlMapConfig.xml Μεσαία διαμόρφωσηmapper.xml θέση εάνmapper.xml καιmapper Οι διεπαφές έχουν το ίδιο όνομα και βρίσκονται στον ίδιο κατάλογο, επομένως δεν απαιτείται ρύθμιση παραμέτρων εδώ.
  • ορισμός mapper διεπαφή.
<mappers>
	<mapper resource="mapper.xml 文件的地址" />
	<mapper resource="mapper.xml 文件的地址" />
</mappers>
  • 1
  • 2
  • 3
  • 4
  • mapper.xml Μέσηςnamespace Γιαmapper Η διεύθυνση της διεπαφής.
  • mapper Το όνομα της μεθόδου στη διεπαφή καιmapper.xml ορίζεται σεstatement τουid να είναι συνεπής.
  • Spring ορίζεται σε.
<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
	<property name="mapperInterface" value="mapper 接口地址" />
	<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
  • 1
  • 2
  • 3
  • 4

(3) Χρήση mapper ερευνητής.

  • mapper.xml Συγγραφή εγγράφων.
    • mapper.xml Μέσηςnamespace Γιαmapper Η διεύθυνση της διεπαφής.
    • mapper Το όνομα της μεθόδου στη διεπαφή καιmapper.xml ορίζεται σεstatement τουid να είναι συνεπής;
    • Αν mapper.xml καιmapper Εάν το όνομα της διεπαφής παραμένει συνεπές, δεν χρειάζεταιsqlMapConfig.xml Διαμόρφωση σε .
  • ορισμός mapper διεπαφή.Ειδοποίησηmapper.xml όνομα αρχείου καιmapper Τα ονόματα διεπαφής πρέπει να είναι συνεπή και να τοποθετούνται στον ίδιο κατάλογο.
  • Διαμόρφωση mapper ερευνητής.
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="mapper 接口包地址"></property>
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
  • 1
  • 2
  • 3
  • 4
  • Μετά τη χρήση του σαρωτή από spring Πάρτε από το δοχείοmapper αντικείμενο υλοποίησης.

24.Τι είναι MyBatis δέσμευση διεπαφής; Ποιες είναι οι μέθοδοι υλοποίησης;

Η δέσμευση διεπαφής είναι ο αυθαίρετος καθορισμός μιας διεπαφής στο MyBatis και, στη συνέχεια, ο συνδυασμός των μεθόδων στη διεπαφή με την SQL δήλωσηΔεσμευτικό, μπορούμε να καλέσουμε απευθείας τη μέθοδο διεπαφής, έτσι σε σύγκριση με την αρχική SqlSession Οι μέθοδοι που παρέχονται μας επιτρέπουν να έχουμε πιο ευέλικτες επιλογές και ρυθμίσεις.

Υπάρχουν δύο τρόποι για την υλοποίηση της σύνδεσης διεπαφής:

  • Η σύνδεση μέσω σχολιασμών είναι να προσθέσετε @Select@Update Περιμένετε να δεσμευτούν οι σχολιασμοί που περιέχουν δηλώσεις SQL.
  • πέρασμα xml Γράψτε SQL μέσα για δέσμευση Σε αυτήν την περίπτωση, πρέπει να καθορίσετεxml στο αρχείο χαρτογράφησηςnamespace Πρέπει να είναι το πλήρες όνομα διαδρομής της διεπαφής.Όταν η πρόταση SQL είναι σχετικά απλή, χρησιμοποιήστε τη δέσμευση σχολίων Όταν η πρόταση SQL είναι σχετικά πολύπλοκη, χρησιμοποιήστεxml Δεσμευτικό, γενικής χρήσηςxml Υπάρχουν περισσότερα δεσίματα.

25. Ποιες είναι οι απαιτήσεις για κλήση χρησιμοποιώντας τη διεπαφή χαρτογράφησης του MyBatis;

  • Όνομα μεθόδου διασύνδεσης χαρτογράφησης και mapper.xml για κάθε sql που ορίζεται στοid ίδιο.
  • Οι τύποι παραμέτρων εισόδου των μεθόδων διασύνδεσης Mapper και mapper.xml για κάθε sql που ορίζεται στοparameterType του ίδιου τύπου.
  • Οι τύποι παραμέτρων εξόδου των μεθόδων διασύνδεσης Mapper και mapper.xml για κάθε sql που ορίζεται στοresultType του ίδιου τύπου.
  • Mapper.xml στο αρχείοnamespace Αυτή είναι η διαδρομή κλάσης της διεπαφής Mapper.

26. Πώς λειτουργεί αυτή η διεπαφή Dao; Εάν η μέθοδος στη διεπαφή Dao έχει διαφορετικές παραμέτρους, μπορεί να υπερφορτωθεί η μέθοδος;

  • Η αρχή λειτουργίας της διεπαφής Dao είναι ο δυναμικός διακομιστής μεσολάβησης JDK Το MyBatis θα χρησιμοποιήσει το δυναμικό διακομιστή μεσολάβησης JDK για να δημιουργήσει έναν διακομιστή μεσολάβησης για τη διεπαφή Dao κατά την εκτέλεση. proxy αντικείμενο, αντικείμενο μεσολάβησηςproxy Οι μέθοδοι διεπαφής θα υποκλαπούν και θα εκτελεστούν αντ' αυτούMappedStatement αντιπροσωπεύει την SQL και, στη συνέχεια, επιστρέφει τα αποτελέσματα εκτέλεσης της SQL.
  • Δεν είναι δυνατή η υπερφόρτωση των μεθόδων στη διεπαφή Dao επειδή Πλήρως πιστοποιημένο όνομα + όνομα μεθόδου Αποθήκευση και εύρεση στρατηγικών.

27. Στο αρχείο αντιστοίχισης Xml του MyBatis, μπορεί να επαναληφθεί το id σε διαφορετικά αρχεία αντιστοίχισης Xml;

  • Διαφορετικά αρχεία αντιστοίχισης Xml, εάν έχουν ρυθμιστεί namespace,Ετσι id Μπορεί να επαναληφθεί εάν δεν έχει ρυθμιστείnamespace,Ετσι id δεν μπορεί να επαναληφθεί τελικάnamespace Δεν απαιτείται, απλώς βέλτιστη πρακτική.
  • Ο λόγος είναι namespace + id ειναι οπως M ap &lt; S tring , M apped S tatement &gt; Χάρτης<String, MappedStatement>ΜέναΠ<Αγrσεσολ,ΜένασελμιρεΑγέναtμιΜμιnt> Το κλειδί για χρήση, αν δεν υπάρχειnamespace, μόνο τα υπόλοιπα id,Ετσι,id Η αντιγραφή μπορεί να προκαλέσει την αντικατάσταση δεδομένων μεταξύ τους.Το έπιασαnamespace,φύση id Μπορείτε να το επαναλάβετε,namespace διαφορετικός,namespace + id Φυσικά είναι διαφορετικό.

28. Περιγράψτε συνοπτικά τη σχέση αντιστοίχισης μεταξύ του αρχείου αντιστοίχισης Xml του MyBatis και της εσωτερικής δομής δεδομένων του MyBatis;

Το MyBatis ενσωματώνει όλες τις πληροφορίες διαμόρφωσης Xml σε βαρέα αντικείμενα Όλα σε Ένα Configuration εσωτερικός. Στο αρχείο αντιστοίχισης Xml,<parameterMap> Η ετικέτα θα αναλυθεί ωςParameterMap αντικείμενο, κάθε ένα από τα θυγατρικά στοιχεία του θα αναλυθεί ωςParameterMapping αντικείμενο.<resultMap> Η ετικέτα θα αναλυθεί ωςResultMap αντικείμενο, κάθε ένα από τα θυγατρικά στοιχεία του θα αναλυθεί ωςResultMapping αντικείμενο.Κάθε<select><insert><update><delete> Οι ετικέτες θα αναλυθούν ωςMappedStatement Αντικείμενο, η SQL στην ετικέτα θα αναλυθεί ωςBoundSql αντικείμενο.

29.Πώς το MyBatis ενσωματώνει τα αποτελέσματα της εκτέλεσης SQL σε αντικείμενα-στόχους και τα επιστρέφει; Ποιες είναι οι φόρμες χαρτογράφησης;

  • Το πρώτο είναι να χρησιμοποιήσετε <resultMap> Οι ετικέτες ορίζουν τη σχέση αντιστοίχισης μεταξύ των ονομάτων στηλών και των ονομάτων χαρακτηριστικών αντικειμένων ένα προς ένα.
  • Το δεύτερο είναι να χρησιμοποιήσετε τη συνάρτηση ψευδωνύμου στήλης SQL και να γράψετε το ψευδώνυμο στήλης ως όνομα χαρακτηριστικού αντικειμένου, όπως π.χ. T_NAME AS NAME, το όνομα του χαρακτηριστικού αντικειμένου είναι γενικά name, πεζά, αλλά τα ονόματα των στηλών δεν κάνουν διάκριση πεζών-κεφαλαίων T_NAME AS NaMe, το MyBatis μπορεί να λειτουργήσει κανονικά.

Αφού έχει τη σχέση αντιστοίχισης μεταξύ ονομάτων στηλών και ονομάτων χαρακτηριστικών, το MyBatis δημιουργεί αντικείμενα μέσω ανάκλασης και χρησιμοποιεί την ανάκλαση για να εκχωρήσει τιμές μία προς μία στις ιδιότητες του αντικειμένου και να τις επιστρέψει για εκείνες τις ιδιότητες που δεν μπορούν να βρουν τη σχέση αντιστοίχισης , η εργασία δεν μπορεί να ολοκληρωθεί.

30.Εκτός από τις κοινές ενημερωμένες ετικέτες διαγραφής |.

Υπάρχουν πολλές άλλες ετικέτες, <resultMap><parameterMap><sql><include><selectKey>, συν δυναμική SQL 9 9 9 ετικέτες:trimwheresetforeachifchoosewhenotherwisebind Περίμενε.σε<sql> Για ετικέτες αποσπασμάτων SQL, περάστε<include> Οι ετικέτες εισάγουν τμήματα SQL,<selectKey> Δημιουργήστε ετικέτες πολιτικής για πρωτεύοντα κλειδιά που δεν υποστηρίζουν αυτόματη αύξηση.

31. Στο αρχείο αντιστοίχισης MyBatis, εάν η ετικέτα A αναφέρεται στο περιεχόμενο της ετικέτας B μέσω του συμπερίληψης, μπορεί η ετικέτα B να οριστεί μετά την ετικέτα A ή πρέπει να οριστεί μπροστά από την ετικέτα A;

Παρόλο που το MyBatis αναλύει το αρχείο αντιστοίχισης Xml με τη σειρά, η αναφερόμενη ετικέτα B μπορεί ακόμα να οριστεί οπουδήποτε και το MyBatis μπορεί να την αναγνωρίσει σωστά.

Η αρχή είναι ότι το MyBatis αναλύει την ετικέτα A και βρίσκει ότι η ετικέτα A αναφέρεται στην ετικέτα B, αλλά η ετικέτα B δεν έχει αναλυθεί και δεν υπάρχει ακόμα αυτήν τη στιγμή, το MyBatis θα επισημάνει την ετικέτα ως μη επιλυμένη και στη συνέχεια θα συνεχίσει για να αναλύσει τις υπόλοιπες ετικέτες, συμπεριλαμβανομένων των ετικετών B., αφού αναλυθούν όλες οι ετικέτες, το MyBatis θα αναλύσει εκ νέου αυτές τις ετικέτες που έχουν επισημανθεί ως μη επιλυμένες Κατά την ανάλυση της ετικέτας A, η ετικέτα B υπάρχει ήδη και η ετικέτα A μπορεί να αναλυθεί κανονικά.

32. Μπορεί το MyBatis να εκτελέσει ερωτήματα επικοινωνίας ένα προς πολλά και ένα προς ένα Ποιες είναι οι μέθοδοι υλοποίησης;

Μπορεί, όχι μόνο μπορεί Ένας προς πολλούς, ένας προς έναν,Αρκετά καλά Πολλά-προς-πολλά, πολλά-προς-ένα . Αυτό επιτυγχάνεται ως εξής:

  • Στείλτε μια ξεχωριστή SQL για να κάνετε ερώτημα στο σχετικό αντικείμενο, να το αντιστοιχίσετε στο κύριο αντικείμενο και, στη συνέχεια, να επιστρέψετε το κύριο αντικείμενο.
  • Χρησιμοποιώντας ένθετα ερωτήματα, παρόμοια με τα ερωτήματα JOIN, το ένα μέρος είναι η τιμή χαρακτηριστικού του αντικειμένου Α και το άλλο μέρος είναι η τιμή χαρακτηριστικού του συσχετισμένου αντικειμένου Β. Το πλεονέκτημα είναι ότι εφόσον αποστέλλεται μία τιμή χαρακτηριστικού, το κύριο αντικείμενο και το μπορεί να βρεθεί σχετικό αντικείμενο.
  • υποερώτημα

33.Μπορεί το MyBatis να χαρτογραφήσει την κλάση απαρίθμησης Enum;

Το MyBatis μπορεί να αντιστοιχίσει κλάσεις απαρίθμησης Όχι μόνο μπορεί να αντιστοιχίσει τάξεις απαρίθμησης, το MyBatis μπορεί να αντιστοιχίσει οποιοδήποτε αντικείμενο σε μια στήλη του πίνακα.Η μέθοδος χαρτογράφησης είναι προσαρμοσμένηTypeHandler,ολοκληρώσει TypeHandler τουsetParameter() καιgetResult() μεθόδους διεπαφής.

TypeHandler Έχει δύο λειτουργίες, η μία είναι να ολοκληρώσει τοjavaType προς τηνjdbcType Η μετατροπή, η δεύτερη ολοκληρώθηκεjdbcType προς τηνjavaType Η μετατροπή αντικατοπτρίζεται ωςsetParameter() καιgetResult() Οι δύο μέθοδοι αντιπροσωπεύουν τη ρύθμιση των παραμέτρων κράτησης θέσης ερωτηματικού sql και τη λήψη των αποτελεσμάτων του ερωτήματος στήλης αντίστοιχα.

34.Τι κάνει η MyBatis δυναμική SQL; Τι είδους δυναμική SQL υπάρχουν; Μπορείτε να περιγράψετε εν συντομία την αρχή εκτέλεσης της δυναμικής SQL;

Το MyBatis δυναμικό SQL μας επιτρέπει να γράψουμε δυναμική SQL με τη μορφή ετικετών στο αρχείο αντιστοίχισης Xml για να ολοκληρώσουμε τις λειτουργίες λογικής κρίσης και δυναμικής συναρμολόγησης της SQL που παρέχει 9 9 9 Δυναμικές ετικέτες SQL:trimwheresetforeachifchoosewhenotherwisebind

Η αρχή εκτέλεσής του είναι η χρήση OGNL Υπολογίστε την τιμή της έκφρασης από το αντικείμενο παραμέτρου SQL και συνδυάστε δυναμικά την SQL σύμφωνα με την τιμή της παράστασης για να ολοκληρώσετε τη λειτουργία της δυναμικής SQL.

35.Πώς εκτελεί το MyBatis τη σελιδοποίηση; Ποια είναι η αρχή της προσθήκης σελιδοποίησης;

Το MyBatis χρησιμοποιεί RowBounds Το αντικείμενο είναι σελιδοποιημένο, είναι γιαResultSet Η σελιδοποίηση μνήμης που εκτελείται από το σύνολο αποτελεσμάτων δεν είναι φυσική σελιδοποίηση Μπορείτε να γράψετε απευθείας παραμέτρους με φυσική σελιδοποίηση σε SQL για να ολοκληρώσετε τη λειτουργία φυσικής σελιδοποίησης ή μπορείτε να χρησιμοποιήσετε μια προσθήκη σελιδοποίησης για να ολοκληρώσετε τη φυσική σελιδοποίηση.

Η βασική αρχή του plug-in σελιδοποίησης είναι η χρήση της διεπαφής προσθήκης που παρέχεται από το MyBatis για την υλοποίηση μιας προσαρμοσμένης προσθήκης, η παρεμπόδιση της SQL που πρόκειται να εκτελεστεί στη μέθοδο υποκλοπής της προσθήκης και, στη συνέχεια, η επανεγγραφή της SQL σύμφωνα με προς την dialect Διάλεκτος, προσθέστε αντίστοιχες δηλώσεις φυσικής σελιδοποίησης και παραμέτρους φυσικής σελιδοποίησης.

Παράδειγμα:

select * from student
  • 1

Αφού υποκλέψετε την SQL, ξαναγράψτε την ως εξής:

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

36. Περιγράψτε συνοπτικά την αρχή λειτουργίας του MyBatis plug-in και πώς να γράψετε ένα plug-in;

Το MyBatis μπορεί να γράψει μόνο για ParameterHandlerResultSetHandlerStatementHandlerExecutor Αυτό 4 4 4 Ένα είδος προσθήκης διεπαφής, το MyBatis χρησιμοποιεί το δυναμικό διακομιστή μεσολάβησης του JDK για τη δημιουργία αντικειμένων διακομιστή μεσολάβησης για τις διεπαφές που πρέπει να υποκλαπούν για να υλοποιηθεί η λειτουργία υποκλοπής μεθόδου διασύνδεσης Κάθε φορά που εκτελείται. 4 4 4 μέθοδος ενός αντικειμένου διεπαφής, θα εισέλθει στη μέθοδο υποκλοπής, συγκεκριμέναInvocationHandler τουinvoke() Οι μέθοδοι, φυσικά, θα παρεμποδίσουν μόνο εκείνες τις μεθόδους που έχετε ορίσει να παρεμποδίζουν.

Εφαρμόστε το MyBatis Interceptor Διεπαφή και παράκαμψηintercept() Μέθοδος, στη συνέχεια γράψτε σχολιασμούς για την προσθήκη και καθορίστε ποιες μεθόδους διεπαφής θέλετε να υποκλέψετε Θυμηθείτε, μην ξεχάσετε να διαμορφώσετε την προσθήκη που γράψατε στο αρχείο διαμόρφωσης.

37. Η κρυφή μνήμη πρώτου και δεύτερου επιπέδου του MyBatis

  • Προσωρινή μνήμη επιπέδου 1: με βάση PerpetualCache Τοπική κρυφή μνήμη HashMap, το εύρος αποθήκευσης του είναι Session, when Sessionflush ήclose Μετά από αυτό, όλες οι κρυφές μνήμες στη συνεδρία θα διαγραφούν και η κρυφή μνήμη πρώτου επιπέδου θα ενεργοποιηθεί από προεπιλογή.
  • Η κρυφή μνήμη δεύτερου επιπέδου έχει τον ίδιο μηχανισμό με την κρυφή μνήμη πρώτου επιπέδου και χρησιμοποιείται επίσης από προεπιλογή. PerpetualCache, αποθήκευση HashMap, η διαφορά είναι ότι το πεδίο αποθήκευσής του είναι MapperNamespace), και η πηγή αποθήκευσης μπορεί να προσαρμοστεί, όπως π.χ Ehcache .Η κρυφή μνήμη δεύτερου επιπέδου δεν είναι ενεργοποιημένη από προεπιλογή Για να ενεργοποιηθεί η κρυφή μνήμη δεύτερου επιπέδου, πρέπει να εφαρμοστεί η κλάση χαρακτηριστικών κρυφής μνήμης δεύτερου επιπέδου.Serializable Διεπαφή σειριοποίησης (μπορεί να χρησιμοποιηθεί για την αποθήκευση της κατάστασης ενός αντικειμένου), με δυνατότητα διαμόρφωσης στο αρχείο αντιστοίχισης του<cache/>
  • Για τον μηχανισμό ενημέρωσης δεδομένων κρυφής μνήμης, όταν ένα συγκεκριμένο εύρος (Πρώτου επιπέδου κρυφή περίοδος / χώρος ονομάτων προσωρινής μνήμης δεύτερου επιπέδου) είναι C / U / D Μετά τη λειτουργία, από προεπιλογή όλα τα αρχεία σε αυτό το πεδίοselect Η προσωρινή μνήμη θα είναιclear