informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《Teori MyBatis 40 pertanyaan》Berisi 2 artikel berikut:
Tambahkan tag baru:keyProperty=“ID”
Itu dia.
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) Dengan bertanya Bahasa Indonesia: SQL Tentukan alias nama bidang dalam pernyataan untuk membuat alias nama bidang konsisten dengan nama atribut kelas entitas.
<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) Lulus <resultMap>
Untuk memetakan korespondensi satu-ke-satu antara nama field dan nama atribut kelas entitas.
<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) Warisan kelas implementasi antarmuka SqlSessionDaoSupport
: Untuk menggunakan metode ini, Anda perlu menulis mapper
antarmuka,mapper
Kelas implementasi antarmuka,mapper.xml
dokumen.
sqlMapConfig.xml
Konfigurasi sedangmapper.xml
posisi.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
antarmuka.SqlSessionDaoSupport
。mapper
Dapat digunakan dalam metodethis.getSqlSession()
Melakukan penambahan data, penghapusan, modifikasi dan pengecekan.spring
konfigurasi.<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) Gunakan org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
Konfigurasi sedangmapper.xml
posisi jikamapper.xml
Danmapper
Antarmuka memiliki nama yang sama dan berada di direktori yang sama, jadi tidak diperlukan konfigurasi di sini.mapper
antarmuka.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
tengahnamespace
untukmapper
Alamat antarmuka.mapper
Nama metode di antarmuka danmapper.xml
didefinisikan dalamstatement
dariid
konsisten.Spring
didefinisikan dalam.<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) Gunakan mapper
pemindai.
mapper.xml
Penulisan dokumen.mapper.xml
tengahnamespace
untukmapper
Alamat antarmuka;mapper
Nama metode di antarmuka danmapper.xml
didefinisikan dalamstatement
dariid
konsisten;mapper.xml
Danmapper
Jika nama antarmuka tetap konsisten, hal ini tidak perlu dilakukansqlMapConfig.xml
Konfigurasikan di .mapper
antarmuka.Melihatmapper.xml
nama file danmapper
Nama antarmuka harus konsisten dan ditempatkan di direktori yang sama.mapper
pemindai.<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
Dapatkan dari wadahmapper
objek implementasi.Pengikatan antarmuka adalah mendefinisikan antarmuka secara sewenang-wenang di MyBatis, dan kemudian menggabungkan metode dalam antarmuka dengan SQL penyataanMengikat, kita bisa langsung memanggil metode antarmuka, jadi dibandingkan dengan aslinya SqlSession
Metode yang diberikan memungkinkan kita memiliki pilihan dan pengaturan yang lebih fleksibel.
Ada dua cara untuk mengimplementasikan pengikatan antarmuka:
@Select
、@Update
Tunggu anotasi yang berisi pernyataan SQL untuk diikat;xml
Tulis SQL di dalam untuk mengikatxml
dalam file pemetaannamespace
Harus berupa nama path lengkap antarmuka.Jika pernyataan SQL relatif sederhana, gunakan pengikatan anotasi. Jika pernyataan SQL relatif rumit, gunakanxml
Mengikat, penggunaan umumxml
Ada lebih banyak ikatan.mapper.xml
dari setiap sql yang didefinisikan diid
sama.mapper.xml
dari setiap sql yang didefinisikan diparameterType
dari tipe yang sama.mapper.xml
dari setiap sql yang didefinisikan diresultType
dari tipe yang sama.Mapper.xml
dalam berkasnamespace
Itu adalah jalur kelas antarmuka Mapper.proxy
objek, objek proksiproxy
Metode antarmuka akan dicegat dan dieksekusiMappedStatement
mewakili SQL, dan kemudian mengembalikan hasil eksekusi SQL.namespace
,Jadi id
Dapat diulang; jika tidak dikonfigurasinamespace
,Jadi id
tidak bisa diulang;namespace
Tidak wajib, hanya praktik terbaik.namespace + id
adalah sebagai Peta < String, Pernyataan yang Dipetakan > Peta<String, MappedStatement>MAP<StRdi dalamG,MAhal.Bahasa Inggris:DStATBahasa Inggris:MBahasa Inggris:NT> Kunci yang akan digunakan, jika tidak adanamespace
, hanya tersisa id
,Jadi,id
Duplikasi dapat menyebabkan data saling menimpa.Mengertinamespace
,alam id
Anda bisa mengulanginya,namespace
berbeda,namespace + id
Tentu saja berbeda.MyBatis merangkum semua informasi konfigurasi Xml ke dalam objek kelas berat All-In-One Configuration
intern. Dalam file pemetaan Xml,<parameterMap>
Tag akan diuraikan sebagaiParameterMap
objek, setiap elemen turunannya akan diuraikan sebagaiParameterMapping
obyek.<resultMap>
Tag akan diuraikan sebagaiResultMap
objek, setiap elemen turunannya akan diuraikan sebagaiResultMapping
obyek.Setiap<select>
、<insert>
、<update>
、<delete>
Tag akan diuraikan sebagaiMappedStatement
Objek, SQL dalam tag akan diuraikan sebagaiBoundSql
obyek.
<resultMap>
Tag menentukan hubungan pemetaan antara nama kolom dan nama atribut objek satu per satu.T_NAME AS NAME
, nama atribut objek secara umum name
, huruf kecil, tetapi nama kolom tidak peka huruf besar-kecil. MyBatis akan mengabaikan huruf besar-kecil nama kolom dan dengan cerdas menemukan nama atribut objek yang sesuai T_NAME AS NaMe
, MyBatis masih bisa bekerja normal.Setelah memiliki hubungan pemetaan antara nama kolom dan nama atribut, MyBatis membuat objek melalui refleksi, dan menggunakan refleksi untuk menetapkan nilai satu per satu ke properti objek dan mengembalikannya ke properti yang tidak dapat menemukan hubungan pemetaan , tugas tidak dapat diselesaikan.
Masih banyak tag lainnya, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
, ditambah SQL dinamis
9
9
9 tag:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
Tunggu.di dalam<sql>
Untuk tag fragmen SQL, teruskan<include>
Tag memperkenalkan fragmen SQL,<selectKey>
Buat label kebijakan untuk kunci utama yang tidak mendukung penambahan otomatis.
Meskipun MyBatis mem-parsing file pemetaan Xml secara berurutan, tag B yang direferensikan masih dapat ditentukan di mana saja, dan MyBatis dapat mengidentifikasinya dengan benar.
Prinsipnya adalah MyBatis mem-parsing tag A dan menemukan bahwa tag A merujuk pada tag B, tetapi tag B belum diurai dan belum ada. Saat ini, MyBatis akan menandai tag A sebagai belum terselesaikan, lalu melanjutkan untuk mengurai tag yang tersisa, termasuk Tag B., setelah semua tag diurai, MyBatis akan mengurai ulang tag yang ditandai sebagai belum terselesaikan. Saat mengurai tag A, tag B sudah ada, dan tag A dapat diurai secara normal.
Bisa, bukan hanya bisa Satu-ke-banyak, satu-ke-satu,Cukup baik Banyak ke banyak, banyak ke satu . Hal ini dicapai sebagai berikut:
MyBatis dapat memetakan kelas enumerasi. Tidak hanya dapat memetakan kelas enumerasi, MyBatis dapat memetakan objek apa pun ke kolom tabel.Metode pemetaannya adalah metode yang disesuaikanTypeHandler
,menyelesaikan TypeHandler
darisetParameter()
DangetResult()
metode antarmuka.
TypeHandler
Fungsinya ada dua, yang pertama untuk melengkapijavaType
kejdbcType
Konversi, yang kedua selesaijdbcType
kejavaType
Konversi tersebut tercermin sebagaisetParameter()
DangetResult()
Kedua metode tersebut mewakili pengaturan parameter placeholder tanda tanya sql dan memperoleh hasil kueri kolom masing-masing.
SQL dinamis MyBatis memungkinkan kita untuk menulis SQL dinamis dalam bentuk tag dalam file pemetaan Xml untuk melengkapi fungsi penilaian logis dan penyambungan dinamis yang disediakan oleh MyBatis
9
9
9 Tag SQL dinamis:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
Prinsip pelaksanaannya adalah dengan menggunakan OGNL
Hitung nilai ekspresi dari objek parameter SQL dan gabungkan SQL secara dinamis sesuai dengan nilai ekspresi untuk melengkapi fungsi SQL dinamis.
MyBatis menggunakan RowBounds
Objek diberi nomor halaman, itu untukResultSet
Paging memori yang dilakukan oleh kumpulan hasil bukanlah paging fisik. Anda dapat langsung menulis parameter dengan paging fisik dalam SQL untuk menyelesaikan fungsi paging fisik, atau Anda dapat menggunakan plug-in paging untuk menyelesaikan paging fisik.
Prinsip dasar plugin paging adalah menggunakan antarmuka plugin yang disediakan oleh MyBatis untuk mengimplementasikan plugin khusus, mencegat SQL untuk dieksekusi dalam metode intersepsi plugin, dan kemudian menulis ulang SQL sesuai ke dialect
Dialek, tambahkan pernyataan paging fisik yang sesuai dan parameter paging fisik.
Contoh:
select * from student
Setelah mencegat SQL, tulis ulang sebagai:
select t.* from (select * from student) t limit 0, 10
MyBatis hanya bisa menulis untuk ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
ini
4
4
4 Semacam plug-in antarmuka, MyBatis menggunakan proxy dinamis JDK untuk menghasilkan objek proxy untuk antarmuka yang perlu dicegat untuk mengimplementasikan fungsi intersepsi metode antarmuka.
4
4
4 metode objek antarmuka, ia akan memasuki metode intersepsi, secara khususInvocationHandler
dariinvoke()
Metode, tentu saja, hanya akan mencegat metode yang Anda tentukan untuk dicegat.
Terapkan MyBatis Interceptor
Antarmuka dan penggantianintercept()
Metode, lalu tulis anotasi untuk plugin tersebut dan tentukan metode antarmuka mana yang ingin Anda intersepsi. Ingat, jangan lupa untuk mengonfigurasi plugin yang Anda tulis di file konfigurasi.
PerpetualCache
Cache lokal HashMap, cakupan penyimpanannya adalah Sesi, saat Sesiflush
atauclose
Setelah itu, semua cache dalam sesi tersebut akan dibersihkan, dan cache tingkat pertama akan diaktifkan secara default.PerpetualCache
, Penyimpanan HashMap, perbedaannya adalah cakupan penyimpanannya Mapper
(Namespace
), dan sumber penyimpanan dapat disesuaikan, seperti Ehcache
.Cache tingkat kedua tidak diaktifkan secara default. Untuk mengaktifkan cache tingkat kedua, kelas atribut cache tingkat kedua perlu diimplementasikan.Serializable
Antarmuka serialisasi (dapat digunakan untuk menyimpan status suatu objek), dapat dikonfigurasi dalam file pemetaannya<cache/>
。C
/ U
/ D
Setelah operasi, secara default semua file dalam cakupan iniselect
Cache di dalamnya akan menjadiclear
。