Debido a que existen varios métodos de integración en el proceso de integración de mybatis, especialmente la fuente de datos. A menudo veo diferentes métodos de configuración y siempre me siento un poco desordenado, por lo que tengo tiempo para resumirlos hoy.
1. Use org.mybatis.spring.mapper.mapperscannerconfigurer
De hecho, esta es la misma forma de ingeniería inversa
1. Archivo de configuración de fuente de datos
2. Archivo DAO
paquete com.jdd.mapper; import com.jdd.pojo.employee; import java.util.list; interfaz pública EmployeEmapper {empleado público getEmployEyById (int id); Lista pública <Eloza> FindallEmployees (); }3. Archivo mapper.xml
<? xml versión = "." encoding = "utf-"?> <! Doctype mapper público "-// mybatis.org//dtdd parametertype = "int" resultType = "com.jdd.pojo.employee"> <! [CDATA [SELECT * de Employee Where id = #{id}; ]]> </select> <select id = "findallEmployees" resultType = "com.jdd.pojo.employee"> <! [CDATA [SELECT * de Employee Where Status = ''; ]]> </select> </mapper>De esta manera, puede inyectar directamente la interfaz DAO en la clase de servicio
paquete com.jdd.service.impl; import com.jdd.mapper.EmployeEmapper; import com.jdd.pojo.employee; import com.jdd.service.EmployEesservice; importar org.springframework.beans.factory.annotation.aUtowired; importar org.springframework.stereotype.service; import java.util.list; @Service ("EmployeService") Clase pública EmpleesserviceImpl implementa EmployeeService {@aUtowired private EmployeEmapper EmployeEmapper; @Override Public Employee GetEmployyById (int id) {return EmployeEmapPer.getEmployEyById (id); } @Override Public List <ElprayeeS> FindAllEmployeeS () {return EmployeEmapper.FindAllEmployEes (); }}2. Use la clase abstracta org.mybatis.spring.support.sqlsessiondaosupport para inyectarlo en la SQLSessionFactory.
1. Archivo de configuración de fuente de datos
<? xml versión = "." 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://www.w.org//xmlschemachema" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/contextext http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.orgschema/tx http://www.springframework.org/schema/tx/spring-tx-..xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-..xsd "> <! <context: Property-placeholder ubicación = "classpath: resource /*. Properties" /> <!-Database Connection Pool-> <bean id = "dataSource" destruye-method = "cerrar"> <name de propiedad = "controlador de controlador" valor = "$ {jdbc.driver}" /> <nombre de "url" valor = "$ {jdbc.url} />" /"name" /"name" /"name" user "name" username " valor = "$ {jdbc.username}" /> <propiedad name = "contraseña" value = "$ {jdbc.password}" /> <propiedad name = "maxactive" value = "" /> <Property name = "minidle" valor = "" /> < /bean> <!-sqlSessionFactory-> <bean id = "sqlsessionsession"> <name de propiedad = "name" value = "classpath: mybatis/sqlmapconfig.xml"> </property> <propiedad name = "dataSource" ref = "dataSource"> </Property> <Property name = "mapperLocations" value = "classpath: com/jdd/mapper/*. xml"> </propers> </le beans>2. Clase de base
paquete com.jdd.dao; importar org.apache.ibatis.session.sqlsessionFactory; importar org.mybatis.spring.support.sqlsessiondaosupport; import javax.annotation.resource; Public Abstract Class BasedAo extiende SQLSessionDaosupport {@Resource public void setSqlSessionFactory (sqlSessionFactory sqlsessionFactory) {super.setsqlSessionFactory (sqlSessionFactory); }}3. Interfaz EmployeEdeao.Java Clase
paquete com.jdd.dao; import com.jdd.pojo.employee; import java.util.list; interfaz pública empleadoeedao {empleado getEmployEyById (int id); Lista <Eloza> findallEmployees (); }4. DAO implementa la clase EmployeEDaooMpl
paquete com.jdd.dao.impl; import com.jdd.dao.basdeao; import com.jdd.dao.employeedao; import com.jdd.pojo.employee; importar org.springframework.stereotype.repository; import java.util.list; @Repository ("EmpaciseEseoo") Clase pública de EmployeEseDaImpl extiende Baseo implementos EmpacialEedao {@Override Public Employee GetEmployyByid (int id) } @Override Public List <ElspereeS> findAllEmployeeS () {return this.getSqlSession (). SELECTLIST ("com.jdd.dao.employeedao.findalleMployees"); }}5. De esta manera, puede inyectar EmployeEseoo en la clase de servicio.
3. Use org.mybatis.spring.sqlsessionTemplate Plantplate Clase
1. Archivo de fuente de datos
<? xml versión = "." 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://www.w.org//xmlschemachema" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/contextext http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.orgschema/tx http://www.springframework.org/schema/tx/spring-tx-..xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-..xsd "> <! <context: Property-placeholder ubicación = "classpath: resource /*. Properties" /> <!-Database Connection Pool-> <bean id = "dataSource" destruye-method = "cerrar"> <name de propiedad = "controlador de controlador" valor = "$ {jdbc.driver}" /> <nombre de "url" valor = "$ {jdbc.url} />" /"name" /"name" /"name" user "name" username " valor = "$ {jdbc.username}" /> <propiedad name = "contraseña" value = "$ {jdbc.password}" /> <propiedad name = "maxactive" value = "" /> <Property name = "minidle" valor = "" /> < /bean> <!-sqlSessionFactory-> <bean id = "sqlsessionsession"> <name de propiedad = "name" value = "classpath: mybatis/sqlmapConfig.xml"> </propiety> <Property name = "dataSource" ref = "dataSource"> </propiety> <Property name = "mapperLocations" value = "classpath: com/jdd/mappper/*. xml"> </propial> </a-bean> <ray) index = "" ref = "sqlsessionFactory"/> </ bean> </le beans>2. Class de BasedAo.Java
paquete com.jdd.dao; importar org.mybatis.spring.sqlsessionTemplate; import javax.annotation.resource; Public Abstract Class BasedAo {public sqlSessionTemplate sqlsessionTemplate; @Resource public void setSqlSessionTemplate (sqlSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate; }} 3. Interfaz EmployeEdeao.Java Clase
paquete com.jdd.dao; import com.jdd.pojo.employee; import java.util.list; interfaz pública empleadoeedao {empleado getEmployEyById (int id); Lista <Eloza> findallEmployees (); }4. DAO implementa la clase EmployeEDaooMpl
paquete com.jdd.dao.impl; import com.jdd.dao.basdeao; import com.jdd.dao.employeedao; import com.jdd.pojo.employee; importar org.springframework.stereotype.repository; import java.util.list; @Repository ("EmpaciseEDAo") clase pública de empleo de empleoeImpl extiende los implementos de baseeOo {@Override Public Employee GetEmployEyByid (int id) } @Override Public List <ElprayeeS> FindAllEmployees () {return sqlSessionTemplate.SelectList ("com.jdd.dao.employeedao.findallemloyeees"); }}5. Ahora puede inyectar directamente EmployeEseo en la clase de servicio para usarlo.
Nota: La inyección de BasedAo aquí es más flexible. También puede inyectar SQLSessionFactory y luego crear SQLSessionTemplate en el método Setter, de la siguiente manera:
paquete com.jdd.dao; importar org.apache.ibatis.session.sqlsessionFactory; importar org.mybatis.spring.sqlsessionTemplate; import javax.annotation.resource; Public Abstract Class BasedAo {public sqlSessionTemplate sqlsessionTemplate; @Resource public void setSqlSessionFactory (sqlSessionFactory sqlSessionFactory) {sqlSessionTemplate = new SqlSessionTemplate (SQLSessionFactory); }}De hecho, ya sea el método de heredar la clase SQLSessionDaosupport, inyectar la SQLSessionFactory o inyectar directamente la SqlSessionTemplate, es esencialmente lo mismo.
Si inyecta SQLSessionFactory, también crea una SQLSessionTemplate a través de SQLSessionFactory en la parte inferior, y luego opera a través de su API.
Si no lo cree, déjame ver el código fuente de SQLSessionDaosupport:
// // Código fuente recreado de un archivo .class por IntelliJ Idea // (alimentado por Fernflower Decompiler) // paquete org.mybatis.spring.support; importar org.apache.ibatis.session.sqlsession; importar org.apache.ibatis.session.sqlsessionFactory; importar org.mybatis.spring.sqlsessionTemplate; importar org.springframework.dao.support.daosupport; importar org.springframework.util.assert; Public Abstract Class SQLSessionDaosupport extiende Daosupport {private sqlsession sqlsession; booleano privado Externalsqlsession; 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 getSqlSession () {return this.sqlsession; } protegido void checkdaoconfig () {afirmo.notnull (this.sqlSession, "propiedad 'sqlSessionFactory' o 'sqlSessionTemplate' son necesarios"); }}Del mismo modo, SQLSessionTemplate hereda la interfaz SQLSession, por lo que el efecto es el mismo independientemente de la operación.
// // Código fuente recreado de un archivo .class por IntelliJ Idea // (alimentado por Fernflower Decompiler) // paquete org.mybatis.spring; import java.lang.reflect.invocationHandler; import java.lang.reflect.method; import java.lang.reflect.proxy; import java.sql.connection; import java.util.list; import java.util.map; importar org.apache.ibatis.exceptions.persistenceException; importar org.apache.ibatis.executor.batchResult; importar org.apache.ibatis.reflection.ExceptionUtil; importar org.apache.ibatis.session.configuration; importar org.apache.ibatis.session.executortype; importar org.apache.ibatis.session.resulthandler; importar org.apache.ibatis.session.rowbounds; importar org.apache.ibatis.session.sqlsession; importar org.apache.ibatis.session.sqlsessionFactory; importar org.springframework.dao.support.persistenceExceptionTranslator; importar org.springframework.util.assert; clase pública sqlsessionTemplate implementa sqlsession {private final sqlsessionFactory sqlsessionFactory; Executype de ejecución final privada ExecutyPy; SQLSESSIÓN FINAL PRIVADO SQLSIONSIONPROXY; Private Final PersistenceExceptionTranslator ExceptionTranslator; public sqlSessionTemplate (sqlSessionFactory sqlSessionFactory) {this (sqlSessionFactory, sqlSessionFactory.getConfiguration (). getDefaultExeCutortype ()); } public sqlSessionTemplate (SQLSessionFactory SQLSessionFactory, ExecutyPy ExecutType) {this (sqlSessionFactory, Executortype, nuevo myBatisExceptionTranslator (sqlSessionFactory.getConfiguration (). getenvironment (). getDataSource (), verdadero)); } public sqlSessionTemplate (sqlSessionFactory sqlSessionFactory, ejecutype ejecutype, persistenceExceptionTranslator ExceptionTranslator) {Afirert.notnull (SqlSessionFactory, "SqlSessionFactory 'se requiere"); Afirmar.notnull (ejecutorType, "propiedad 'ejecutorType' es necesaria"); this.sqlSessionFactory = sqlSessionFactory; this.Executortype = Executortype; this.ExceptionTranslator = ExceptionTranslator; this.sqlSessionProxy = (SQLSession) proxy.newproxyInstance (sqlsessionFactory.class.getClassLoader (), nueva clase [] {sqlsession.class}, nueva sqlsessiontemplate.sqlSessionInterceptore ()); } public sqlSessionFactory getSqlSessionFactory () {return this.sqlSessionFactory; } public EXECTOPTYPE getExecutortype () {return this.executortype; } public PersistenceExceptionTranslator getPersistenceExceptionTranslator () {return this.ExceptionTranslator; } public <t> t selectone (instrucción de cadena) {return this.sqlsessionProxy.selectone (declaración); } public <t> t selectone (instrucción de cadena, parámetro de objeto) {return this.sqlsessionProxy.selectone (instrucción, parámetro); } public <k, v> map <k, v> selectMap (instrucción de cadena, string mapKey) {return this.sqlsessionProxy.selectMap (instrucción, mapkey); } public <k, v> map <k, v> selectMap (instrucción de cadena, parámetro de objeto, string mapKey) {return this.sqlsessionProxy.selectMap (instrucción, parámetro, mapkey); } public <k, v> map <k, v> selectMap (instrucción de cadena, parámetro de objeto, string mapkey, rowbounds rowbounds) {return this.sqlsessionProxy.selectMap (instrucción, parámetro, mapkey, rowbounds); } public <e> list <E> selectList (instrucción de cadena) {return this.sqlsessionProxy.selectList (declaración); } public <E> list <E> selectList (instrucción de cadena, parámetro de objeto) {return this.sqlsessionProxy.selectList (instrucción, parámetro); } public <e> list <E> selectList (instrucción de cadena, parámetro de objeto, rowbounds rowbounds) {return this.sqlsessionProxy.selectList (instrucción, parámetro, rowbounds); } public void Select (Declaración de cadena, Handler Resulthandler) {this.sqlSessionProxy.Select (Declaración, Handler); } public void select (instrucción de cadena, parámetro de objeto, manejador resulThandler) {this.sqlsessionProxy.select (declaración, parámetro, manejador); } public void Select (instrucción de cadena, parámetro de objeto, RowBounds RowBounds, ResultThandler Handler) {this.sqlSessionProxy.select (instrucción, parámetro, rowbounds, manejador); } public int Insert (instrucción de cadena) {return this.sqlsessionProxy.insert (declaración); } public int Insert (instrucción de cadena, parámetro de objeto) {return this.sqlsessionProxy.insert (instrucción, parámetro); } public int Update (Declaración de cadena) {return this.sqlsessionProxy.update (declaración); } public int Update (Declaración de cadena, parámetro de objeto) {return this.sqlsessionProxy.Update (instrucción, parámetro); } public int delete (instrucción de cadena) {return this.sqlsessionProxy.delete (declaración); } public int delete (instrucción de cadena, parámetro de objeto) {return this.sqlsessionProxy.delete (instrucción, parámetro); } public <T> t getMapper (clase <t> type) {return this.getConfiguration (). getMapper (type, this); } public void commit () {tire nueva no compatible conperationException ("El confirmación manual no está permitida durante una sqlsession administrada por primavera"); } Public void commit (boolean force) {tire nueva no compatible conperationException ("El confirmación manual no está permitida durante una sqlsession administrada por la primavera"); } public void Rollback () {tire nueva no compatible conperationException ("No se permite la reversión manual en una SQLSession administrada por primavera"); } public void Rollback (Force Boolean) {arrojar una nueva Operación sin apoyoxception ("No se permite la reversión manual en una SQLSession administrada por la primavera"); } public void Close () {arrojar una nueva Operación no apoyo. } public void clearCache () {this.sqlSessionProxy.CLearCache (); } Configuración pública getConfiguration () {return this.sqlsessionFactory.getConfiguration (); } Public Connection getConnection () {return this.sqlsessionProxy.getConnection (); } Lista pública <BatchResult> FlushStatements () {return this.sqlsessionProxy.FlushStatements (); } clase privada sqlSessionInterceptor implementa InvocationHandler {private sqlSessionInterceptore () {} public Object Invoke (Object Proxy, Method Method, Object [] args) lanza {sqlSession sqlSession = sqlSessionUtils.getSqlSession (sqlSessionTemplate.this.sqlSession Factory,, factory, Sqlsessiontemplate.this.executortype, sqlsessiontemplate.this.exceptionTranslator); Objeto sin envolver; intente {objeto resultado = método.invoke (sqlsession, args); if (! sqlSessionUtils.issqlSessionTransactional (sqlSession, sqlSessionTemplate.THIS.SQLSESSIONFACTORY)) {sqlsession.commit (true); } Unwrapped = resultado; } catch (lanzable var) {unwrapped = excepcionUtil.unwrapThrowable (var); if (sqlSessionTemplate.this.ExceptionTranslator! = NULL && Unwraped instancia de PersistenceException) {sqlSessionUtils.clossqlSession (sqlSession, sqlSessionTemplate.This.SqlSessionFactory); sqlsession = nulo; Lanzamiento traducido = sqlsessionTemplate.this.ExceptionTranslator.TranslateExceptionIfPossible ((PersistenceException) sin envolver); if (traducido! = null) {unbrapped = traducido; }} Throw (Throwable) sin envolver; } Finalmente {if (sqlsession! = null) {sqlsessionUtilss.clossqlSession (sqlsession, sqlsessiontemplate.this.sqlsessionFactory); }} return sin envolver; }}}}Resumir
Los anteriores son varios métodos de configuración para la integración de fuentes de datos en MyBatis presentados a usted. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje. ¡El editor le responderá a tiempo!