Karena ada beberapa metode integrasi dalam proses mengintegrasikan musim semi mybatis, terutama sumber data. Saya sering melihat metode konfigurasi yang berbeda dan selalu merasa sedikit berantakan, jadi saya punya waktu untuk meringkasnya hari ini.
1. Gunakan org.mybatis.spring.mapper.mapperscannerConfigurer
Faktanya, ini adalah cara yang sama Reverse Engineering
1. File Konfigurasi Sumber Data
2. File DAO
paket com.jdd.mapper; impor com.jdd.pojo.employee; impor java.util.list; Antarmuka Publik Pegawai {Pegawai Publik GetEmployeEbebyId (int ID); Daftar Publik <Prince> FindAllEmployees (); }3. File Mapper.xml
<? Xml Version = "." Encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace = "com.jdd.mapper parameTerType = "int" resultType = "com.jdd.pojo.employee"> <! [cdata [pilih * dari karyawan di mana id = #{id}; ]]> </select> <pilih id = "findAllexeees" resultType = "com.jdd.pojo.employee"> <! [CDATA [pilih * dari karyawan di mana status = ''; ]]> </select> </mapper>Dengan cara ini, Anda dapat secara langsung menyuntikkan antarmuka DAO ke kelas layanan
paket com.jdd.service.impl; impor com.jdd.mapper.employeemapper; impor com.jdd.pojo.employee; impor com.jdd.service.mireeeservice; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.service; impor java.util.list; @Service ("karyawan service") Kelas Publik RegoerServiceImpl mengimplementasikan Rekan kerja {@Autowired Private EmployE dari Employeemapper; @Override Pegawai publik getEmployeebyId (int id) {return usahaereemapper.geteMregneeById (id); } @Override Public List <Prince> findAllEmployees () {return usahaeeemapper.findAllemployees (); }}2. Gunakan kelas abstrak org.mybatis.spring.support.sqlsessiondaosupport untuk menyuntikkannya ke SQLSessionFactory.
1. File Konfigurasi Sumber Data
<? Xml Version = "." encoding = "utf-"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: context = "http://www.springframework.org/schema/context" xmlns: p = "http://www.springframework.org/schema/p" xmlns: aop = "http://www.springframework.org/schema/tx" xmlns: xsi = "http:/schema" XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-weans-..xsd http://wwww.springframework.orger http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-..xsd http://www.springframework.org/schema/util http://www.spramework.org/schema/util <Context: Properti-PlaceHolder Location = "ClassPath: Resource /*. Properties" /> <!-Database Connection Pool-> <bean id = "DataSource" Destroy-Method = "Tutup"> <nama properti = "driverclassName" value = "$ {jdbc.driver}" /<name propertLassname "ne properta =" $ {jdbc.driver} " /<name =" name = "url" value = "$" $ {JDBC name = "nama pengguna" value = "$ {jdbc.userName}" /> <name properti = "kata sandi" value = "$ {jdbc.password}" /> <name properti = "maxactive" value = "" /> <property name = "MinIdle" value = "" /< /bean> <!-sqlsession- "sqlsession-beanforpory-beancory =" "" " name = "configLocation" value = "classpath: mybatis/sqlmapconfig.xml"> </property> <property name = "DataSource" ref = "DataSource"> </property> <properti nama = "mapperlocations" value = "classpath: com/jdd/mapper/*.2. Kelas Berdasarkan Basis
paket com.jdd.dao; impor org.apache.ibatis.Session.SQLSessionFactory; impor org.mybatis.spring.support.sqlsessiondaosupport; impor javax.annotation.Resource; Kelas abstrak publik berdasarkan SQLSessiondaOsupport {@Resource public void setSQLSessionFactory (SQLSessionFactory SQLSessionFactory) {super.setsqlsessionFactory (sqlSessionFactory); }}3. Antarmuka Kelas Pekerjaan
paket com.jdd.dao; impor com.jdd.pojo.employee; impor java.util.list; antarmuka publik kerja {karyawan geteMireeById (int id); Daftar <eployee> findAlleMreees (); }4. DAO mengimplementasikan kelas karyawan
paket com.jdd.dao.impl; impor com.jdd.dao.basedao; impor com.jdd.dao.employeedao; impor com.jdd.pojo.employee; impor org.springframework.stereotype.repository; impor java.util.list; @Repository ("Employeedao") Kelas Publik EmployeedaoImpl memperluas berdasarkan implementasi karyawan {@Override Public Pegawai geteMireEbebyId (int id) {return this.getsqlSession (). SelecterOne ("com.jdd.dao.eMreedeoEdao.getemireEdeid", id); } @Override Daftar Publik <Prince> findAllEmployees () {return this.getsqlSession (). SelectList ("com.jdd.dao.mireeedao.findallempleeesees"); }}5. Dengan cara ini, Anda dapat menyuntikkan karyawan ke kelas layanan.
3. Gunakan kelas template org.mybatis.spring.sqlsessionTemplate
1. File Sumber Data
<? Xml Version = "." encoding = "utf-"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: context = "http://www.springframework.org/schema/context" xmlns: p = "http://www.springframework.org/schema/p" xmlns: aop = "http://www.springframework.org/schema/tx" xmlns: xsi = "http:/schema" XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-weans-..xsd http://wwww.springframework.orger http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-..xsd http://www.springframework.org/schema/util http://www.spramework.org/schema/util <Context: Properti-PlaceHolder Location = "ClassPath: Resource /*. Properties" /> <!-Database Connection Pool-> <bean id = "DataSource" Destroy-Method = "Tutup"> <nama properti = "driverclassName" value = "$ {jdbc.driver}" /<name propertLassname "ne properta =" $ {jdbc.driver} " /<name =" name = "url" value = "$" $ {JDBC name = "nama pengguna" value = "$ {jdbc.userName}" /> <name properti = "kata sandi" value = "$ {jdbc.password}" /> <name properti = "maxactive" value = "" /> <property name = "MinIdle" value = "" /< /bean> <!-sqlsession- "sqlsession-beanforpory-beancory =" "" " name = "configLocation" value = "classpath: mybatis/sqlmapconfig.xml"> </property> <property name = "DataSource" ref = "DataSource"> </property> <properti nama = "mapperlocations" value = "classpath: com/jdd/mapper/*. id = "sqlSessionTemplate"> <constructor-arg index = "" ref = "sqlsessionfactory"/> </t bean> </tac>2. Kelas berbasis JAVA
paket com.jdd.dao; impor org.mybatis.spring.sqlsessionTemplate; impor javax.annotation.Resource; kelas abstrak publik berdasarkan {public sqlSessionTemplate sqlsessionTemplate; @Resource public void setsqlSessionTemplate (sqlSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate; }} 3. Antarmuka Kelas Pekerjaan
paket com.jdd.dao; impor com.jdd.pojo.employee; impor java.util.list; antarmuka publik kerja {karyawan geteMireeById (int id); Daftar <eployee> findAlleMreees (); }4. DAO mengimplementasikan kelas karyawan
paket com.jdd.dao.impl; impor com.jdd.dao.basedao; impor com.jdd.dao.employeedao; impor com.jdd.pojo.employee; impor org.springframework.stereotype.repository; impor java.util.list; @Repository ("Employeedao") Kelas Publik EmployeedaoImpl memperluas berdasarkan Implementseeedao {@Override Pegawai publik geteMireeById (int id) {return sqlSessionTemplate.Selectone ("com.jdd.dao.eMreedeoEdao.getemireEdeid", id); } @Override Daftar Publik <Prince> findAllEmployees () {return sqlSessionTemplate.selectList ("com.jdd.dao.employeedao.findallemployeees"); }}5. Sekarang Anda dapat secara langsung menyuntikkan karyawan ke kelas layanan untuk menggunakannya.
CATATAN: Suntikan Basis Basis di sini lebih fleksibel. Anda juga dapat menyuntikkan SQLSessionFactory, dan kemudian membuat SQLSessionTemplate dalam metode setter, sebagai berikut:
paket com.jdd.dao; impor org.apache.ibatis.Session.SQLSessionFactory; impor org.mybatis.spring.sqlsessionTemplate; impor javax.annotation.Resource; kelas abstrak publik berdasarkan {public sqlSessionTemplate sqlsessionTemplate; @Resource public void setSQLSessionFactory (SQLSessionFactory SQLSessionFactory) {sqlSessionTemplate = SQLSessionTemplate baru (SQLSessionFactory); }}Faktanya, apakah itu metode mewarisi kelas SQLSessiondaOsupport, menyuntikkan SQLSessionFactory, atau secara langsung menyuntikkan SQLSessionTemplate, pada dasarnya sama.
Jika Anda menyuntikkan SQLSessionFactory, itu juga membuat SQLSessionTemplate melalui SQLSessionFactory di bagian bawah, dan kemudian beroperasi melalui API -nya.
Jika Anda tidak percaya, izinkan saya melihat kode sumber SQLSessiondaOsupport:
// // Kode Sumber yang diciptakan kembali dari file .class oleh Intellij Idea // (Didukung oleh Fernflower Decompiler) // Paket org.mybatis.spring.support; Impor org.apache.Ibatis.Session.SQLSession; impor org.apache.ibatis.Session.SQLSessionFactory; impor org.mybatis.spring.sqlsessionTemplate; impor org.springframework.dao.support.daosupport; impor org.springframework.util.assert; kelas abstrak publik sqlsessiondaosupport memperluas daosupport {private sqlsession sqlsession; Externalsqlsession boolean pribadi; SQLSessionDaOsupport publik () {} public void setSQLSessionFactory (sqlSessionFactory sqlSessionFactory) {if (! this.externalsqlSession) {this.sqlSession = new SqlSessionTemplate (sqlSessionFactory); }} public void setsqlSessionTemplate (sqlSessionTemplate sqlSessionTemplate) {this.sqlSession = sqlSessionTemplate; this.externalsqlSession = true; } public sqlsession getSqlSession () {return this.sqlsession; } dilindungi void checkDaoconfig () {assert.notnull (this.sqlsession, "properti 'sqlsessionfactory' atau 'sqlsessionTemplate' diperlukan"); }}Demikian pula, SQLSessionTemplate mewarisi antarmuka SQLSession, sehingga efeknya sama terlepas dari operasi.
// // Kode Sumber yang diciptakan kembali dari file .class oleh Intellij Idea // (Didukung oleh Fernflower Decompiler) // Paket org.mybatis.spring; impor java.lang.reflect.invocationHandler; impor java.lang.reflect.method; impor java.lang.reflect.proxy; impor java.sql.connection; impor java.util.list; impor java.util.map; impor org.apache.ibatis.exceptions.PerSistenceException; impor org.apache.iatis.executor.batchResult; impor org.apache.ibatis.reflection.exceptionutil; impor org.apache.ibatis.Session.configuration; Impor org.apache.Ibatis.Session.ExecutorType; Impor org.apache.Ibatis.Session.ResulThandler; impor org.apache.ibatis.Session.rowbounds; Impor org.apache.Ibatis.Session.SQLSession; impor org.apache.ibatis.Session.SQLSessionFactory; impor org.springframework.dao.support.persistenceExceptionTranslator; impor org.springframework.util.assert; SQLSessionTemplate kelas publik mengimplementasikan SQLSession {private final SQLSessionFactory SQLSessionFactory; ExecutorType Executorpe Final Private; sqlsession sqlsessionProxy final swasta; Final persistenceExceptionTranslator final private; Publik SQLSessionTemplate (SQLSessionFactory SQLSessionFactory) {this (sqlSessionFactory, sqlSessionFactory.getConfiguration (). getDefaultExecutorType ()); } public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory, ExecutorType Executortype) {this (SQLSessionFactory, ExecutorType, mybatiseSExcepTionTranslator baru (sqlSessionFactory.getConfiguration (). getenvironment (). } public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory, ExecutorType ExecutorType, PersistenceExceptionTranslator ExceptionTranslator) {Assert.notnull (SQLSessionFactory, "Property 'SQLSessionFactory' diperlukan"); Assert.notnull (Executortype, "Properti 'Executortype' diperlukan"); this.sqlSessionFactory = sqlSessionFactory; this.executortype = executorType; this.exceptionTranslator = ExceptonTranslator; this.sqlSessionProxy = (sqlSession) proxy.newProxyInstance (sqlSessionFactory.class.getClassLoader (), kelas baru [] {sqlSession.class}, sqlSessionTemplate.sqlSessionIpeCession ()); } public SQLSessionFactory getSQLSessionFactory () {return this.sqlSessionFactory; } public executorType getExecutorType () {return this.executortype; } public persistenceExceptionTranslator getpersistenceExceptionTranslator () {return this.exceptionTranslator; } public <t> t selecone (pernyataan string) {return this.sqlSessionProxy.selectone (pernyataan); } public <t> t selecone (Pernyataan String, Parameter Objek) {return this.sqlSessionProxy.selectone (pernyataan, parameter); } public <k, v> peta <k, v> selectmap (pernyataan string, string mapKey) {return this.sqlSessionProxy.selectMap (pernyataan, mapKey); } public <k, v> peta <k, v> selectmap (pernyataan string, parameter objek, string mapKey) {return this.sqlSessionProxy.selectMap (pernyataan, parameter, mapKey); } public <k, v> peta <k, v> selectmap (pernyataan string, parameter objek, string mapkey, rowbounds rowbounds) {return this.sqlSessionProxy.selectMap (pernyataan, parameter, mapkey, rowbounds); } PUBLIK <E> DAFTAR <E> SELECTLIST (Pernyataan String) {return this.sqlSessionProxy.selectList (pernyataan); } PUBLIK <E> DAFTAR <E> SelectList (Pernyataan String, Parameter Objek) {return this.sqlSessionProxy.selectList (pernyataan, parameter); } PUBLIK <E> DAFTAR <E> SelectList (Pernyataan String, Parameter Objek, Rowbounds Rowbounds) {return this.sqlSessionProxy.selectList (pernyataan, parameter, rowbounds); } public void Select (Pernyataan String, Resulthandler Handler) {this.sqlSessionProxy.select (pernyataan, handler); } public void Select (Pernyataan String, Parameter Objek, Resulthandler Handler) {this.sqlSessionProxy.select (pernyataan, parameter, pawang); } public void Select (Pernyataan String, Parameter Objek, Rowbounds Rowbounds, Resulthandler Handler) {this.sqlSessionProxy.select (pernyataan, parameter, rowbounds, handler); } public int insert (Pernyataan String) {return this.sqlSessionProxy.insert (pernyataan); } public int insert (Pernyataan String, Parameter Objek) {return this.sqlSessionProxy.insert (pernyataan, parameter); } Pembaruan int publik (Pernyataan String) {return this.sqlSessionProxy.update (pernyataan); } pembaruan int publik (Pernyataan String, Parameter Objek) {return this.sqlSessionProxy.update (pernyataan, parameter); } public int delete (pernyataan string) {return this.sqlSessionProxy.delete (pernyataan); } public int delete (Pernyataan string, parameter objek) {return this.sqlSessionProxy.delete (pernyataan, parameter); } public <t> t getMapper (class <t> type) {return this.getConfiguration (). getMapper (type, this); } public void commit () {Throw New UnsportedOperationException ("Manual Commit tidak diizinkan selama SQLSession yang dikelola musim semi"); } public void commit (boolean force) {melempar new UnportedOperationException ("Manual Commit tidak diizinkan selama SQLSession yang dikelola musim semi"); } public void rollback () {Throw New UnsportedOperationException ("Manual Rollback tidak diizinkan selama SQLSession yang dikelola musim semi"); } public void rollback (boolean force) {lempar baru unsportedOperationException ("manual rollback tidak diperbolehkan selama pegas yang dikelola sqlsession"); } public void close () {Throw New UnsupportedOperationException ("Manual Close tidak diizinkan selama SQLSession yang dikelola pegas"); } public void clearcache () {this.sqlSessionProxy.clearcache (); } konfigurasi publik getConfiguration () {return this.sqlSessionFactory.getConfiguration (); } koneksi publik getConnection () {return this.sqlSessionProxy.getConnection (); } Daftar Publik <BatchResult> flushStatements () {return this.sqlSessionProxy.FlushStateMenement (); } kelas pribadi SQLSessionInterceptor mengimplementasikan InvocationHandler {private SQLSessionInterceptor () {} Invoke Objek Publik (Proxy Objek, Metode Metode, Object [] args) melempar lempar {sqlsession sqlsession = sqlsessionutils.getsqlSession (sqlsessiession. SqlSessionTemplate.this.executorType, sqlSessionTemplate.this.exceptionTranslator); Objek yang tidak dibungkus; coba {objek hasil = method.invoke (sqlsession, args); if (! sqlSessionutils.issqlSessionTransactional (sqlsession, sqlSessionTemplate.this.sqlsessionFactory)) {sqlSession.Commit (true); } uncrapped = hasil; } catch (throwable var) {uncrapped = exceptionutil.unwrapthrowable (var); if (sqlSessionTemplate.this.exceptionTranslator! = null && Instance yang tidak terbungkus dari persepsi Persistence) {sqlsessionutils.closesqlsession (sqlsession, sqlsessionTemplate.this.sqlsessionFactory); sqlsession = null; Throwable diterjemahkan = sqlSessionTemplate.this.exceptionTranslator.translateExceptionifPossible ((PersistenceException) dibuka); if (diterjemahkan! = null) {uncrapped = diterjemahkan; }} Throw (Throwable) Unrapped; } akhirnya {if (sqlSession! = null) {sqlSessionutils.closesqlSession (sqlSession, sqlSessionTemplate.this.sqlSessionFactory); }} return unrapped; }}}}Meringkaskan
Di atas adalah beberapa metode konfigurasi untuk mengintegrasikan sumber data musim semi di MyBatis yang diperkenalkan kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan. Editor akan membalas Anda tepat waktu!