Потому что в процессе интеграции пружины интегрирует Mybatis, особенно источник данных. Я часто вижу различные методы конфигурации и всегда чувствую себя немного грязным, поэтому у меня есть время, чтобы суммировать их сегодня.
1. Используйте org.mybatis.spring.mapper.mapperscannerConfigurer
На самом деле, это так же, как реверс -инженерия
1. Файл конфигурации источника данных
2. Файл DAO
пакет com.jdd.mapper; Импорт com.jdd.pojo.employee; импортировать java.util.list; Public Interface employerapper {public employee getemployeeybyid (int id); Общественный список <Сотрудник> findallEmployeees (); }3. файл 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.emplyeumpper"> <select empace = "gatebyid" gatebyid " parameterType = "int" outdetype = "com.jdd.pojo.employee"> <! [cdata [select * из сотрудника, где id = #{id}; ]]> </select> <select id = "findallemployeees" refultype = "com.jdd.pojo.employee"> <! [cdata [select * из сотрудника, где status = ''; ]]> </select> </mapper>Таким образом, вы можете непосредственно ввести интерфейс DAO в класс службы
пакет com.jdd.service.impl; Импорт com.jdd.mapper.employeemapper; Импорт com.jdd.pojo.employee; Импорт com.jdd.service.employeeservice; Импорт org.springframework.beans.factory.annotation.autowired; Импорт org.springframework.stereotype.service; импортировать java.util.list; @Service ("efffectservice") Public Class employmersImpl реализует сотрудники {@autowired private emplortyapper hopectapper; @Override public employee getEmployeeByid (int id) {return urporteemapper.getEmployeebyid (id); } @Override public list <memplieee> findallemployees () {return urpecteemapper.findallemployees (); }}2. Используйте абстрактный класс org.mybatis.spring.support.sqlsessiondaosupport, чтобы ввести его в sqlsessionFactory.
1. Файл конфигурации источника данных
<? 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://www.w.w.org/xmlns" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.spramework.org/schema/context 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-..xssdistrame. <Context: Property Placeholder location = "classpath: resource /*. Properties" /> <!-Пул соединений базы данных-> <Bean Id = "DataSource" Dressome-method = "close"> <name = "urlclassname" value = "$ {jdbc.driver}" /> <собственность = "url" value = "$ {jdbc.Url}" /> <свойство = "url" = "$ {jdbc.Url}" /> <свойство = "url" = "$ {jdbc.Urc. value = "$ {jdbc.username}" /> <name = "password" value = "$ {jdbc.password}" /> <name = "maxactive" value = " /> <name =" minidle "value =" " /> < /bean> <!-sqlSessionFactor value = "classpath: mybatis/sqlmapconfig.xml"> </property> <name = "dataSource" ref = "dataSource"> </property> <name = "mapperlocations" value = "classpath: com/jdd/mapper/*. xml"> </propetion> </beans>2. Основы класса
пакет com.jdd.dao; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.mybatis.spring.support.sqlsessiondaosupport; Импорт javax.annotation.resource; Общедоступный абстрактный класс FASTAO Extends SQLSessionDaoSupport {@Resource public void setSqlSessionFactory (sqlSessionFactory sqlSessionFactory) {super.setSqlSessionFactory (sqlSessionFactory); }}3. interface hopectiedao.java class
пакет com.jdd.dao; Импорт com.jdd.pojo.employee; импортировать java.util.list; общественный интерфейс hopieedao {employtee getemployeeebyid (int id); Список <Сотрудник> findAllEmployees (); }4. DAO реализует класс hopeedaoimpl
пакет com.jdd.dao.impl; Импорт com.jdd.dao.basedao; Импорт com.jdd.dao.employedao; Импорт com.jdd.pojo.employee; Import org.springframework.sterotype.repository; импортировать java.util.list; @Repository ("hookseeedao") открытый класс hopieedaoimpl extends foundao реализует hopieedao {@override public employee getemployeebyid (int id) {return this.getSqlSession (). SelectOne ("com.jdd.dao.employeedao.getemployeeyid", id); } @Override public list <mempieee> findallEmployees () {return this.getSqlSession (). SelectList ("com.jdd.dao.employeedao.findallemployees"); }}5. Таким образом, вы можете внедрить работоспособность в класс услуг.
3. Использовать org.mybatis.spring.sqlsessionTemplate Template Class
1. Файл источника данных
<? 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://www.w.w.org/xmlns" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.spramework.org/schema/context 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-..xssdistrame. <Context: Property Placeholder location = "classpath: resource /*. Properties" /> <!-Пул соединений базы данных-> <Bean Id = "DataSource" Dressome-method = "close"> <name = "urlclassname" value = "$ {jdbc.driver}" /> <собственность = "url" value = "$ {jdbc.Url}" /> <свойство = "url" = "$ {jdbc.Url}" /> <свойство = "url" = "$ {jdbc.Urc. value = "$ {jdbc.username}" /> <name = "password" value = "$ {jdbc.password}" /> <name = "maxactive" value = " /> <name =" minidle "value =" " /> < /bean> <!-sqlSessionFactor value = "classpath: mybatis/sqlmapconfig.xml"> </property> <name = "dataSource" ref = "dataSource"> </property> <name = "mapperlocations" value = "classpath: com/jdd/mapper/*. xml"> </properation> </bean> <bean id = "sqlate extaute equatrs"> </propetity> </bean> <bean ad = "sqlate yevertemporteamt <constructor-arg index = "" ref = "sqlSessionFactory"/> </bean> </beans>2. Основы класса Java
пакет com.jdd.dao; Импорт org.mybatis.spring.sqlsessionTemplate; Импорт javax.annotation.resource; Public Abstract Class Basedao {public sqlSessionTemplate sqlSessionTemplate; @Resource public void setSqlSessionTemplate (sqlSessionTemplate sqlSessionTemplate) {this.SqlSessionTemplate = sqlSessionTemplate; }} 3. interface hopectiedao.java class
пакет com.jdd.dao; Импорт com.jdd.pojo.employee; импортировать java.util.list; общественный интерфейс hopieedao {employtee getemployeeebyid (int id); Список <Сотрудник> findAllEmployees (); }4. DAO реализует класс hopeedaoimpl
пакет com.jdd.dao.impl; Импорт com.jdd.dao.basedao; Импорт com.jdd.dao.employedao; Импорт com.jdd.pojo.employee; Import org.springframework.sterotype.repository; импортировать java.util.list; @Repository ("hopieedao") открытый класс hopieedaoimpl расширяет основанные на основе homyeedao {@override public employee getemployeeebeid (int id) {return sqlSessionTemplate.selectone ("com.jdd.dao.employeedao.getemployeeedemid., id); } @Override public list <mempieee> findallemployees () {return sqlSessionTemplate.selectlist ("com.jdd.dao.employeedao.findallemployeees"); }}5. Теперь вы можете непосредственно ввести hopeedao в класс услуг, чтобы использовать его.
Примечание: инъекция Baserao здесь более гибкая. Вы также можете ввести SQLSessionFactory, а затем создать SQLSessionTemplate в методе сеттера следующим образом:
пакет com.jdd.dao; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.mybatis.spring.sqlsessionTemplate; Импорт javax.annotation.resource; Public Abstract Class Basedao {public sqlSessionTemplate sqlSessionTemplate; @Resource public void setSqlSessionFactory (sqlSessionFactory sqlSessionFactory) {sqlSessionTemplate = new sqlSessionTemplate (sqlSessionFactory); }}Фактически, независимо от того, является ли это методом унаследования класса SQLSessionDaoSupport, инъекции SQLSessionFactory или непосредственно ввода SQLSessionTemplate, он по сути одинаково.
Если вы вводите SQLSessionFactory, это также создает SQLSessionTemplate через SQLSessionFactory внизу, а затем работает через свой API.
Если вы не верите в это, позвольте мне увидеть исходный код SQLSessionDaoSupport:
// // исходный код, воссозданный из файла .class Intellij Idea // (Powered by Decropiler Fernflower) // Пакет org.mybatis.spring.support; импорт org.apache.ibatis.session.sqlsession; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.mybatis.spring.sqlsessionTemplate; Импорт org.springframework.dao.support.daosupport; Импорт org.springframework.util.assert; Общественный абстрактный класс SQLSessionDaosupport расширяет DaoSupport {Private SQLSession SQLSession; Частный логический externalsqlsession; public sqlSessionDaoSupport () {} public void setSqlSessionFactory (sqlSessionFactory sqlSessionFactory) {if (! this.externalSqlSession) {this.SqlSession = new SqlSessionTemptAte (sqlSessionFactory); }} public void setSqlSessionTemplate (sqlSessionTemplate sqlSessionTemplate) {this.SqlSession = sqlSessionTemplate; this.externalsqlsession = true; } public sqlSession getSqlSession () {return this.sqlsession; } Защищенный void checkDaoConfig () {assert.notnull (this.sqlsession, "Property 'sqlSessionFactory' или 'sqlSessionTemplate' требуется"); }}Точно так же SQLSessionTemplate наследует интерфейс SQLSession, поэтому эффект одинаково независимо от работы.
// // исходный код, воссозданный из файла .class с помощью Intellij Idea // (Powered by Decropiler Fernflower) // Пакет org.mybatis.spring; импортировать java.lang.reflect.invocationHandler; импортировать java.lang.reflect.method; Импорт java.lang.reflect.proxy; Импорт java.sql.connection; импортировать java.util.list; импортировать java.util.map; Импорт org.apache.ibatis.exceptions.persistenceexception; импорт org.apache.ibatis.executor.batchresult; Импорт org.apache.ibatis.reflection.ExceptionUtil; Импорт org.apache.ibatis.session.configuration; Импорт org.apache.ibatis.session.executortype; Импорт org.apache.ibatis.session.resulthandler; Импорт org.apache.ibatis.session.rowbounds; импорт org.apache.ibatis.session.sqlsession; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.springframework.dao.support.persistenceexceptionTranslator; Импорт org.springframework.util.assert; Общедоступный класс SQLSessionTemplate реализует SQLSession {Private Final SQLSessionFactory SQLSessionFactory; частное окончательное исполнение Arexortype; Частный финальный SQLSession SQLSessionProxy; Частный финальный PersistenceExceptionTranslator ExceptionTranslator; public sqlSessionTemplate (sqlSessionFactory sqlSessionFactory) {this (sqlSessionFactory, sqlSessionFactory.getConfiguration (). getDefaultexeCutorType ()); } public sqlSessionTemplate (sqlSessionFactory sqlSessionFactory, exectortype exectortype) {this (sqlSessionFactory, executype, new mybatisexceptionTranslator (sqlSessionFactory.getConfiguration (). getEnvironment (). getDataSource (), true); } public sqlSessionTemplate (sqlSessionFactory sqlSessionFactory, exectortype exectortype, persistenceExceptionTranslator ExceptionTranslator) {assert.notnull (sqlSessionFactory, «Property 'SqlSessionFactory' требуется»); »); Assert.notnull (executortype, "Property 'recemortype' требуется"); this.sqlsessionFactory = sqlSessionFactory; this.executortype = executortype; this.ExceptionTranslator = ExceptionTranslator; this.sqlsessionProxy = (sqlSession) proxy.newProxyInstance (sqlSessionFactory.class.getClassLoader (), новый класс [] {sqlSession.Class}, new SqlSessionTemplate.sqlSessionInterceptor ()); } public sqlSessionFactory getSqlSessionFactory () {return this.SqlSessionFactory; } public executorType getExeCutorType () {return this.executortype; } public persistenceExceptionTranslator getPerSistenceExceptionTranslator () {return this.ExceptionTranslator; } public <t> t selectOne (string ratement) {return this.sqlsessionproxy.selectone (оператор); } public <t> t selectOne (string ratement, parameter) {return this.sqlsessionproxy.selectone (оператор, параметр); } public <K, v> map <k, v> selectmap (string ratement, string mapkey) {return this.sqlsessionproxy.selectmap (оператор, mapkey); } public <K, v> map <k, v> selectmap (string ratement, parameter, string mapkey) {return this.sqlsessionproxy.selectmap (оператор, параметр, mapkey); } public <K, v> map <K, v> selectMap (оператор строки, параметр объекта, String Mapkey, Rowbounds Rowbounds) {return this.sqlsessionproxy.selectmap (оператор, параметр, mapkey, rowbounds); } public <e> list <e> selectList (string ratement) {return this.sqlsessionproxy.selectlist (atervice); } public <e> list <e> selectlist (string startice, parameter) {return this.sqlsessionproxy.selectlist (оператор, параметр); } public <e> list <e> selectlist (оператор строки, параметр объекта, rowbounds rowbounds) {return this.sqlsessionproxy.selectlist (оператор, параметр, rowbounds); } public void Select (String оператор, Resulthandler Handler) {this.SqlSessionProxy.select (оператор, обработчик); } public void select (string ratement, параметр объекта, обработчик Resulthandler) {this.SqlSessionProxy.select (оператор, параметр, обработчик); } public void Select (String оператор, параметр объекта, Rowbounds Rowbounds, Resulthandler Handler) {this.sqlSessionProxy.select (оператор, параметр, rowbounds, handler); } public int insert (string atervice) {return this.sqlsessionproxy.insert (atervice); } public int insert (string ratement, parameter) {return this.sqlsessionproxy.insert (оператор, параметр); } public int update (string ratement) {return this.sqlsessionproxy.update (ateportment); } public int update (string ratement, parameter) {return this.sqlsessionproxy.update (оператор, параметр); } public int delete (string atervice) {return this.sqlsessionproxy.delete (atervice); } public int delete (string ratement, parameter) {return this.sqlsessionproxy.delete (оператор, параметр); } public <t> t getMapper (class <t> type) {return this.getConfiguration (). getMapper (type, this); } public void Commit () {бросить новое UnsupportedOperationException («ручная коммита не разрешена в рамках весеннего управляемого sqlSession»); } public void Commit (Boolean Force) {Выбросить новое UnsupportedOperationException («Ручная коммита не допускается в течение весеннего управляемого sqlSession»); } public void roplack () {бросить новое UnsupportedOperationException («Ручной откат не допускается в рамках пружины управляемого sqlSession»); } public void rowlback (Boolean Force) {Throw New UnsupportedOperationException («Ручное откат не допускается в рамках пружины, управляемого SQLSession»); } public void close () {бросить новое UnsupPortedOperationException («Ручное закрытие не разрешено в рамках пружины, управляемого 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 (); } Частный класс SQLSessionInterceptor реализует vlocationHandler {private sqlSessionInterceptor () {} public Object volke (объект прокси, метод, объект [] args) бросает бросание {sqlSession sqlSession = sqlSessionUtils.getssession (sqlSessionTemptAte.Thiss.seSscessoor SqlSessionTemplate.his.executortype, sqlSessionTemplate.this.exceptionTranslator); Объект не развернут; try {object result = method.invoke (sqlsession, args); if (! sqlSessionUtils.issqlSessionTransactional (sqlSession, sqlSessionTemplate.this.sqlSessionFactory)) {sqlSession.commit (true); } unprawRed = result; } catch (throwable var) {unwranced = exceptionUtil.UnWrapThrowable (var); if (sqlSessionTemplate.This.ExceptionTranslator! = null && uncrouded ancessement of PersistenceException) {sqlSessionUtils.closeSqlSession (sqlSession, sqlSessionTemplate.This.SqlSessionFactory); sqlSession = null; Throwable переведен = sqlSessionTemplate.This.ExceptionTranslator.TransLateExceptionIfpossible ((PersistenceException) неверно); if (переведен! = null) {unwranted = переведен; }} бросить (бросается) развернут; } наконец {if (sqlSession! = null) {sqlSessionUtils.closeqlSession (sqlSession, sqlSessionTemplate.this.sqlSessionFactory); }} return unpructed; }}}}Суммировать
Выше приведено несколько методов конфигурации для пружинной интеграции источников данных в Mybatis, представленных вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение. Редактор ответит вам вовремя!