Porque existem vários métodos de integração no processo de integração da mola Mybatis, especialmente a fonte de dados. Costumo ver diferentes métodos de configuração e sempre me sinto um pouco confuso, então tenho tempo para resumi -los hoje.
1. Use org.mybatis.spring.mapper.mapperscannerConfigurer
De fato, é da mesma maneira que a engenharia reversa
1. Arquivo de configuração da fonte de dados
2. Arquivo dao
pacote com.jdd.mapper; importação com.jdd.pojo.employee; importar java.util.list; interface pública EmployeeeMapper {funcionário público getemployeeById (int id); Lista pública <Pomension> findallemployees (); }3. Arquivo Mapper.xml
<? xml versão = "." Encoding = "utf-"?> <! ParameterType = "int" resultType = "com.jdd.pojo.employee"> <! [CDATA [SELECT * FROM FUNCIONAL WHERE ID = #{ID}; ]]> </leclect> <select id = "findallemployees" resulttype = "com.jdd.pojo.employee"> <! [CDATA [selecione * do funcionário onde status = ''; ]]> </leclect> </papper>Dessa forma, você pode injetar diretamente a interface Dao na classe de serviço
pacote com.jdd.service.impl; import com.jdd.mapper.employeMapper; importação com.jdd.pojo.employee; importação com.jdd.service.employeeservice; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.tereotype.service; importar java.util.list; @Service ("Funcionários") Public Class Funcionários ServiceImpl implementa a Funcionário Service {@AUTOWIRED PRIVADO EmployeeMapperPeeMapper; @Override funcionário público getemployeeById (int id) {return empregeemapper.getemployeeById (id); } @Override Public List <Eclarey> findallemPlandeees () {return empregeemapper.findallemployees (); }}2. Use a classe abstrata org.mybatis.spring.support.sqlSessionDaosUpport para injetá -lo no SQLSessionFactory.
1. Arquivo de configuração da fonte de dados
<? xml versão = "." 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.springframework.org/schema/tx" xmlns:xsi="http://www.w.org//XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.org/schemaytx http://www.springframework.org/schema/tx/spring-tx- ... -> <Contexto: Property-PlaceLitder Location = "ClassPath: Resource /*. Propriedades" /> <!-Pool de conexão com o banco de dados-> <bean id = "DataSource" Destroy-Method = "Close"> <Nome da propriedade = "Driver" url "value =" $ {jdbc.driver} " /> <nome" "url" url = "$ {jdbc.driver}" /> <nome = "url" url = "$ {jdbc.driver}" /> <nome = "Url" Url " name = "nome de usuário" value = "$ {jdbc.username}" /> <propriedade name = "senha" value = "$ {jdbc.password}" /> <names name = "maxactive" value = "" /> <namesfling = "minidle" = "" /> <iDan> <!-sqlsflac name = "configLocation" value = "classPath: mybatis/sqlmapconfig.xml"> </propriedade> <propriedade name = "dataSource" ref = "DataSource"> </property> <names = "mapperlocations" value = "classpath: com/jdd/mapper/*. xml"> </*.2. Classe baseada em base
pacote com.jdd.dao; importar org.apache.ibatis.session.sqlSessionFactory; importar org.mybatis.spring.support.sqlSessionDaosupport; importar javax.annotation.resource; Classe abstrata pública baseada em extensão sqlSessionDaosUpport {@Resource Public void SetsqlSessionFactory (SQLSessionFactory SQLSessionFactory) {super.SetSqlSessionFactory (SQLSessionFactory); }}3.
pacote com.jdd.dao; importação com.jdd.pojo.employee; importar java.util.list; interface pública Empregandoeedao {funcionário getemployeeById (int id); List <Puelpyle> findallemployees (); }4. Dao implementa a aula empregada
pacote com.jdd.dao.impl; importação com.jdd.dao.basedAo; importação com.jdd.dao.employeedao; importação com.jdd.pojo.employee; importar org.springframework.tereotype.repository; importar java.util.list; @Repository ("Employeedao") Classe pública empregada EmpregadaOImpl estende baseado em base em empregados {@Override funcionário público getemployeeById (int id) {return this.getSqlSession (). SelectOne ("com.jdd.dao.employeedao.getemployebyid", id); } @Override Public List <Eclarey> findAllEmployees () {return this.getSqlSession (). SelectList ("com.jdd.dao.employeedao.findallemployees"); }}5.
3. Use org.mybatis.spring.sqlsessionTemplate Modelo Classe
1. Arquivo de fonte de dados
<? xml versão = "." 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.springframework.org/schema/tx" xmlns:xsi="http://www.w.org//XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.org/schemaytx http://www.springframework.org/schema/tx/spring-tx- ... -> <Contexto: Property-PlaceLitder Location = "ClassPath: Resource /*. Propriedades" /> <!-Pool de conexão com o banco de dados-> <bean id = "DataSource" Destroy-Method = "Close"> <Nome da propriedade = "Driver" url "value =" $ {jdbc.driver} " /> <nome" "url" url = "$ {jdbc.driver}" /> <nome = "url" url = "$ {jdbc.driver}" /> <nome = "Url" Url " name = "nome de usuário" value = "$ {jdbc.username}" /> <propriedade name = "senha" value = "$ {jdbc.password}" /> <names name = "maxactive" value = "" /> <namesfling = "minidle" = "" /> <iDan> <!-sqlsflac name = "configLocation" value = "classpath: mybatis/sqlmapconfig.xml"> </propriedade> <propriedade name = "dataSource" ref = "dataSource"> </property> <name = "mapperlocations" value = "classpath: com/jdd/mapper/*. <construtor-arg index = "" ref = "sqlSessionFactory"/> </siean> </sieve>2. Classe baseada em Java
pacote com.jdd.dao; importar org.mybatis.spring.sqlsessionTemplate; importar javax.annotation.resource; public abstract classe baseada {public sqlSessionTemplate sqlSessionTemplate; @Resource Public void SetsqlSessionTemplate (SQLSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate; }} 3.
pacote com.jdd.dao; importação com.jdd.pojo.employee; importar java.util.list; interface pública Empregandoeedao {funcionário getemployeeById (int id); List <Puelpyle> findallemployees (); }4. Dao implementa a aula empregada
pacote com.jdd.dao.impl; importação com.jdd.dao.basedAo; importação com.jdd.dao.employeedao; importação com.jdd.pojo.employee; importar org.springframework.tereotype.repository; importar java.util.list; @Repository ("Employeedao") Classe pública empregada EmpregadaOImpl estende baseado em base em empregados {@Override funcionário público getemployeeById (int id) {return sqlsessionTemplate.SelectOne ("com.jdd.dao.employeedao.getemployeBebyid", id); } @Override Public List <Eclarey> findallemployees () {return sqlSessionTemplate.SelectList ("com.jdd.dao.employeedao.findallemployeees"); }}5. Agora você pode injetar diretamente o Employeedao na classe de serviço para usá -lo.
NOTA: A injeção de base aqui é mais flexível. Você também pode injetar o SQLSessionFactory e, em seguida, criar SQLSessionTemplate no método do setter, como segue:
pacote com.jdd.dao; importar org.apache.ibatis.session.sqlSessionFactory; importar org.mybatis.spring.sqlsessionTemplate; importar javax.annotation.resource; public abstract classe baseada {public sqlSessionTemplate sqlSessionTemplate; @Resource Public void SetsqlSessionFactory (SQLSessionFactory SQLSessionFactory) {SQLSessionTemplate = new SQLSessionTemplate (SQLSessionFactory); }}De fato, seja o método de herdar a classe SQLSessionDaosupport, injetar o SQLSessionFactory ou injetar diretamente o SQLSessionTemplate, é essencialmente o mesmo.
Se você injetar o SQLSessionFactory, ele também cria um SQLSessionTemplate através do SQLSessionFactory na parte inferior e depois opera através de sua API.
Se você não acredita, deixe -me ver o código -fonte do SQLSessionDaosupport:
// // Código fonte recriado de um arquivo .class por Intellij Idea // (alimentado por Fernflower Decompiler) // pacote 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; Classe abstrata pública SQLSessionDaosupport estende Daosupport {private SQLSession SQLSession; Private Boolean 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; } Void protegido checkDaoconfig () {Assert.NotNull (this.sqlSession, "Propriedade 'SQLSessionFactory' ou 'SQLSessionTemplate' são necessários"); }}Da mesma forma, o SQLSessionTemplate herda a interface SQLSession, portanto o efeito é o mesmo, independentemente da operação.
// // Código fonte recriado de um arquivo .class por Intellij Idea // (alimentado por Fernflower Decompiler) // pacote org.mybatis.spring; importar java.lang.reflect.invocationHandler; importar java.lang.reflect.method; importar java.lang.reflect.proxy; importar java.sql.connection; importar java.util.list; importar 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.ExecutyType; 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; classe pública SQLSessionTemplate implementa SQLSession {private final SQLSessionFactory SQLSessionFactory; ExecutyTyTyTyTyTy do ExecutyType de Executype; SQLSession SQLSessionProxy privado; PersistenceExceptionTranslator de PERSISTECIÇÃO DE PRIVADO EXCECTRANSLATOR; public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory) {this (sqlSessionFactory, sqlSessionFactory.getConfiguration (). getDefaultExecutyType ()); } public sqlSessionTemplate (sqlSessionFactory sqlSessionFactory, ExecutyType ExecutOrType) {this (sqlSessionFactory, ExecutOrType, new MybatisexceptionTranslator (sqlSessionFactory.getConfiguration (). } public SQLSessionTemplate (SQLSessionFactory SQLSessionFactory, ExecutyType ExecutyType, PersistenceExceptionTranslator ExceptionTranslator) {Assert.NotNull (SQLSessionFactory, "Propriedade 'SQLSessionFactory' é exigido"); Assert.NotNull (ExecutOtype, "Property 'ExecutyType' é necessário"); this.sqlSessionFactory = sqlSessionFactory; this.ExecutyType = ExecutOnType; this.ExceptionTranslator = ExceptionTranslator; this.sqlSessionProxy = (sqlSession) proxy.NewProxyInstance (sqlSessionFactory.class.getclassloader (), nova classe [] {sqlsession.class}, new sqlSessionTemplate.SqlSessionIntercetor ()); } public sqlSessionFactory getSqlSessionFactory () {return this.sqlSessionFactory; } public ExecutyType GetExecutyType () {return this.executyType; } public PersistenceExceptionTranslator getPerSistenceExceptionTranslator () {return this.ExceptionTranslator; } public <T> t SelectOne (String Declarent) {return this.sqlSessionProxy.SelectOne (Declaração); } public <T> t SelectOne (instrução String, parâmetro de objeto) {return this.sqlSessionProxy.SelectOne (instrução, parâmetro); } public <k, v> map <k, v> selectMap (instrução String, string mapkey) {return this.sqlSessionProxy.SelectMap (Declaração, MapKey); } public <k, v> map <k, v> selectMap (instrução String, parâmetro de objeto, string mapkey) {return this.sqlSessionProxy.SelectMap (instrução, parâmetro, mapkey); } public <k, v> map <k, v> selectMap (instrução String, parâmetro de objeto, string mapkey, rowbounds rowbounds) {return this.sqlSessionProxy.SelectMap (instrução, parâmetro, mapkey, rowbounds); } public <e> list <e> selectList (String Declaration) {return this.sqlSessionProxy.SelectList (declaração); } public <e> list <e> selectlist (instrução String, parâmetro de objeto) {return this.sqlSessionProxy.SelectList (instrução, parâmetro); } public <e> list <e> selectList (instrução String, parâmetro de objeto, rowbounds rowbounds) {return this.sqlSessionProxy.SelectList (Declaração, Parâmetro, RowBounds); } public void Select (instrução String, Reselhhandler Handler) {this.sqlSessionProxy.Select (Declaração, Handler); } public void Select (instrução String, parâmetro de objeto, manipulador de resulta) {this.sqlSessionProxy.Select (instrução, parâmetro, manipulador); } public void Select (instrução String, parâmetro de objeto, rowbounds rowbounds, manipulador resulta) {this.sqlSessionProxy.Select (declaração, parâmetro, rowbounds, manipulador); } public int insert (instrução string) {return this.sqlSessionProxy.insert (declaração); } public int insert (instrução string, parâmetro de objeto) {return this.sqlSessionProxy.insert (instrução, parâmetro); } public int update (instrução string) {return this.sqlSessionProxy.Update (declaração); } public int update (instrução string, parâmetro de objeto) {return this.sqlSessionProxy.Update (instrução, parâmetro); } public int Delete (String Declaration) {return this.sqlSessionProxy.Delete (Declaração); } public int Delete (instrução String, parâmetro de objeto) {return this.sqlSessionProxy.Delete (instrução, parâmetro); } public <T> t getMapper (classe <T> type) {return this.getConfiguration (). getMapper (type, this); } public void Commit () {THON NOVA UNSUPPORTEDOPERATIONEXCECTION ("O comprometimento manual não é permitido em um SQLSession gerenciado pela primavera"); } public void Commit (Força Booleana) {TOME NOVA UNSUPORPORTEDOPERATIONEXCECTION ("O comprometimento manual não é permitido em um SQLSession gerenciado pela primavera"); } public void rollback () {THON NOVA UNSUPPORTEDOPERATIONECCECTION ("A reversão manual não é permitida em um sqlSession gerenciado pela primavera"); } rollback public void (força booleana) {TOME NOVA UNSUPORPORTEDOPERAÇÃO ("A reversão manual não é permitida em um SQLSession gerenciado pela primavera"); } public void Close () {THON NOVA UNSUPPORTEDOPERATIONECTIÇÃO ("O fechamento manual não é permitido em um SQLSession gerenciado pela primavera"); } public void clearcache () {this.sqlSessionProxy.clearcache (); } configuração pública getConfiguration () {return this.sqlSessionFactory.getConfiguration (); } conexão pública getConnection () {return this.sqlSessionProxy.getConnection (); } list public <atchresult> flushStatements () {return this.sqlSessionProxy.flushstatements (); } private class SqlSessionInterceptor implements InvocationHandler { private SqlSessionInterceptor() { } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { SqlSession sqlSession = SqlSessionUtils.getSqlSession(SqlSessionTemplate.this.sqlSessionFactory, SqlSessionTemplate.This.Executype, sqlSessionTemplate.This.ExceptionTranslator); Objeto desembrulhado; tente {objeto resultado = métod.invoke (sqlSession, args); If (! } desembrulhado = resultado; } catch (throwable var) {não tapped = excepcionutil.unwraphrowable (var); if (sqlSessionTemplate.This.ExceptionTranslator! = NULL && Unpraped Instância de PersistenceException) {sqlSessionUtils.closhSqlSession (sqlSession, sqlSessionTemplate.This.SqlSessionFactory); sqlSession = null; Throwable traduzido = sqlSessionTemplate.This.ExceptionTranslator.TranslateExceptionIfPssible ((PersistenceException) desembrulhado); if (traduzido! = null) {desembrulhado = traduzido; }} arremesso (jogável) desembrulhado; } finalmente {if (sqlSession! = null) {sqlSessionUtils.closhSqlSession (sqlSession, sqlSessionTemplate.This.SqlSessionFactory); }} retorna desembrulhado; }}}}Resumir
Os acima são vários métodos de configuração para as fontes de dados de integração da mola no Mybatis introduzidas a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem. O editor responderá a você a tempo!