Beberapa waktu yang lalu, saya mengambil alih proyek yang dikembangkan menggunakan Springboot dan Spring-Data-JPA. Kemudian, seorang teman baru ditambahkan, mengatakan bahwa JPA terlalu sulit digunakan daripada mybatis, dan juga sulit untuk menulis kueri dengan banyak tabel, jadi saya menambahkan dukungan mybatis.
Di awal
@Configuration@enableJparePositories ("com.xxx.xxx.repository") kelas jpaconfigSaat menggunakan metode ini untuk mengonfigurasi JPA, satu masalah yang ditemui adalah bahwa ia dapat memilih tetapi tidak dapat menyimpan, sehingga dimodifikasi ke file konfigurasi:
Berikut ini secara langsung memperkenalkan file konfigurasi:
1. Konfigurasi Musim Semi
<? Xml Version = "1.0" encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschem a-instance "xmlns: context =" http://www.springframework.org/schema/context "xmlns: tx =" http: // www. springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:task = "http://www.springframework.org/schema/task" xsi: schemalocation = "http: //www.springframework.or g/skema/beanshttp: //www.springframework.org/schema/beans/spring-aus.xsdhttp: //www.springframework.or g/skema/konteks/spring-context.xsdhttp: //www.springframework.org/schema/context/spring-context.xsdhttp : //www.springframework.org/schema/txhttp: //www.springframework.org/schema/tx/spring-tx.xsdhtt p: //www.springframework.org/schema/aophttp: //www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">< !-- memindai file annotation-> <konteks: pangkalan component-scan = "com.xx" id = "springcontextholder" malas-init = "false"> </ bean> <bean id = "configProperties" class = "org.springframework.beans.factory.config.propertiesfactorybean"> <properti name = "Lokasi"> <list> <value> classpath*: jdbc.properties </ value> <value> classpath*: app.properties </ value> </list> </preate> </bean> <bean id = "propertyconfigurer" class = "org.springframework.beans.fac." name = "SystemPropertiesModename" value = "system_properties_mode_override"/> <name properti = "fileencoding" value = "utf-8"/> <name properti = "properti" ref = "confulproperties"/</bean> <!-Datasource Configuration-<bean id confoperties "/datasePethip =" --pethod "Init =-datase =" --pethod "Init =-datasEpHOD" URL Properti Dasar, Pengguna, Kata Sandi-> <!-<nama properti = "driverClassName" value = "$ {ds.DriverClassName}"/>-> <name properti = "url" value = "$ {ds.url}"/> <nama properti = "name username" value = "$ {ds.usname}"//<a name = "username" value = "$ {ds.username}"//<a name = "USERNAME" value = "$ {ds.password}"/> <!-Mengkonfigurasi ukuran inisialisasi, minimum dan maksimum-> <nama properti = "inisialisasi" value = "$ {ds.initialsize}"/> <name properti = "Minidle" value = "$ {ds.minidle}"/<name properti = "maxactive" nilai "$" Untuk menunggu koneksi akan diatur waktunya-> <name properti = "maxwait" value = "$ {ds.maxwait}"/> <!-Konfigurasikan berapa lama untuk memeriksa sekali, mendeteksi koneksi idle yang perlu ditutup, dalam milidetik-> <nama properti = "timeTeVictionrunsmillis" value = "$ {" do. " Waktu minimum untuk koneksi untuk bertahan hidup di kumpulan dalam milidetik-> <name properti = "minevictableIdletimeMillis" value = "$ {ds.minevictableIdletimeMillis}"/> <name properti = "validationQuery" value = "$ {ds.validationQuery}"/<nama properti = " value = "$ {ds.testwhileIdle}"/> <name properti = "testonborrow" value = "$ {ds.testonborrow}"/> <name properti = "testonreturn" value = "$ {ds.testonreturn}"/<!-buka psscache dan tentukan ukuran pscache pada setiap koneksi-"" "" "" value = "$ {ds.poolPreparedStatements}"/> <name properti = "maxpoolpreparedstatementPerConnection" value = "$ {ds.maxpoolPreparedStateMentPerPonnectionSize}"/<!-Konfigurasikan filter untuk pemantauan statistik pemantauan-<nama properti = " Menutup koneksi yang ditinggalkan-> <name properti = "logabandoned" value = "$ {ds.logabandoned}"/> </ bean> <!-Spring dan mybatis terintegrasi dengan sempurna, dan pemetaan konfigurasi mybatis "tidak memerlukan name" DATOCE "" SQLSESSESI ">" SQLSESSESI "> DATOCE" "SQLSESSESTORI" SQLSESSESFACTORY "" SQLSESSESFACTORY "SQLSESSESTORICE" SQLSESSESFACTORY " name = "configLocation" value = "classPath: mybatis-config.xml"/> <name properti = "TypealiSespackage" value = "com.xxx.culture.domain"/> <!-secara otomatis memindai petak. Nama Paket Di mana antarmuka DAO berada, Spring akan secara otomatis menemukan kelas di bawahnya-> <Bean> <name properti = "Basepackage" value = "com.xxx.xxx.dao"/> </ bean> <!-(Manajemen Transaksi) Manajer Transaksi, Gunakan jtatransactionManager untuk tx global-> <Bean Management) ID = "TransactionManager" class = "org.springframework.jdbc.datasource.datasourCetransactionManager"> <nama properti = "DataSource" ref = "DataSource"/</bean> <!-Transaction Management notification-> <tx: Advent ID = "txAdvice" Transaction = "Transaction =" TxManager " Metode manajemen dimulai dengan memasukkan, memperbarui, menghapus, memutar balik selama ada pengecualian-> <tx: metode name = "masukkan*" propagasi = "diperlukan" rollback-for = "java.lang.throwable"/> <tx: name = "update*" propagation = "wajib" rollback-for = "java.lang." rollback-for = "java.lang.Trowable"/> <tx: Metode nama = "hapus*" propagation = "wajib" rollback-for = "java.lang.throwable"/> <tx: Metode nama = "save*" propagation = "wajib" rollback-for = "java.Lang.throwable" name="flush*" propagation="REQUIRED"/><!-- The method starting with select,count,get, find, enable read-only to improve database access performance--><tx:method name="select*" read-only="true"/><tx:method name="count*" read-only="true"/><tx:method name="get*" read-only="true"/><tx:method name="get*" read-only = "true"/> <tx: Metode name = "find*" read-only = "true"/> <tx: Metode name = "Search*" read-only = "true"/> <!-Gunakan manajemen transaksi default untuk metode lain-> <tx: nama metode = "*"/> </tx: attributes> </tx: advent> <! com.xxx.smp.service ..*Impl.*(..))-> <aop: config> <aop: pointcut id = "serviceMethods" ekspresi = "eksekusi (*com.xxx.xxx.service ..*(..))"/> <aop: advisor saran advisor-ref = "txadvice": pointc "pointc" pointc "point (AOP = AOP: Advisor advisor-Ref =" txadvice "pointc" pointc "pointc" pointc "point" point "point" point "" point "" point "" point "" point "" point "" point "point" ~ Konfigurasikan Spring untuk menggunakan proxy CGLIB-> <aop: aspectj-autoproxy proxy-target-class = "true"/> <!-Dukungan anotasi transaksi-> <tx: anotasi-digerakkan-manager = "transactionManager"/> <sumber daya impor = "applicationContext-jpa.xml"///</> <impor = "applicationContext-jpa.xml"///</> <porage = "applicationContext-jpa.xml"///</> </</axplication = "applicationContext-jpa.xml"///</> </angkan2. Konfigurasi JPA
Saya menghadapi masalah di awal: JPA org.hibernate.LazyInitializationException: tidak dapat menginisialisasi proxy - tidak ada sesi
Konfigurasinya adalah sebagai berikut
<? Xml Version = "1.0" encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: tx = "http: //xmlaMema" xmlns: tx = "http:///wwlns rk.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemalocation="http://www.springframework.org/schema/schema http://www.springframework.org/schema/beans/spring-weans-4.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsdhtp://www.springframework.org/schema/data/jpa http://wwww.spramework.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org. yang yang ”yang” ” > <bean id = "EntityManagerFactory" class = "org.springframework.orm.jpa.localcontainerentityManagerFactoryBean"> <!-Tentukan sumber data-> <nama properti = "DataSource" Ref = "DataSource"/<> <! name = "packagescan"> <list> <value> com.xxx.xxx.jpadomain </ value> </cist> </propert> <!- tentukan atribut JPA; seperti apakah akan menampilkan SQL, dialek, dll. Dalam hibernate-> <name properti = "jPavendorAdapter"> <bean> <!-apakah akan menghasilkan file ddl-> <nama properti = "dihasilkan" value = "true"/> <!-apakah akan menampilkan sql-> <properti nama = "showql" value = "false" name = "databaseplatform" value = "org.hibernate.dialect.mysqldialect"/> <!-mysql, pilih sendiri-> <name properti = "database" value = "mysql"/</bean> </preate> <properti nama = "jpaproperties"> </bean> </preate> <properti = "jpaproperties"> </bean> </preate> <properti = "jpaproperties"> <props> </bean> </propert> KEY = "hibernate.ejb.naming_strategy"> org.hibernate.cfg.improvedNamingStrategy </prop> <prop key = "hibernate.hbm2ddl.auto"> pembaruan </prop> <prop KEY = "hibernate.enable_lazy_load_load_rans </proprans"> fored </props/hibernate.enable_lazy_Load_Load_rans "> tru </trops"> </props/hibernate.enable_lazy_Load_LOAD_RANS "> </trops"> tru </hibernate. Konfigurasi JPA-> <!-Mengkonfigurasi fungsi memungkinkan pemindaian dan secara otomatis membuat pabrik proxy-class = "com.monk.base.jpa.peakjparepositoryFactory" Metode anotasi kacang yang ditentukan dengan sendirinya. Anda dapat secara langsung memberi anotasi semua paket tanpa menulis-> <jpa: repositori-paket basis = "com.xxx.xxx.repository" transaction-manager-ref = "transactionManager" entitas-manager-factory-ref = "entityManagerFactory"/> <!-<!-<!-property-configuration-configuration configuration-configuration-compiguration-compiguration-compiguration-compiguration " name = "EntityManagerFactory" ref = "entityManagerFactory"/> </t bean> <!-Nyalakan transaksi anotasi-> <tx: transaksi yang digerakkan oleh anotasi-manager = "transactionManager" proxy-target-class = "true"/> </beans>
Di atas adalah analisis masalah yang dihadapi dalam integrasi JPA musim semi dan mybatis yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!