τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《MyBatis θεωρία 40 ερωτήσεις》Περιέχει τα ακόλουθα 2 άρθρα:
Προσθήκη νέας ετικέτας: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) Με ερώτημα 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>
(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) Κληρονομικότητα κλάσης υλοποίησης διεπαφής SqlSessionDaoSupport
: Για να χρησιμοποιήσετε αυτήν τη μέθοδο, πρέπει να γράψετε mapper
διεπαφή,mapper
Κλάση υλοποίησης διεπαφής,mapper.xml
έγγραφο.
sqlMapConfig.xml
Μεσαία διαμόρφωσηmapper.xml
s θέση.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
διεπαφή.SqlSessionDaoSupport
。mapper
Μπορεί να χρησιμοποιηθεί σε μεθόδουςthis.getSqlSession()
Πραγματοποιήστε προσθήκη, διαγραφή, τροποποίηση και έλεγχο δεδομένων.spring
διαμόρφωση.<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) Χρήση org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
Μεσαία διαμόρφωσηmapper.xml
θέση εάνmapper.xml
καιmapper
Οι διεπαφές έχουν το ίδιο όνομα και βρίσκονται στον ίδιο κατάλογο, επομένως δεν απαιτείται ρύθμιση παραμέτρων εδώ.mapper
διεπαφή.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
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>
(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>
spring
Πάρτε από το δοχείοmapper
αντικείμενο υλοποίησης.Η δέσμευση διεπαφής είναι ο αυθαίρετος καθορισμός μιας διεπαφής στο MyBatis και, στη συνέχεια, ο συνδυασμός των μεθόδων στη διεπαφή με την SQL δήλωσηΔεσμευτικό, μπορούμε να καλέσουμε απευθείας τη μέθοδο διεπαφής, έτσι σε σύγκριση με την αρχική SqlSession
Οι μέθοδοι που παρέχονται μας επιτρέπουν να έχουμε πιο ευέλικτες επιλογές και ρυθμίσεις.
Υπάρχουν δύο τρόποι για την υλοποίηση της σύνδεσης διεπαφής:
@Select
、@Update
Περιμένετε να δεσμευτούν οι σχολιασμοί που περιέχουν δηλώσεις SQL.xml
Γράψτε SQL μέσα για δέσμευση Σε αυτήν την περίπτωση, πρέπει να καθορίσετεxml
στο αρχείο χαρτογράφησηςnamespace
Πρέπει να είναι το πλήρες όνομα διαδρομής της διεπαφής.Όταν η πρόταση SQL είναι σχετικά απλή, χρησιμοποιήστε τη δέσμευση σχολίων Όταν η πρόταση SQL είναι σχετικά πολύπλοκη, χρησιμοποιήστεxml
Δεσμευτικό, γενικής χρήσηςxml
Υπάρχουν περισσότερα δεσίματα.mapper.xml
για κάθε sql που ορίζεται στοid
ίδιο.mapper.xml
για κάθε sql που ορίζεται στοparameterType
του ίδιου τύπου.mapper.xml
για κάθε sql που ορίζεται στοresultType
του ίδιου τύπου.Mapper.xml
στο αρχείοnamespace
Αυτή είναι η διαδρομή κλάσης της διεπαφής Mapper.proxy
αντικείμενο, αντικείμενο μεσολάβησηςproxy
Οι μέθοδοι διεπαφής θα υποκλαπούν και θα εκτελεστούν αντ' αυτούMappedStatement
αντιπροσωπεύει την SQL και, στη συνέχεια, επιστρέφει τα αποτελέσματα εκτέλεσης της SQL.namespace
,Ετσι id
Μπορεί να επαναληφθεί εάν δεν έχει ρυθμιστείnamespace
,Ετσι id
δεν μπορεί να επαναληφθεί τελικάnamespace
Δεν απαιτείται, απλώς βέλτιστη πρακτική.namespace + id
ειναι οπως M ap < S tring , M apped S tatement > Χάρτης<String, MappedStatement>ΜέναΠ<Αγrσεσολ,ΜένασελμιρεΑγέναtμιΜμιnt> Το κλειδί για χρήση, αν δεν υπάρχειnamespace
, μόνο τα υπόλοιπα id
,Ετσι,id
Η αντιγραφή μπορεί να προκαλέσει την αντικατάσταση δεδομένων μεταξύ τους.Το έπιασαnamespace
,φύση id
Μπορείτε να το επαναλάβετε,namespace
διαφορετικός,namespace + id
Φυσικά είναι διαφορετικό.Το MyBatis ενσωματώνει όλες τις πληροφορίες διαμόρφωσης Xml σε βαρέα αντικείμενα Όλα σε Ένα Configuration
εσωτερικός. Στο αρχείο αντιστοίχισης Xml,<parameterMap>
Η ετικέτα θα αναλυθεί ωςParameterMap
αντικείμενο, κάθε ένα από τα θυγατρικά στοιχεία του θα αναλυθεί ωςParameterMapping
αντικείμενο.<resultMap>
Η ετικέτα θα αναλυθεί ωςResultMap
αντικείμενο, κάθε ένα από τα θυγατρικά στοιχεία του θα αναλυθεί ωςResultMapping
αντικείμενο.Κάθε<select>
、<insert>
、<update>
、<delete>
Οι ετικέτες θα αναλυθούν ωςMappedStatement
Αντικείμενο, η SQL στην ετικέτα θα αναλυθεί ωςBoundSql
αντικείμενο.
<resultMap>
Οι ετικέτες ορίζουν τη σχέση αντιστοίχισης μεταξύ των ονομάτων στηλών και των ονομάτων χαρακτηριστικών αντικειμένων ένα προς ένα.T_NAME AS NAME
, το όνομα του χαρακτηριστικού αντικειμένου είναι γενικά name
, πεζά, αλλά τα ονόματα των στηλών δεν κάνουν διάκριση πεζών-κεφαλαίων T_NAME AS NaMe
, το MyBatis μπορεί να λειτουργήσει κανονικά.Αφού έχει τη σχέση αντιστοίχισης μεταξύ ονομάτων στηλών και ονομάτων χαρακτηριστικών, το MyBatis δημιουργεί αντικείμενα μέσω ανάκλασης και χρησιμοποιεί την ανάκλαση για να εκχωρήσει τιμές μία προς μία στις ιδιότητες του αντικειμένου και να τις επιστρέψει για εκείνες τις ιδιότητες που δεν μπορούν να βρουν τη σχέση αντιστοίχισης , η εργασία δεν μπορεί να ολοκληρωθεί.
Υπάρχουν πολλές άλλες ετικέτες, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
, συν δυναμική SQL
9
9
9 ετικέτες:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
Περίμενε.σε<sql>
Για ετικέτες αποσπασμάτων SQL, περάστε<include>
Οι ετικέτες εισάγουν τμήματα SQL,<selectKey>
Δημιουργήστε ετικέτες πολιτικής για πρωτεύοντα κλειδιά που δεν υποστηρίζουν αυτόματη αύξηση.
Παρόλο που το MyBatis αναλύει το αρχείο αντιστοίχισης Xml με τη σειρά, η αναφερόμενη ετικέτα B μπορεί ακόμα να οριστεί οπουδήποτε και το MyBatis μπορεί να την αναγνωρίσει σωστά.
Η αρχή είναι ότι το MyBatis αναλύει την ετικέτα A και βρίσκει ότι η ετικέτα A αναφέρεται στην ετικέτα B, αλλά η ετικέτα B δεν έχει αναλυθεί και δεν υπάρχει ακόμα αυτήν τη στιγμή, το MyBatis θα επισημάνει την ετικέτα ως μη επιλυμένη και στη συνέχεια θα συνεχίσει για να αναλύσει τις υπόλοιπες ετικέτες, συμπεριλαμβανομένων των ετικετών B., αφού αναλυθούν όλες οι ετικέτες, το MyBatis θα αναλύσει εκ νέου αυτές τις ετικέτες που έχουν επισημανθεί ως μη επιλυμένες Κατά την ανάλυση της ετικέτας A, η ετικέτα B υπάρχει ήδη και η ετικέτα A μπορεί να αναλυθεί κανονικά.
Μπορεί, όχι μόνο μπορεί Ένας προς πολλούς, ένας προς έναν,Αρκετά καλά Πολλά-προς-πολλά, πολλά-προς-ένα . Αυτό επιτυγχάνεται ως εξής:
Το MyBatis μπορεί να αντιστοιχίσει κλάσεις απαρίθμησης Όχι μόνο μπορεί να αντιστοιχίσει τάξεις απαρίθμησης, το MyBatis μπορεί να αντιστοιχίσει οποιοδήποτε αντικείμενο σε μια στήλη του πίνακα.Η μέθοδος χαρτογράφησης είναι προσαρμοσμένηTypeHandler
,ολοκληρώσει TypeHandler
τουsetParameter()
καιgetResult()
μεθόδους διεπαφής.
TypeHandler
Έχει δύο λειτουργίες, η μία είναι να ολοκληρώσει τοjavaType
προς τηνjdbcType
Η μετατροπή, η δεύτερη ολοκληρώθηκεjdbcType
προς τηνjavaType
Η μετατροπή αντικατοπτρίζεται ωςsetParameter()
καιgetResult()
Οι δύο μέθοδοι αντιπροσωπεύουν τη ρύθμιση των παραμέτρων κράτησης θέσης ερωτηματικού sql και τη λήψη των αποτελεσμάτων του ερωτήματος στήλης αντίστοιχα.
Το MyBatis δυναμικό SQL μας επιτρέπει να γράψουμε δυναμική SQL με τη μορφή ετικετών στο αρχείο αντιστοίχισης Xml για να ολοκληρώσουμε τις λειτουργίες λογικής κρίσης και δυναμικής συναρμολόγησης της SQL που παρέχει
9
9
9 Δυναμικές ετικέτες SQL:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
Η αρχή εκτέλεσής του είναι η χρήση OGNL
Υπολογίστε την τιμή της έκφρασης από το αντικείμενο παραμέτρου SQL και συνδυάστε δυναμικά την SQL σύμφωνα με την τιμή της παράστασης για να ολοκληρώσετε τη λειτουργία της δυναμικής SQL.
Το MyBatis χρησιμοποιεί RowBounds
Το αντικείμενο είναι σελιδοποιημένο, είναι γιαResultSet
Η σελιδοποίηση μνήμης που εκτελείται από το σύνολο αποτελεσμάτων δεν είναι φυσική σελιδοποίηση Μπορείτε να γράψετε απευθείας παραμέτρους με φυσική σελιδοποίηση σε SQL για να ολοκληρώσετε τη λειτουργία φυσικής σελιδοποίησης ή μπορείτε να χρησιμοποιήσετε μια προσθήκη σελιδοποίησης για να ολοκληρώσετε τη φυσική σελιδοποίηση.
Η βασική αρχή του plug-in σελιδοποίησης είναι η χρήση της διεπαφής προσθήκης που παρέχεται από το MyBatis για την υλοποίηση μιας προσαρμοσμένης προσθήκης, η παρεμπόδιση της SQL που πρόκειται να εκτελεστεί στη μέθοδο υποκλοπής της προσθήκης και, στη συνέχεια, η επανεγγραφή της SQL σύμφωνα με προς την dialect
Διάλεκτος, προσθέστε αντίστοιχες δηλώσεις φυσικής σελιδοποίησης και παραμέτρους φυσικής σελιδοποίησης.
Παράδειγμα:
select * from student
Αφού υποκλέψετε την SQL, ξαναγράψτε την ως εξής:
select t.* from (select * from student) t limit 0, 10
Το MyBatis μπορεί να γράψει μόνο για ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
Αυτό
4
4
4 Ένα είδος προσθήκης διεπαφής, το MyBatis χρησιμοποιεί το δυναμικό διακομιστή μεσολάβησης του JDK για τη δημιουργία αντικειμένων διακομιστή μεσολάβησης για τις διεπαφές που πρέπει να υποκλαπούν για να υλοποιηθεί η λειτουργία υποκλοπής μεθόδου διασύνδεσης Κάθε φορά που εκτελείται.
4
4
4 μέθοδος ενός αντικειμένου διεπαφής, θα εισέλθει στη μέθοδο υποκλοπής, συγκεκριμέναInvocationHandler
τουinvoke()
Οι μέθοδοι, φυσικά, θα παρεμποδίσουν μόνο εκείνες τις μεθόδους που έχετε ορίσει να παρεμποδίζουν.
Εφαρμόστε το MyBatis Interceptor
Διεπαφή και παράκαμψηintercept()
Μέθοδος, στη συνέχεια γράψτε σχολιασμούς για την προσθήκη και καθορίστε ποιες μεθόδους διεπαφής θέλετε να υποκλέψετε Θυμηθείτε, μην ξεχάσετε να διαμορφώσετε την προσθήκη που γράψατε στο αρχείο διαμόρφωσης.
PerpetualCache
Τοπική κρυφή μνήμη HashMap, το εύρος αποθήκευσης του είναι Session, when Sessionflush
ήclose
Μετά από αυτό, όλες οι κρυφές μνήμες στη συνεδρία θα διαγραφούν και η κρυφή μνήμη πρώτου επιπέδου θα ενεργοποιηθεί από προεπιλογή.PerpetualCache
, αποθήκευση HashMap, η διαφορά είναι ότι το πεδίο αποθήκευσής του είναι Mapper
(Namespace
), και η πηγή αποθήκευσης μπορεί να προσαρμοστεί, όπως π.χ Ehcache
.Η κρυφή μνήμη δεύτερου επιπέδου δεν είναι ενεργοποιημένη από προεπιλογή Για να ενεργοποιηθεί η κρυφή μνήμη δεύτερου επιπέδου, πρέπει να εφαρμοστεί η κλάση χαρακτηριστικών κρυφής μνήμης δεύτερου επιπέδου.Serializable
Διεπαφή σειριοποίησης (μπορεί να χρησιμοποιηθεί για την αποθήκευση της κατάστασης ενός αντικειμένου), με δυνατότητα διαμόρφωσης στο αρχείο αντιστοίχισης του<cache/>
。C
/ U
/ D
Μετά τη λειτουργία, από προεπιλογή όλα τα αρχεία σε αυτό το πεδίοselect
Η προσωρινή μνήμη θα είναιclear
。