Da es im Prozess der Spring -Integration von MyBatis, insbesondere der Datenquelle, mehrere Integrationsmethoden gibt. Ich sehe oft verschiedene Konfigurationsmethoden und fühle mich immer ein wenig unordentlich, daher habe ich heute Zeit, sie zusammenzufassen.
1. Verwenden Sie org.mybatis.spring.mapper.MapperscannerConfiger
In der Tat ist dies die gleiche wie Reverse Engineering
1. Datenquellenkonfigurationsdatei
2. DAO -Datei
Paket com.jdd.mapper; import com.jdd.pojo.Amployee; importieren java.util.list; public interface EmployeMapper {öffentlicher Mitarbeiter GetPoyPoWebyeId (int id); öffentliche Liste <Powers> findAllEmPlentes (); }3.. Mapper.xml -Datei
<? xml Version = ".". encoding="UTF-" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.jdd.mapper.EmployeeMapper"> <select id="getEmployeeById" parameterType = "int" resultType = "com.jdd.pojo.Amployee"> <! [cdata [select * vom Mitarbeiter wobei id = #{id}; ]]> </select> <select id = "findAllePoperees" resultType = "com.jdd.pojo.Amployee"> <! [cdata [select * vom Mitarbeiter, wobei Status = ''; ]]> </select> </makePer>Auf diese Weise können Sie die DAO -Schnittstelle direkt in die Serviceklasse einbringen
Paket com.jdd.service.impl; Import com.jdd.mapper.aMlemeemapper; import com.jdd.pojo.Amployee; import com.jdd.service.AmployeeService; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; importieren java.util.list; @Service ("EmployedService") public Class EmployeperServiceImpl implementiert EmployepementSservice {@autowired Private EmployeMapper EmployeMapper; @Override public tätiger GetEmployeeById (int id) {return EmployeMapper.getOleMBOBYID (ID); } @Override public list <Public <Wephecte> findAllePoperees () {Return EmployeMapper.FindAllEMPLEMETS (); }}2. Verwenden Sie die abstrakte Klasse org.mybatis.spring.support.sqlSessiondaOSupport, um sie in die SQLSessionFactory zu injizieren.
1. Datenquellenkonfigurationsdatei
<? xml Version = ".". coding = "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.spingframework.org/schema/tx" xmlns: xsi = "http XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/contex 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.springFramework.org/schema/util/spring-/util- <context:property-placeholder location="classpath:resource/*.properties" /> <!-- Database Connection Pool--> <bean id="dataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name = "userername" value = "$ {jdbc.username}" /> <Eigenschaft name = "password" value = "$ {jdbc.password}" /> <Eigenschaft name = "MaxActive" value = "" /> <Eigenschaft name = "minidle" value = " /> < /bean> <!-SQLSSIONSPRAGE-> <!-<!-> <!-<!- name = "configLocation" value = "classPath: mybatis/sqlmapconfig.xml"> </Eigenschaft> <Eigenschaft name = "dataSource" ref = "dataSource"> </Eigenschaft> <Eigenschaft name = "mapperlocations" value = "classpath: com/jdd/mapper/*.2. Basedao -Klasse
Paket com.jdd.dao; import org.apache.ibatis.session.sqlSessionFactory; import org.mybatis.spring.support.sqlSessiondaosupport; import Javax.annotation.Resource; public abstract Class -basiertes As erweitert SQLSessionDaOSupport {@resource public void setSQlSessionFactory (SQLSessionFactory SQLSessionFactory) {Super.SetsqlSessionFactory (SQLSessionFactory); }}3. Schnittstelle personaleedao.java Klasse
Paket com.jdd.dao; import com.jdd.pojo.Amployee; importieren java.util.list; öffentliche Schnittstelle Employeedao {Mitarbeiter GetPoyPoWebyeId (int id); Liste <We Employee> findAllEMPLETEES (); }V.
Paket com.jdd.dao.impl; import com.jdd.dao.basedao; import com.jdd.dao.Employeedao; import com.jdd.pojo.Amployee; import org.springframework.stereotype.repository; importieren java.util.list; @Repository ("posteedao") public class public Class EmployeedaoImpl erweitert basiert und implementiert. } @Override publiclist <Public <Angove> findAllePoperees () {return this.getSQLSession (). SELECTLIST ("com.jdd.dao.Employeedao.findAllEMPLOME"); }}5. Auf diese Weise können Sie Mitarbeiter in die Serviceklasse injizieren.
A. Verwenden Sie org.mybatis.spring.sqlSessionTemplate -Vorlagenklasse
1. Datenquellendatei
<? xml Version = ".". coding = "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.spingframework.org/schema/tx" xmlns: xsi = "http XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/contex 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.springFramework.org/schema/util/spring-/util- <context:property-placeholder location="classpath:resource/*.properties" /> <!-- Database Connection Pool--> <bean id="dataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name = "userername" value = "$ {jdbc.username}" /> <Eigenschaft name = "password" value = "$ {jdbc.password}" /> <Eigenschaft name = "MaxActive" value = "" /> <Eigenschaft name = "minidle" value = " /> < /bean> <!-SQLSSIONSPRAGE-> <!-<!-> <!-<!- name = "configLocation" value = "classPath: mybatis/sqlmapconfig.xml"> </Eigenschaft> <Eigenschaft name = "dataSource" ref = "dataSource"> </Eigenschaft> <Eigenschaft name = "mapperlocations" value = "classpath: com/jdd/mapper/*. <Constructor-Arg Index = "" Ref = "SQLSessionFactory"/> </bean> </beans>2. Basisao.java -Klasse
Paket com.jdd.dao; import org.mybatis.spring.sqlSessionTemplate; import Javax.annotation.Resource; public abstract Class -basiertes {public SQLSessionTemplate SQLSessionTemplate; @Resource public void setSQlSessionTemplate (SQLSessionTemplate SQLSessionTemplate) {this.sqlSessionTemplate = SQLSessionTemplate; }} 3. Schnittstelle personaleedao.java Klasse
Paket com.jdd.dao; import com.jdd.pojo.Amployee; importieren java.util.list; öffentliche Schnittstelle Employeedao {Mitarbeiter GetPoyPoWebyeId (int id); Liste <We Employee> findAllEMPLETEES (); }V.
Paket com.jdd.dao.impl; import com.jdd.dao.basedao; import com.jdd.dao.Employeedao; import com.jdd.pojo.Amployee; import org.springframework.stereotype.repository; importieren java.util.list; @Repository ("posteedao") public class public Class EmployeedaoImpl erweitert basiert und implementiert. } @Override publiclist <Public <Power> findAllePoperees () {return SQLSessionTemplate.SelectList ("com.jdd.dao.Embothaeedao.findAllePoperees"); }}5. Jetzt können Sie PersonaleEedao direkt in die Serviceklasse injizieren, um sie zu verwenden.
HINWEIS: Die Injektion von Basedao hier ist flexibler. Sie können auch SQLSessionFactory injizieren und dann SQLSessionTemplate in der Setter -Methode erstellen, wie folgt:
Paket com.jdd.dao; import org.apache.ibatis.session.sqlSessionFactory; import org.mybatis.spring.sqlSessionTemplate; import Javax.annotation.Resource; public abstract Class -basiertes {public SQLSessionTemplate SQLSessionTemplate; @Resource public void setSQlSessionFactory (SQLSessionFactory SQLSessionFactory) {sqlSessionTemplate = new SQLSessionTemplate (SQLSessionFactory); }}Unabhängig davon, ob es sich um die Methode handelt, die die SQLSessionDaOSupport -Klasse, die SQLSessionFactory injiziert oder die SQLSessionTemplate direkt injiziert, ist dies im Wesentlichen dieselbe.
Wenn Sie SQLSessionFactory injizieren, erstellt es auch eine SQLSessionTemplate über SQLSessionFactory unten und arbeitet dann über seine API.
Wenn Sie es nicht glauben, lassen Sie mich den Quellcode von SQLSessiondaOSupport sehen:
// // Quellcode aus einer .class -Datei von Intellij idee nachgebildet // (angetrieben von Farnflower Decompiler) // Paket org.mybatis.spring.support; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlSessionFactory; import org.mybatis.spring.sqlSessionTemplate; import org.springframework.dao.support.daosupport; import org.springframework.util.assert; public abstract class SQLSessionDaOSupport erweitert Daosupport {private sqlSession SQLSession; private boolesche externeQlSession; public SQLSessionDaOSupport () {} 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 gotsQlSession () {return this.sqlSession; } protected void checkdaoconfig () {assert.notnull (this.sqlSession, "Eigenschaft 'SQLSessionFactory' oder 'SQLSessionTemplate' sind erforderlich"); }}In ähnlicher Weise erbt SQLSessionTemplate die SQLSession -Schnittstelle, sodass der Effekt unabhängig vom Betrieb gleich ist.
// // Quellcode aus einer .class -Datei von Intellij idee nachgebildet // (angetrieben von Farnflower Decompiler) // Paket org.mybatis.spring; Import Java.lang.reflect.InvocationHandler; import Java.lang.reflect.Method; importieren java.lang.reflect.proxy; Import Java.sql.Connection; importieren java.util.list; import Java.util.map; import org.apache.ibatis.exceptions.persistenceException; import org.apache.ibatis.executor.batchResult; import org.apache.ibatis.reflection.exceptionutil; import org.apache.ibatis.session.configuration; import org.apache.ibatis.session.executortype; import org.apache.ibatis.session.resaulthandler; import org.apache.ibatis.session.rowbounds; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlSessionFactory; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.util.assert; öffentliche Klasse SQLSessionTemplate implementiert sqlSession {private endgültige SQLSessionFactory SQLSessionFactory; private Final ExeTortype ExecUtortype; Private Final SQLSession SQLSessionProxy; Private Final PersistenceExceptionTranslator ExceptionSlator; public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory) {this (sqlSessionFactory, SQLSessionFactory.getConfiguration (). getDefaultExecutortype ()); } public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory, ExecUtypex -Executortyp) {this (SQLSessionFactory, Executortype, neuer mybatisexceptionTranslator (SQLSessionFactory.GetConfiguration (). } public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory, ExecUType -ExecutorType, PersistenceExceptionTranslator ExceptionSlator) {assert.notnull (SQLSessionFactory, "Eigentum" SQLSessionFactory "ist erforderlich"); Assert.notnull (ExecUtorType, "Eigenschaft" Executortype "ist erforderlich"); this.sqlSessionFactory = sqlSessionFactory; this.execUtortype = oxeTortype; this.exceptionTranslator = exceptionTranslator; this.sqlSessionProxy = (sqlSession) proxy.newProxyInstance (SQLSessionFactory.class.getClassloader (), neue Klasse [] {SQLSession.class}, New SQLSessionTemplate.SQLSessionInterceptor ()); } public sqlSessionFactory gotsQlSessionFactory () {return this.sqlSessionFactory; } publicUtortype getExecutortype () {return this.executortype; } public PersistenceExceptionTranslator getPersistenceExceptionTranslator () {return this.exceptionTranslator; } public <T> t SelectOne (String -Anweisung) {return this.sqlSessionProxy.Selectone (Anweisung); } public <T> T SelectOne (String -Anweisung, Objektparameter) {return this.sqlSessionProxy.Selectone (Anweisung, Parameter); } public <K, v> map <k, v> selectMap (String -Anweisung, String MAPKEY) {return this.sqlSessionProxy.SelectMap (Anweisung, MapKey); } public <K, v> map <k, v> selectMap (String -Anweisung, Objektparameter, String MAPKEY) {return this.sqlSessionProxy.SelectMap (Anweisung, Parameter, MapKey); } public <K, v> map <k, v> SELECTMAP (String -Anweisung, Objektparameter, String MapKey, RowBounds rowBounds) {return this.sqlSessionProxy.SelectMap (Anweisung, Parameter, Mapkey, Rowbounds); } public <E> list <e> selectList (String -Anweisung) {return this.sqlSessionProxy.SelectList (Anweisung); } public <E> list <e> selectList (String -Anweisung, Objektparameter) {return this.sqlSessionProxy.SelectList (Anweisung, Parameter); } public <E> List <E> SELTILISTE (STRING -Anweisung, Objektparameter, RowBounds rowBounds) {return this.sqlSessionProxy.SelectList (Anweisung, Parameter, RowBounds); } public void select (String -Anweisung, ResultHandler -Handler) {this.sqlSessionProxy.Select (Aussage, Handler); } public void select (String -Anweisung, Objektparameter, ResultHandler -Handler) {this.sqlSessionProxy.Select (Anweisung, Parameter, Handler); } public void select (String -Anweisung, Objektparameter, Rowbounds Rowbounds, ResultHandler -Handler) {this.sqlSessionProxy.Select (Anweisung, Parameter, Rowbounds, Handler); } public int Insert (String -Anweisung) {return this.sqlSessionProxy.insert (Anweisung); } public int Insert (String -Anweisung, Objektparameter) {return this.sqlSessionProxy.insert (Anweisung, Parameter); } public int update (String -Anweisung) {return this.sqlSessionProxy.Update (Anweisung); } public int update (String -Anweisung, Objektparameter) {return this.sqlSessionProxy.Update (Anweisung, Parameter); } public int delete (String -Anweisung) {return this.sqlSessionProxy.Delete (Anweisung); } public int delete (String -Anweisung, Objektparameter) {return this.sqlSessionProxy.delete (Anweisung, Parameter); } public <T> t getMapper (Klasse <T> Typ) {return this.getConfiguration (). getMapper (Typ, this); } public void commit () {neue nicht unterstützte OperationException werfen ("Manuelles Commit ist nicht über eine von der Frühjahr verwaltete SQLSession zulässig"); } public void Commit (boolesche Kraft) {neue nicht unterstützte OperationSexception werfen ("Manuelles Commit ist nicht über eine von der Frühjahr verwaltete SQLSession zulässig"); } public void rollback () {neue nicht unterstützte OperationException werfen ("Manuelles Rollback ist nicht über eine feder verwaltete SQLSession"); } public void rollback (boolesche Kraft) {Neue nicht unterstützte OperationSexception werfen ("Manuelles Rollback ist nicht über eine von der Feder verwaltete SQLSession"); } public void close () {neue nicht unterstützte OperationException werfen ("Manuelles Schließen ist nicht über eine feder verwaltete SQLSession"); } public void clearCache () {this.sqlSessionProxy.Clearcache (); } public configuration getConfiguration () {return this.sqlSessionFactory.getConfiguration (); } public Connection getConnection () {return this.sqlSessionProxy.getConnection (); } public list <BatchResult> FlushStatements () {return this.sqlSessionProxy.flushStatements (); } private Klasse SQLSessionInterceptor implementiert InvocationHandler {private sqlSessionInterceptor () {} öffentliches Objekt invoke (Objektproxy, Methode, Objekt [] args) throwable {sqlSession SQLSession = SQLSessionutils.getsqlSession (SQLSession SessionSessions.thisSession = SqlSessionTemplate.this.executortype, sqlSessionTemplate.this.ExceptionTranslator); Objekt ausgepackt; try {Object result = methode.invoke (SQLSession, Args); if (! } uwrapped = Ergebnis; } catch (throwable var) {uwrapped = exceptionutil.unwrapthrowable (var); if (sqlSessionTemplate.this.ExceptionTranslator! sqlSession = null; Throwderable Translated = SQLSessionTemplate.this.ExceptionTranslator.TranslateExceptionIfPossible ((PersistenceException) nicht eingepackt); if (übersetzt! }} throw (throwable) ausgepackt; } endlich {if (sqlSession! = null) {sqlSessionutils.closesqlSession (SQLSession, sqlSessionTemplate.thisqlSessionFactory); }} zurückverpackt; }}}}Zusammenfassen
Die oben genannten sind mehrere Konfigurationsmethoden für Spring -Integration von Datenquellen in MyBatis, die Ihnen vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten!